diff --git a/CHANGELOG b/CHANGELOG index adf94f415..1d2af1e31 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -171,6 +171,14 @@ - minor fix for better behaviour of folder tree ('plus' signs appears if folder has children) - allow to import users from csv file +- skip all fileѕ and directories starting with a '.' when creating an extension's + zip file +- add support for authentication of the rest api by a key +- add support for CORS in the rest api +- fix parsing of file size +- major rework of restapi which has now a swagger specification +- fix indexing of documents by script (Closes: #479) +- fix ordering of folders in DocumentChooser and FolderChooser -------------------------------------------------------------------------------- Changes in version 5.1.17 diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 466c94f65..d26517222 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -767,7 +767,7 @@ class SeedDMS_Core_DMS { if (!$db->createTemporaryTable("ttstatid") || !$db->createTemporaryTable("ttcontentid")) { return false; } - + $tsnow = mktime(0, 0, 0); /* Start of today */ if(is_int($date)) { $ts = $tsnow + $date * 86400; @@ -872,6 +872,9 @@ class SeedDMS_Core_DMS { function getDocumentByOriginalFilename($name, $folder=null) { /* {{{ */ if (!$name) return false; + if (!$this->db->createTemporaryTable("ttcontentid")) { + return false; + } $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser` ". "FROM `tblDocuments` ". "LEFT JOIN `ttcontentid` ON `ttcontentid`.`document` = `tblDocuments`.`id` ". diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 2d11292fd..5bbd3078f 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -986,6 +986,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ } /* }}} */ /** +<<<<<<< HEAD * Check if document is checked out * * @return boolean true if checked out otherwise false @@ -1206,11 +1207,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * @return int +======= + * @return float +>>>>>>> seeddms-5.1.x */ function getSequence() { return $this->_sequence; } /** - * @param $seq + * @param float $seq * @return bool */ function setSequence($seq) { /* {{{ */ @@ -5046,7 +5050,14 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ } /* If a user is added when the revision has already been startet, then - * put it in S_IN_REVISION otherwise in S_LOG_WAITING. + * put it into S_LOG_WAITING otherwise into S_LOG_SLEEPING. Attention, if a + * document content is in any other status but S_IN_REVISION, then it will + * end up in S_LOG_SLEEPING. As this method is also called by removeFromProcesses() + * when another user takes over the processes, it may happen that revisions + * of document contents in status e.g. S_OBSOLETE, S_EXPIRED will change its + * status from S_LOG_WAITING to S_LOG_SLEEPING. + * This could only be fixed if this method could set an initial revision status + * by possibly passing it as another parameter to the method. */ $st=$this->getStatus(); $queryStr = "INSERT INTO `tblDocumentRevisionLog` (`revisionID`, `status`, `comment`, `date`, `userID`) ". diff --git a/SeedDMS_Core/Core/inc.ClassUser.php b/SeedDMS_Core/Core/inc.ClassUser.php index efadb272d..e8dc061c2 100644 --- a/SeedDMS_Core/Core/inc.ClassUser.php +++ b/SeedDMS_Core/Core/inc.ClassUser.php @@ -662,7 +662,7 @@ class SeedDMS_Core_User { /* {{{ */ $classname = $dms->getClassname('role'); $role = $classname::getInstance($resArr['role'], $dms); - $user = new self($resArr["id"], $resArr["login"], $resArr["pwd"], $resArr["fullName"], $resArr["email"], $resArr["language"], $resArr["theme"], $resArr["comment"], $role, $resArr["hidden"], $resArr["disabled"], $resArr["pwdExpiration"], $resArr["loginfailures"], $resArr["quota"], $resArr["homefolder"], $resArr["secret"], $resArr["webauthn"], $resArr["disabledUntil"]); + $user = new self((int) $resArr["id"], $resArr["login"], $resArr["pwd"], $resArr["fullName"], $resArr["email"], $resArr["language"], $resArr["theme"], $resArr["comment"], $role, $resArr["hidden"], $resArr["disabled"], $resArr["pwdExpiration"], $resArr["loginfailures"], $resArr["quota"], $resArr["homefolder"], $resArr["secret"], $resArr["webauthn"], $resArr["disabledUntil"]); $user->setDMS($dms); return $user; } /* }}} */ @@ -1273,8 +1273,8 @@ class SeedDMS_Core_User { /* {{{ */ $db->rollbackTransaction(); return false; } - /* Only revisions not done already can be transferred to a new user */ - if($newuser && $ri['status'] == 0) { + /* Only revisions not already done or sleeping can be transferred to a new user */ + if($newuser && in_array($ri['status'], array(S_LOG_WAITING, S_LOG_SLEEPING))) { if($doc = $this->_dms->getDocument($ri['documentID'])) { if($version = $doc->getContentByVersion($ri['version'])) { $ret = $version->addIndRevisor($newuser, $user); @@ -1657,7 +1657,7 @@ class SeedDMS_Core_User { /* {{{ */ $classname = $this->_dms->getClassname('group'); foreach ($resArr as $row) { /** @var SeedDMS_Core_Group $group */ - $group = new $classname($row["id"], $row["name"], $row["comment"]); + $group = new $classname((int) $row["id"], $row["name"], $row["comment"]); $group->setDMS($this->_dms); array_push($this->_groups, $group); } @@ -1758,7 +1758,7 @@ class SeedDMS_Core_User { /* {{{ */ $classname = $this->_dms->getClassname('document'); foreach ($resArr as $row) { /** @var SeedDMS_Core_Document $document */ - $document = new $classname($row["id"], $row["name"], $row["comment"], $row["date"], $row["expires"], $row["owner"], $row["folder"], $row["inheritAccess"], $row["defaultAccess"], $row["lockUser"], $row["keywords"], $row["sequence"]); + $document = new $classname((int) $row["id"], $row["name"], $row["comment"], $row["date"], $row["expires"], $row["owner"], $row["folder"], $row["inheritAccess"], $row["defaultAccess"], $row["lockUser"], $row["keywords"], $row["sequence"]); $document->setDMS($this->_dms); $documents[] = $document; } @@ -1786,7 +1786,7 @@ class SeedDMS_Core_User { /* {{{ */ $classname = $this->_dms->getClassname('document'); foreach ($resArr as $row) { /** @var SeedDMS_Core_Document $document */ - $document = new $classname($row["id"], $row["name"], $row["comment"], $row["date"], $row["expires"], $row["owner"], $row["folder"], $row["inheritAccess"], $row["defaultAccess"], $row["lockUser"], $row["keywords"], $row["sequence"]); + $document = new $classname((int) $row["id"], $row["name"], $row["comment"], $row["date"], $row["expires"], $row["owner"], $row["folder"], $row["inheritAccess"], $row["defaultAccess"], $row["lockUser"], $row["keywords"], $row["sequence"]); $document->setDMS($this->_dms); $documents[] = $document; } @@ -2241,7 +2241,7 @@ class SeedDMS_Core_User { /* {{{ */ $result = array(); if (count($resArr)>0) { foreach ($resArr as $res) { - $result[] = $this->_dms->getWorkflow($res['id']); + $result[] = $this->_dms->getWorkflow((int) $res['id']); } } @@ -2741,7 +2741,7 @@ class SeedDMS_Core_User { /* {{{ */ $categories = array(); foreach ($resArr as $row) { - $cat = new SeedDMS_Core_KeywordCategory($row["id"], $row["owner"], $row["name"]); + $cat = new SeedDMS_Core_KeywordCategory((int) $row["id"], $row["owner"], $row["name"]); $cat->setDMS($this->_dms); array_push($categories, $cat); } diff --git a/SeedDMS_Core/Core/inc.FileUtils.php b/SeedDMS_Core/Core/inc.FileUtils.php index dc6238063..2001ea316 100644 --- a/SeedDMS_Core/Core/inc.FileUtils.php +++ b/SeedDMS_Core/Core/inc.FileUtils.php @@ -93,13 +93,12 @@ class SeedDMS_Core_File { * @return bool|int */ static function parse_filesize($str) { /* {{{ */ - preg_replace('/\s\s+/', ' ', $str); - if(strtoupper(substr($str, -1)) == 'B') { - $value = (int) substr($str, 0, -2); - $unit = substr($str, -2, 1); - } else { + preg_replace('/\s\s+/', '', $str); + if(in_array(strtoupper(substr($str, -1)), array('B','K','M','G'))) { $value = (int) substr($str, 0, -1); - $unit = substr($str, -1); + $unit = substr($str, -1, 1); + } else { + return (int) $str; } switch(strtoupper($unit)) { case 'G': diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index a7d48cbf4..4e5f8cb8a 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -1798,6 +1798,8 @@ add method SeedDMS_Core_DatabaseAccess::setLogFp() GPL License - fixed remaining todos +- fixed parsing of file size in SeedDMS_Core_File::parse_filesize() +- fix SeedDMS_Core_DMS::getDocumentByOriginalFilename() diff --git a/controllers/class.AddDocument.php b/controllers/class.AddDocument.php index 124e6c7a0..6a0ad33ee 100644 --- a/controllers/class.AddDocument.php +++ b/controllers/class.AddDocument.php @@ -75,19 +75,20 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common { } } } - $attributes_version = $this->getParam('attributesversion'); - foreach($attributes_version as $attrdefid=>$attribute) { - if($attrdef = $dms->getAttributeDefinition($attrdefid)) { - if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { - if($attribute) { - if(!$attrdef->validate($attribute)) { - $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); - return false; + if($attributes_version = $this->getParam('attributesversion')) { + foreach($attributes_version as $attrdefid=>$attribute) { + if($attrdef = $dms->getAttributeDefinition($attrdefid)) { + if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { + if($attribute) { + if(!$attrdef->validate($attribute)) { + $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); + return false; + } + } + } else { + if($ret === false) + return false; } - } - } else { - if($ret === false) - return false; } } } @@ -123,17 +124,19 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common { } $lc = $document->getLatestContent(); - if($recipients['i']) { - foreach($recipients['i'] as $uid) { - if($u = $dms->getUser($uid)) { - $res = $lc->addIndRecipient($u, $user); + if($recipients) { + if($recipients['i']) { + foreach($recipients['i'] as $uid) { + if($u = $dms->getUser($uid)) { + $res = $lc->addIndRecipient($u, $user); + } } } - } - if($recipients['g']) { - foreach($recipients['g'] as $gid) { - if($g = $dms->getGroup($gid)) { - $res = $lc->addGrpRecipient($g, $user); + if($recipients['g']) { + foreach($recipients['g'] as $gid) { + if($g = $dms->getGroup($gid)) { + $res = $lc->addGrpRecipient($g, $user); + } } } } diff --git a/controllers/class.Cron.php b/controllers/class.Cron.php index 631d20253..2c9d62837 100644 --- a/controllers/class.Cron.php +++ b/controllers/class.Cron.php @@ -28,34 +28,34 @@ class SeedDMS_Controller_Cron extends SeedDMS_Controller_Common { $mode = 'run'; //$this->params['mode']; $db = $dms->getDb(); -$scheduler = new SeedDMS_Scheduler($db); -$tasks = $scheduler->getTasks(); + $scheduler = new SeedDMS_Scheduler($db); + $tasks = $scheduler->getTasks(); -foreach($tasks as $task) { - if(isset($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()]) && is_object($taskobj = $GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()])) { - switch($mode) { - case "run": - if(method_exists($taskobj, 'execute')) { - if(!$task->getDisabled() && $task->isDue()) { - if($user = $dms->getUserByLogin('cli_scheduler')) { - if($taskobj->execute($task, $dms, $user, $settings)) { - add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." successful."); - $task->updateLastNextRun(); - } else { - add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." failed, task has been disabled.", PEAR_LOG_ERR); - $task->setDisabled(1); - } - } else { - add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." failed because of missing user 'cli_scheduler'. Task has been disabled.", PEAR_LOG_ERR); - $task->setDisabled(1); + foreach($tasks as $task) { + if(isset($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()]) && is_object($taskobj = resolveTask($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()]))) { + switch($mode) { + case "run": + if(method_exists($taskobj, 'execute')) { + if(!$task->getDisabled() && $task->isDue()) { + if($user = $dms->getUserByLogin('cli_scheduler')) { + if($taskobj->execute($task)) { + add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." successful."); + $task->updateLastNextRun(); + } else { + add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." failed, task has been disabled.", PEAR_LOG_ERR); + $task->setDisabled(1); + } + } else { + add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." failed because of missing user 'cli_scheduler'. Task has been disabled.", PEAR_LOG_ERR); + $task->setDisabled(1); + } + } } + break; } } - break; } - } -} return true; } /* }}} */ } diff --git a/doc/README.Install.md b/doc/README.Install.md index d70acd0fc..39cf13fec 100644 --- a/doc/README.Install.md +++ b/doc/README.Install.md @@ -16,21 +16,22 @@ Here is a detailed list of requirements: 1. A web server with at least php 7.0 2. A mysql database, unless you use sqlite -3. The php installation must have support for `pdo_mysql` or `pdo_sqlite`, - `php_gd2`, `php_mbstring` -4. Various command line programms to convert files into text for indexing +3. The php installation must have support for `pdo_mysql`, `pdo_pgsql` or `pdo_sqlite`, + `php_gd2`, `php_mbstring`, `php_xml` +4. Depending on the configuration the extensions `php_ldap`, `php_mycrypt`, + `php_gmp`, `php_libsodium`must be installed +5. Various command line programms to convert files into text for indexing pdftotext, catdoc, xls2csv or scconvert, cat, id3 (optional, only needed for fulltext search) -5. ImageMagic (the convert program) is needed for creating preview images -6. The Zend Framework (version 1) (optional, only needed for fulltext search) -7. The pear Log and Mail package -8. The pear HTTP_WebDAV_Server package (optional, only need for webdav) -9. SLIM RestApi -10. FeedWriter from https://github.com/mibe/FeedWriter +6. ImageMagic (the convert program) is needed for creating preview images +7. A bunch of packages from Packagist which all ship with the seeddms-quickstart + archive -It is highly recommended to use the quickstart archive (seeddms-quickstart-x.y.z.tar.gz) -because it includes all software packages for running SeedDMS, though you still need -a working web server with PHP and a mysql database unless you intend to use sqlite. +It is highly recommended to use the quickstart archive +(seeddms-quickstart-x.y.z.tar.gz) because it includes all software packages +(excluding those listing above in item 1. to 6.) for running SeedDMS. Hence, +you still need a working web server with PHP and a mysql or postgres database +unless you intend to use sqlite. QUICKSTART =========== @@ -45,7 +46,11 @@ below `seeddms51x` or add an alias. For apache this could be like Alias /seeddms51x //seeddms51x/www -Do not set the DocumentRoot to +or even + +Alias /mydms //seeddms51x/www + +Do not set the DocumentRoot or Alias to the `seeddms51x` directory, because this will allow anybody to access your `data` and `conf` directory. This is a major security risk. diff --git a/ext/example/class.example.php b/ext/example/class.example.php index c2dc22964..a0a5814a3 100644 --- a/ext/example/class.example.php +++ b/ext/example/class.example.php @@ -37,8 +37,8 @@ class SeedDMS_ExtExample extends SeedDMS_ExtBase { * * Use this method to do some initialization like setting up the hooks * You have access to the following global variables: - * $GLOBALS['settings'] : current global configuration - * $GLOBALS['settings']->_extensions['example'] : configuration of this extension + * $this->settings : current global configuration + * $this->settings->_extensions['example'] : configuration of this extension * $GLOBALS['LANG'] : the language array with translations for all languages * $GLOBALS['SEEDDMS_HOOKS'] : all hooks added so far */ diff --git a/inc/inc.ClassExtBase.php b/inc/inc.ClassExtBase.php index d9cd0602c..1c63891b6 100644 --- a/inc/inc.ClassExtBase.php +++ b/inc/inc.ClassExtBase.php @@ -29,4 +29,9 @@ * @package SeedDMS */ class SeedDMS_ExtBase { + var $settings; + + public function __construct($settings) { + $this->settings = $settings; + } } diff --git a/inc/inc.ClassExtensionMgr.php b/inc/inc.ClassExtensionMgr.php index 7a56771b0..c74b47481 100644 --- a/inc/inc.ClassExtensionMgr.php +++ b/inc/inc.ClassExtensionMgr.php @@ -259,6 +259,9 @@ class SeedDMS_Extension_Mgr { // Ignore "." and ".." folders if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) ) continue; + // Ignore all files and directories starting with a '.' + if( preg_match('#/\\.#', $file) ) + continue; $file = realpath($file); diff --git a/inc/inc.ClassSchedulerTaskBase.php b/inc/inc.ClassSchedulerTaskBase.php index 8cd8d40c6..a596348d9 100644 --- a/inc/inc.ClassSchedulerTaskBase.php +++ b/inc/inc.ClassSchedulerTaskBase.php @@ -29,9 +29,40 @@ * @package SeedDMS */ class SeedDMS_SchedulerTaskBase { - public function execute($task, $dms, $user, $settings) { + var $dms; + + var $user; + + var $settings; + + var $logger; + + public function __construct($dms=null, $user=null, $settings=null, $logger=null) { /* {{{ */ + $this->dms = $dms; + $this->user = $user; + $this->settings = $settings; + $this->logger = $logger; + } /* }}} */ + + public function execute($task) { /* {{{ */ return true; - } + } /* }}} */ + + public function getDescription() { /* {{{ */ + return ''; + } /* }}} */ + + public function getAdditionalParams() { /* {{{ */ + return array(); + } /* }}} */ + + public function getAdditionalParamByName($name) { /* {{{ */ + foreach($this->getAdditionalParams() as $param) { + if($param['name'] == $name) + return $param; + } + return null; + } /* }}} */ } ?> diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index d5686d790..61cd0f762 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -72,6 +72,12 @@ class Settings { /* {{{ */ var $_cookieLifetime = ''; // default access mode for documents var $_defaultAccessDocs = ''; + // api key for restapi + var $_apiKey = ''; + // api user id for restapi + var $_apiUserId = 0; + // api allowed origins for restapi + var $_apiOrigin = ''; // Strict form checking var $_strictFormCheck = false; // list of form fields which are visible by default but can be explixitly @@ -708,6 +714,9 @@ class Settings { /* {{{ */ $tab = $node[0]->attributes(); $this->_guestID = intval($tab["guestID"]); $this->_adminIP = strval($tab["adminIP"]); + $this->_apiKey = strval($tab["apiKey"]); + $this->_apiUserId = intval($tab["apiUserId"]); + $this->_apiOrigin = strval($tab["apiOrigin"]); } // XML Path: /configuration/advanced/edition @@ -1057,6 +1066,9 @@ class Settings { /* {{{ */ $node = $this->getXMLNode($xml, '/configuration/advanced', 'authentication'); $this->setXMLAttributValue($node, "guestID", $this->_guestID); $this->setXMLAttributValue($node, "adminIP", $this->_adminIP); + $this->setXMLAttributValue($node, "apiKey", $this->_apiKey); + $this->setXMLAttributValue($node, "apiUserId", $this->_apiUserId); + $this->setXMLAttributValue($node, "apiOrigin", $this->_apiOrigin); // XML Path: /configuration/advanced/edition $node = $this->getXMLNode($xml, '/configuration/advanced', 'edition'); diff --git a/inc/inc.Extension.php b/inc/inc.Extension.php index 74088c54c..6e685e010 100644 --- a/inc/inc.Extension.php +++ b/inc/inc.Extension.php @@ -44,7 +44,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']; + $obj = new $extconf['class']['name']($settings); if(method_exists($obj, 'init')) $obj->init(isset($settings->_extensions[$extname]) ? $settings->_extensions[$extname] : null); } diff --git a/inc/inc.Settings.php b/inc/inc.Settings.php index 75f124709..659b202d3 100644 --- a/inc/inc.Settings.php +++ b/inc/inc.Settings.php @@ -75,6 +75,7 @@ if($settings->_enableFullSearch) { require_once('SeedDMS/Lucene.php'); } } +$settings->_indexconf = $indexconf; /* Add root Dir. Needed because the view classes are included * relative to it. diff --git a/inc/inc.Tasks.php b/inc/inc.Tasks.php index 0311c227a..34e94537e 100644 --- a/inc/inc.Tasks.php +++ b/inc/inc.Tasks.php @@ -18,9 +18,13 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ * @param $dms dms * @return boolean true if task was executed succesfully, otherwise false */ - public function execute($task, $dms, $user, $settings) { + public function execute($task) { + $dms = $this->dms; $taskparams = $task->getParameter(); - $dms->getDocumentsExpired(intval($taskparams['days'])); + $docs = $dms->getDocumentsExpired(intval($taskparams['days'])); + foreach($docs as $doc) { + echo $doc->getName()."\n"; + } return true; } @@ -39,4 +43,4 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ } } /* }}} */ -$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['expireddocs'] = new SeedDMS_ExpiredDocumentsTask; +$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['expireddocs'] = 'SeedDMS_ExpiredDocumentsTask'; diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index 8390e16c9..e4b2582ab 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -629,6 +629,19 @@ function getToken($length){ return $token; } +function resolveTask($task) { + global $dms, $user, $settings, $logger; + + if(is_object($task)) + return $task; + if(is_string($task)) { + if(class_exists($task)) { + $task = new $task($dms, $user, $settings, $logger); + } + } + return $task; +} + class SeedDMS_CSRF { protected $secret; diff --git a/index.php b/index.php index c70f392f0..3698d0757 100644 --- a/index.php +++ b/index.php @@ -26,7 +26,6 @@ if(true) { include("inc/inc.Init.php"); include("inc/inc.Extension.php"); include("inc/inc.DBInit.php"); -// include("inc/inc.Authentication.php"); require "vendor/autoload.php"; @@ -56,6 +55,11 @@ if(true) { foreach($GLOBALS['SEEDDMS_HOOKS']['initDMS'] as $hookObj) { if (method_exists($hookObj, 'addRoute')) { $hookObj->addRoute(array('dms'=>$dms, 'app'=>$app, 'settings'=>$settings)); + } else { + include("inc/inc.Authentication.php"); + if (method_exists($hookObj, 'addRouteAfterAuthentication')) { + $hookObj->addRouteAfterAuthentication(array('dms'=>$dms, 'app'=>$app, 'settings'=>$settings, 'user'=>$user)); + } } } } diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 586a3d93d..99c956d34 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -282,6 +282,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'هل تود حقا ازالة كل الملفات الموجودة بالمجلد "[foldername]" وكل مافي المجلدات الفرعية؟
كن حذرا: هذا الاجراء لايمكن التراجع فيه', 'confirm_rm_group' => 'هل تود حقا ازالة المجموعة "[groupname]"?
كن حذرا: هذا الاجراء لايمكن التراجع فيه', 'confirm_rm_log' => 'هل تود حقا ازالة ملف السجل "[logname]"?
كن حذرا: هذا الاجراء لايمكن التراجع فيه', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'تاكيد ازالة الإحالة', 'confirm_rm_transmittalitem' => 'تاكيد ازالة حاجة الإحالة', 'confirm_rm_user' => 'هل تود حقا ازالة المستخدم "[username]"?
كن حذرا: هذا الاجراء لايمكن التراجع فيه', @@ -306,6 +307,7 @@ URL: [url]', 'current_version' => 'الإصدار الحالي', 'daily' => 'يومي', 'databasesearch' => 'بحث قاعدة البيانات', +'database_schema_version' => '', 'date' => 'تاريخ', 'days' => 'أيام', 'debug' => 'debug', @@ -657,6 +659,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'نسخ قائمة صلاحيات موروثة.', 'inherits_access_empty_msg' => 'ابدأ بقائمة صلاحيات فارغة', 'inherits_access_msg' => 'الصلاحيات موروثة.', +'installed_php_extensions' => '', 'internal_error' => 'خطأ داخلي', 'internal_error_exit' => 'خطأ داخلي. عدم الاستطاعة لاستكمال الطلب. خروج', 'invalid_access_mode' => 'حالة دخول غير صحيحة', @@ -772,6 +775,7 @@ URL: [url]', 'missing_checksum' => 'فحص الأخطاء مفقود', 'missing_file' => 'الملف غير موجود', 'missing_filesize' => 'حجم الملف مفقود', +'missing_php_extensions' => '', 'missing_reception' => 'الإستقبال غير موجود', 'missing_request_object' => 'طلب شيء غير موجود', 'missing_transition_user_group' => 'مستخدم/مجموعة مفقودة للتحول', @@ -923,6 +927,7 @@ URL: [url]', 'pending_revision' => 'إنتظار المراجعة', 'pending_workflows' => 'إنتظار سير العمل', 'personal_default_keywords' => 'قوائم الكلمات البحثية الشخصية', +'php_info' => '', 'pl_PL' => 'البولندية', 'possible_substitutes' => 'بدلاء متاحين', 'preset_expires' => 'تاريخ الإنتهاء', @@ -1084,6 +1089,7 @@ URL: [url]', 'rm_from_clipboard' => 'ازالة من لوحة القصاصات', 'rm_group' => 'ازالة هذه المجموعة', 'rm_role' => 'ازالة دور', +'rm_task' => '', 'rm_transmittal' => 'ازالة محول', 'rm_transmittalitem' => 'ازالة حاجة المحول', 'rm_user' => 'ازالة هذا المستخدم', @@ -1138,6 +1144,8 @@ URL: [url]', 'search_results_access_filtered' => 'نتائج البحث من الممكن ان تحتوى بعد المستندات التى ليس لديك صلاحية اليها', 'search_time' => 'الوقت المتبقي: [time] sec.', 'seconds' => 'ثواني', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'اختيار', 'select_attrdefgrp_show' => 'حدد معرف سمة المجموعة', 'select_attribute_value' => 'اختيار سمة الرقم', @@ -1191,6 +1199,12 @@ URL: [url]', 'settings_allowReviewerOnly' => 'السماح بالمراجع فقط', 'settings_allowReviewerOnly_desc' => 'السماح بالمراجع فقط', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'المصادقة', 'settings_autoLoginUser' => 'تسجيل الدخول التلقائي', 'settings_autoLoginUser_desc' => 'تسجيل الدخول التلقائي', @@ -1571,6 +1585,7 @@ URL: [url]', 'splash_add_group' => 'اضافة مجموعة', 'splash_add_group_member' => 'اضافة مستخدم الى المجموعة', 'splash_add_role' => 'اضافة دور', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'اضافة إلى الإحالة', 'splash_add_transmittal' => 'إضافة إحالة', 'splash_add_user' => 'اضافة مستخدم', @@ -1867,6 +1882,7 @@ URL: [url]', 'workflow_state_in_use' => 'هذه الحالة مستخدمة من قبل مسار عمل', 'workflow_state_name' => 'اسم', 'workflow_summary' => 'ملخص مسار العمل', +'workflow_title' => '', 'workflow_transition_without_user_group' => 'تحويل سير العمل بدون استخدام مستخدم من المجموعة', 'workflow_user_summary' => 'ملخص المستخدم', 'wrong_filetype' => '', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index e4a1e4e77..b7b5d71f6 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/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 (862) +// Translators: Admin (863) $text = array( '2_factor_auth' => '', @@ -265,6 +265,7 @@ $text = array( 'confirm_rm_folder_files' => 'Изтрий всички файлове в папка "[foldername]" и нейните подпапки?
Действието е перманентно', 'confirm_rm_group' => 'Изтрий група "[groupname]"?
Действието е перманентно', 'confirm_rm_log' => 'Изтрий лог "[logname]"?
Действието е перманентно', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => '', 'confirm_rm_user' => 'Изтрий потребител "[username]"?
Действието е перманентно', @@ -289,6 +290,7 @@ $text = array( 'current_version' => 'Текуща версия', 'daily' => 'Ежедневно', 'databasesearch' => 'Търсене по БД', +'database_schema_version' => '', 'date' => 'Дата', 'days' => 'дни', 'debug' => '', @@ -586,6 +588,7 @@ $text = array( 'inherits_access_copy_msg' => 'Изкопирай наследения список', 'inherits_access_empty_msg' => 'Започни с празен списък за достъп', 'inherits_access_msg' => 'достъпът наследен.', +'installed_php_extensions' => '', 'internal_error' => 'Вътрешна грешка', 'internal_error_exit' => 'Вътрешна грешка. Невозможно е да се изпълни запитването.', 'invalid_access_mode' => 'Неправилно ниво на достъп', @@ -701,6 +704,7 @@ $text = array( 'missing_checksum' => 'липсва контролна сума', 'missing_file' => '', 'missing_filesize' => 'липсва размер на файла', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => 'липсва потребител или група за преход', @@ -822,10 +826,11 @@ $text = array( 'pending_revision' => '', 'pending_workflows' => '', 'personal_default_keywords' => 'Личен списък с ключови думи', +'php_info' => '', 'pl_PL' => 'Полски', 'possible_substitutes' => '', 'preset_expires' => '', -'preview' => '', +'preview' => 'Преглед', 'preview_converters' => '', 'preview_images' => '', 'preview_markdown' => '', @@ -954,6 +959,7 @@ $text = array( 'rm_from_clipboard' => 'Премахни от clipboard буфера', 'rm_group' => 'Премахни тази група', 'rm_role' => '', +'rm_task' => '', 'rm_transmittal' => '', 'rm_transmittalitem' => '', 'rm_user' => 'Премахни тоз потребител', @@ -1001,6 +1007,8 @@ $text = array( 'search_results_access_filtered' => 'Резултатите от търсенето могат да съдържат объекти за които нямате достъп', 'search_time' => 'Изминаха: [time] sec.', 'seconds' => 'секунди', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Избор', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1054,6 +1062,12 @@ $text = array( 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Настройки на автентификацията', 'settings_autoLoginUser' => '', 'settings_autoLoginUser_desc' => '', @@ -1434,6 +1448,7 @@ $text = array( 'splash_add_group' => '', 'splash_add_group_member' => '', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => '', @@ -1716,6 +1731,7 @@ $text = array( 'workflow_state_in_use' => 'Този статус текущо се използва от процесите.', 'workflow_state_name' => 'Име', 'workflow_summary' => 'Резюме за процес', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Резюме за потребител', 'wrong_filetype' => '', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index ce2b69397..65d47fd62 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -270,6 +270,7 @@ URL: [url]', 'confirm_rm_folder_files' => '¿Vol realment eliminar tots els fitxers de la carpeta "[foldername]" i de les seves subcarpetes?
Atenció: aquesta acció no es pot desfer.', 'confirm_rm_group' => '¿Vol realment eliminar el grup "[groupname]"?
atenció: aquesta acció no es pot desfer.', 'confirm_rm_log' => '¿Vol realment eliminar el fitxer de registre "[logname]"?
Atenció: aquesta acció no es pot desfer.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => '', 'confirm_rm_user' => '¿Vol realment eliminar l\'usuari "[username]"?
Atenció: aquesta acció no es pot desfer.', @@ -294,6 +295,7 @@ URL: [url]', 'current_version' => 'Versió actual', 'daily' => 'Daily', 'databasesearch' => 'Database search', +'database_schema_version' => '', 'date' => 'Data', 'days' => '', 'debug' => '', @@ -591,6 +593,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copiar llista d\'accés heretat', 'inherits_access_empty_msg' => 'Començar amb una llista d\'accés buida', 'inherits_access_msg' => 'Accés heretat', +'installed_php_extensions' => '', 'internal_error' => 'Error intern', 'internal_error_exit' => 'Error intern. No és possible acabar la sol.licitud.', 'invalid_access_mode' => 'No és valid el mode d\'accés', @@ -706,6 +709,7 @@ URL: [url]', 'missing_checksum' => '', 'missing_file' => '', 'missing_filesize' => '', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => '', @@ -827,6 +831,7 @@ URL: [url]', 'pending_revision' => '', 'pending_workflows' => '', 'personal_default_keywords' => 'Mots clau personals', +'php_info' => '', 'pl_PL' => 'Polonès', 'possible_substitutes' => '', 'preset_expires' => '', @@ -959,6 +964,7 @@ URL: [url]', 'rm_from_clipboard' => '', 'rm_group' => 'Eliminar aquest grup', 'rm_role' => '', +'rm_task' => '', 'rm_transmittal' => '', 'rm_transmittalitem' => '', 'rm_user' => 'Eliminar aquest usuari', @@ -1006,6 +1012,8 @@ URL: [url]', 'search_results_access_filtered' => 'Els resultats de la cerca podrien incloure continguts amb l\'accés denegat.', 'search_time' => 'Temps transcorregut: [time] seg.', 'seconds' => '', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Selecció', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1059,6 +1067,12 @@ URL: [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => '', 'settings_autoLoginUser' => '', 'settings_autoLoginUser_desc' => '', @@ -1439,6 +1453,7 @@ URL: [url]', 'splash_add_group' => '', 'splash_add_group_member' => '', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => '', @@ -1721,6 +1736,7 @@ URL: [url]', 'workflow_state_in_use' => '', 'workflow_state_name' => '', 'workflow_summary' => '', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '', 'wrong_filetype' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index 227d5e421..fd2297ca6 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Opravdu chcete odstranit všechny soubory z podsložky "[foldername]" ?
Buďte opatrní: Tuto akci nelze vrátit zpět.', 'confirm_rm_group' => 'Opravdu chcete odstranit skupinu "[groupname]"?
Pozor: Akce je nevratná.', 'confirm_rm_log' => 'Opravdu chcete odstranit LOG soubor "[logname]"?
Pozor: Akci nelze vrátit zpět.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'Potvrďte prosím smazání přenosu.', 'confirm_rm_transmittalitem' => 'Potvrďte odstranění', 'confirm_rm_user' => 'Opravdu chcete odstranit uživatele "[username]"?
Pozor: Akce je nevratná.', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Aktuální verze', 'daily' => 'Denně', 'databasesearch' => 'Vyhledání v databázi', +'database_schema_version' => '', 'date' => 'Datum', 'days' => 'dny', 'debug' => 'odstranění chyb kódu', @@ -688,6 +690,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Zkopírovat zděděný seznam řízení přístupu', 'inherits_access_empty_msg' => 'Založit nový seznam řízení přístupu', 'inherits_access_msg' => 'Přístup se dědí.', +'installed_php_extensions' => '', 'internal_error' => 'Vnitřní chyba', 'internal_error_exit' => 'Vnitřní chyba. Nebylo možné dokončit požadavek. Ukončuje se.', 'invalid_access_mode' => 'Neplatný režim přístupu', @@ -803,6 +806,7 @@ URL: [url]', 'missing_checksum' => 'Chybějící kontrolní součet', 'missing_file' => 'Chybějící soubor', 'missing_filesize' => 'Chybějící velikost souboru', +'missing_php_extensions' => '', 'missing_reception' => 'Chybějící recepce', 'missing_request_object' => 'Chybějící požadovaný objekt', 'missing_transition_user_group' => 'Chybějící uživatel / skupina pro transformaci', @@ -958,6 +962,7 @@ Pokud budete mít problém s přihlášením i po změně hesla, kontaktujte Adm 'pending_revision' => 'Probíhá revize', 'pending_workflows' => 'Čekající workflows', 'personal_default_keywords' => 'Osobní klíčová slova', +'php_info' => '', 'pl_PL' => 'Polština', 'possible_substitutes' => 'zástupci', 'preset_expires' => 'Přednastavená expirace', @@ -1151,6 +1156,7 @@ URL: [url]', 'rm_from_clipboard' => 'Odstranit ze schránky', 'rm_group' => 'Odstranit tuto skupinu', 'rm_role' => 'Odstranit tuto roli', +'rm_task' => '', 'rm_transmittal' => 'Odstranit přenos', 'rm_transmittalitem' => 'Odstranit položku přenosu', 'rm_user' => 'Odstranit tohoto uživatele', @@ -1205,6 +1211,8 @@ URL: [url]', 'search_results_access_filtered' => 'Výsledky hledání můžou obsahovat obsah, ke kterému byl zamítnut přístup.', 'search_time' => 'Uplynulý čas: [time] sek', 'seconds' => 'sekundy', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Výběr', 'select_attrdefgrp_show' => 'Vybrat, kdy chcete zobrazit', 'select_attribute_value' => 'Vybrat hodnotu atributu', @@ -1263,6 +1271,12 @@ Jméno: [username] 'settings_allowReviewerOnly' => 'Nastavit pouze recenzenta', 'settings_allowReviewerOnly_desc' => 'Aktivujte, pokud má být nastaven pouze recenzent, ale žádný schvalovatel v tradičním režimu workflow.', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Nastavení autentizace', 'settings_autoLoginUser' => 'Automatické přihlášení', 'settings_autoLoginUser_desc' => 'Toto uživatelské ID použijte pro přístup, pokud uživatel ještě není přihlášen. Takový přístup nebude vytvářet relaci.', @@ -1643,6 +1657,7 @@ Jméno: [username] 'splash_add_group' => 'Přidána nová skupina', 'splash_add_group_member' => 'Přidán nový člen skupiny', 'splash_add_role' => 'Přidána nová role', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'Přidáno k přenosu', 'splash_add_transmittal' => 'Přidán přenos', 'splash_add_user' => 'Přidán nový uživatel', @@ -1939,6 +1954,7 @@ URL: [url]', 'workflow_state_in_use' => 'Tento stav je použit ve workflow.', 'workflow_state_name' => 'Název stavu pracovního postupu', 'workflow_summary' => 'Souhrn workflow', +'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_filetype' => '', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 5d3176663..d54895217 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 (2773), dgrutsch (22) +// Translators: Admin (2788), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Möchten Sie wirklich alle Dateien und Unterordner des Ordner "[foldername]" löschen?
Vorsicht: Diese Operation kann nicht rückgängig gemacht werden.', 'confirm_rm_group' => 'Möchten Sie wirklich die Gruppe "[groupname]" löschen?
Beachten Sie, dass diese Operation nicht rückgängig gemacht werden kann.', 'confirm_rm_log' => 'Möchten Sie wirklich die Log-Datei "[logname]" löschen?
Beachten Sie, dass diese Operation nicht rückgängig gemacht werden kann.', +'confirm_rm_task' => 'Bitte bestätigen Sie die Löschung dieser Task.', 'confirm_rm_transmittal' => 'Bitte bestätigen Sie das Löschen der Dokumentenliste.', 'confirm_rm_transmittalitem' => 'Löschen bestätigen', 'confirm_rm_user' => 'Möchten Sie wirklich den Benutzer "[username]" löschen?
Beachten Sie, dass diese Operation nicht rückgängig gemacht werden kann.', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Aktuelle Version', 'daily' => 'täglich', 'databasesearch' => 'Datenbanksuche', +'database_schema_version' => 'Version des Datenbankschemas', 'date' => 'Datum', 'days' => 'Tage', 'debug' => 'Debug', @@ -688,6 +690,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Berechtigungen kopieren', 'inherits_access_empty_msg' => 'Leere Zugriffsliste', 'inherits_access_msg' => 'Zur Zeit werden die Rechte geerbt', +'installed_php_extensions' => 'Installierte PHP-Erweiterungen', 'internal_error' => 'Interner Fehler', 'internal_error_exit' => 'Interner Fehler: Anfrage kann nicht ausgeführt werden.', 'invalid_access_mode' => 'Unzulässige Zugangsart', @@ -803,6 +806,7 @@ URL: [url]', 'missing_checksum' => 'Fehlende Check-Summe', 'missing_file' => 'Datei fehlt', 'missing_filesize' => 'Fehlende Dateigröße', +'missing_php_extensions' => 'Fehlende PHP-Erweiterungen', 'missing_reception' => 'Fehlende Empfangsbestätigung', 'missing_request_object' => 'Fehlendes Zugriffsobjekte', 'missing_transition_user_group' => 'Fehlende/r Benutzer/Gruppe für Transition', @@ -961,6 +965,7 @@ Sollen Sie danach immer noch Probleme bei der Anmeldung haben, dann kontaktieren 'pending_revision' => 'Ausstehende Wiederholungsprüfungen', 'pending_workflows' => 'Ausstehende Workflows', 'personal_default_keywords' => 'Persönliche Stichwortlisten', +'php_info' => 'Informationen über PHP', 'pl_PL' => 'Polnisch', 'possible_substitutes' => 'Vertreter', 'preset_expires' => 'Fester Ablaufzeitpunkt', @@ -1162,6 +1167,7 @@ URL: [url]', 'rm_from_clipboard' => 'Aus Zwischenablage löschen', 'rm_group' => 'Diese Gruppe löschen', 'rm_role' => 'Diese Rolle löschen', +'rm_task' => 'Task löschen', 'rm_transmittal' => 'Dokumentenliste entfernen', 'rm_transmittalitem' => 'Eintrag löschen', 'rm_user' => 'Benutzer löschen', @@ -1216,6 +1222,8 @@ URL: [url]', 'search_results_access_filtered' => 'Suchresultate können Inhalte enthalten, zu welchen der Zugang verweigert wurde.', 'search_time' => 'Dauer: [time] sek.', 'seconds' => 'Sekunden', +'seeddms_info' => 'Informationen über SeedDMS', +'seeddms_version' => 'SeedDMS Version', 'selection' => 'Auswahl', 'select_attrdefgrp_show' => 'Anzeigeort auswählen', 'select_attribute_value' => 'Attributwert auswählen', @@ -1274,6 +1282,12 @@ Name: [username] 'settings_allowReviewerOnly' => 'Erlaube nur Prüfer zu setzen', 'settings_allowReviewerOnly_desc' => 'Anwählen, um zu erlauben, dass nur ein Prüfer aber kein Freigeber beim traditionellen Workflow gesetzt werden darf.', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => 'Authentifizierungsschḻüssel für REST API', +'settings_apiKey_desc' => 'Dieser Schlüssel wird zur alternative Authentifizierung in der REST API verwendet. Wählen Sie eine 32 Zeichen lange Zeichenkette.', +'settings_apiOrigin' => 'Erlaubte Herkunft der API Aufrufe', +'settings_apiOrigin_desc' => 'Ein semicolonseparierte Liste von Adressen, denen ein Zugriff auf die REST API erlaubt ist. Jede Adresse muss in der Form ://[:] angegeben werden. Der Port kann ausgelassen werden. Bleibt dieses Feld leer, dann ist der Zugriff uneingeschränkt.', +'settings_apiUserId' => 'Benutzer für die REST API', +'settings_apiUserId_desc' => 'Dieser Benutzer wird für Zugriffe über die REST API genutzt, sofern eine Authentifizierung über den konifigurierten API Schlüssel erfolgt.', 'settings_Authentication' => 'Authentifikations-Einstellungen', 'settings_autoLoginUser' => 'Automatisches Login', 'settings_autoLoginUser_desc' => 'Verwende den Benutzer mit der angegebenen Id, sofern man nicht bereits angemeldet ist. Solch ein Zugriff erzeugt keine eigene Sitzung.', @@ -1654,6 +1668,7 @@ Name: [username] 'splash_add_group' => 'Neue Gruppe hinzugefügt', 'splash_add_group_member' => 'Neues Gruppenmitglied hinzugefügt', 'splash_add_role' => 'Neue Rolle hinzugefügt', +'splash_add_task' => 'Neuer Task hinzugefügt', 'splash_add_to_transmittal' => 'Zur Dokumentenliste hinzugefügt', 'splash_add_transmittal' => 'Dokumentenliste angelegt', 'splash_add_user' => 'Neuen Benutzer hinzugefügt', @@ -1950,6 +1965,7 @@ URL: [url]', 'workflow_state_in_use' => 'Dieser Status wird zur Zeit von einem Workflow verwendet.', 'workflow_state_name' => 'Name', 'workflow_summary' => 'Übersicht Workflows', +'workflow_title' => '', 'workflow_transition_without_user_group' => 'Mindestens eine Transition hat weder einen Benutzer noch eine Gruppe zugewiesen!', 'workflow_user_summary' => 'Übersicht Benutzer', 'wrong_filetype' => 'Falscher Dateityp', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index e871c9304..4039b0642 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -265,6 +265,7 @@ $text = array( 'confirm_rm_folder_files' => '', 'confirm_rm_group' => '', 'confirm_rm_log' => '', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => '', 'confirm_rm_user' => '', @@ -289,6 +290,7 @@ $text = array( 'current_version' => '', 'daily' => '', 'databasesearch' => '', +'database_schema_version' => '', 'date' => 'Ημερομηνία', 'days' => 'μέρες', 'debug' => '', @@ -586,6 +588,7 @@ $text = array( 'inherits_access_copy_msg' => '', 'inherits_access_empty_msg' => '', 'inherits_access_msg' => '', +'installed_php_extensions' => '', 'internal_error' => 'Εσωτερικό λάθος', 'internal_error_exit' => '', 'invalid_access_mode' => '', @@ -701,6 +704,7 @@ $text = array( 'missing_checksum' => '', 'missing_file' => '', 'missing_filesize' => '', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => '', @@ -833,6 +837,7 @@ URL: [url]', 'pending_revision' => '', 'pending_workflows' => '', 'personal_default_keywords' => '', +'php_info' => '', 'pl_PL' => 'Πολωνικά', 'possible_substitutes' => '', 'preset_expires' => 'Λήξη προκαθορισμένης τιμής', @@ -965,6 +970,7 @@ URL: [url]', 'rm_from_clipboard' => '', 'rm_group' => '', 'rm_role' => '', +'rm_task' => '', 'rm_transmittal' => '', 'rm_transmittalitem' => '', 'rm_user' => 'Διαγραφή Χρήστη', @@ -1012,6 +1018,8 @@ URL: [url]', 'search_results_access_filtered' => '', 'search_time' => '', 'seconds' => 'δεύτερα', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Επιλογή', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1065,6 +1073,12 @@ URL: [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => '', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => '', 'settings_autoLoginUser' => '', 'settings_autoLoginUser_desc' => '', @@ -1445,6 +1459,7 @@ URL: [url]', 'splash_add_group' => '', 'splash_add_group_member' => '', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => '', @@ -1727,6 +1742,7 @@ URL: [url]', 'workflow_state_in_use' => '', 'workflow_state_name' => 'Όνομα', 'workflow_summary' => '', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '', 'wrong_filetype' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 6959e89f1..4a0c8a762 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 (1879), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1895), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Do you really want to remove all the files of the folder "[foldername]" and of its subfolders?
Be careful: This action cannot be undone.', 'confirm_rm_group' => 'Do you really want to remove the group "[groupname]"?
Be careful: This action cannot be undone.', 'confirm_rm_log' => 'Do you really want to remove log file "[logname]"?
Be careful: This action cannot be undone.', +'confirm_rm_task' => 'Please confirm the removal of this task.', 'confirm_rm_transmittal' => 'Please confirm the deletion of the transmittal.', 'confirm_rm_transmittalitem' => 'Confirm removal', 'confirm_rm_user' => 'Do you really want to remove the user "[username]"?
Be careful: This action cannot be undone.', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Current version', 'daily' => 'Daily', 'databasesearch' => 'Database search', +'database_schema_version' => 'Version of database scheman', 'date' => 'Date', 'days' => 'days', 'debug' => 'Debug', @@ -688,6 +690,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copy inherited access list', 'inherits_access_empty_msg' => 'Start with empty access list', 'inherits_access_msg' => 'Access is being inherited.', +'installed_php_extensions' => 'Installed php extensions', 'internal_error' => 'Internal error', 'internal_error_exit' => 'Internal error. Unable to complete request.', 'invalid_access_mode' => 'Invalid Access Mode', @@ -803,6 +806,7 @@ URL: [url]', 'missing_checksum' => 'Missing checksum', 'missing_file' => 'Missing file', 'missing_filesize' => 'Missing filesize', +'missing_php_extensions' => 'Missing php extensions', 'missing_reception' => 'Missing reception', 'missing_request_object' => 'Missing request object', 'missing_transition_user_group' => 'Missing user/group for transition', @@ -962,6 +966,7 @@ If you have still problems to login, then please contact your administrator.', 'pending_revision' => 'Pending revisions', 'pending_workflows' => 'Pending workflows', 'personal_default_keywords' => 'Personal keywordlists', +'php_info' => 'Information about PHP', 'pl_PL' => 'Polish', 'possible_substitutes' => 'Substitutes', 'preset_expires' => 'Preset expiration', @@ -1156,6 +1161,7 @@ URL: [url]', 'rm_from_clipboard' => 'Remove from clipboard', 'rm_group' => 'Remove this group', 'rm_role' => 'Delete this role', +'rm_task' => 'Remove task', 'rm_transmittal' => 'Remove transmittal', 'rm_transmittalitem' => 'Remove item', 'rm_user' => 'Remove user', @@ -1210,6 +1216,8 @@ URL: [url]', 'search_results_access_filtered' => 'Search results may contain content to which access has been denied.', 'search_time' => 'Elapsed time: [time] sec.', 'seconds' => 'seconds', +'seeddms_info' => 'Information about SeedDMS', +'seeddms_version' => 'Version of SeedDMS', 'selection' => 'Selection', 'select_attrdefgrp_show' => 'Choose when to show', 'select_attribute_value' => 'Select attribute value', @@ -1268,6 +1276,12 @@ Name: [username] 'settings_allowReviewerOnly' => 'Allow to set reviewer only', 'settings_allowReviewerOnly_desc' => 'Enable this, if it shall be allow to set just a reviewer but no approver in traditional workflow mode.', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => 'Authentification key for rest api', +'settings_apiKey_desc' => 'This key is used a alternative authentication for the rest api. Choose a 32 char long string.', +'settings_apiOrigin' => 'Allowed origin of api calls', +'settings_apiOrigin_desc' => 'A list of addresses separated by semicolon. Each address has the form ://[:]. The port can be omitted. If this field is left empty, no restrictions will apply.', +'settings_apiUserId' => 'User for rest api', +'settings_apiUserId_desc' => 'This user will be used by the rest api, if authentication was done with the configured api key.', 'settings_Authentication' => 'Authentication settings', 'settings_autoLoginUser' => 'Automatic login', 'settings_autoLoginUser_desc' => 'Use this user id for accesses if the user is not already logged in. Such an access will not create a session.', @@ -1648,6 +1662,7 @@ Name: [username] 'splash_add_group' => 'New group added', 'splash_add_group_member' => 'New group member added', 'splash_add_role' => 'Added new role', +'splash_add_task' => 'Added new task', 'splash_add_to_transmittal' => 'Add to transmittal', 'splash_add_transmittal' => 'Added transmittal', 'splash_add_user' => 'New user added', @@ -1914,7 +1929,7 @@ URL: [url]', 'warning' => 'Warning', 'webauthn_auth' => 'WebAuthn Authentification', 'webauthn_crossplatform_info' => 'Use cross-platform \'Yes\' when you have a removable device, like a Yubico key, which you would want to use to login on different computers; say \'No\' when your device is attached to the computer. The choice affects which device(s) are offered by the browser and/or computer security system.', -'webauthn_info' => 'WebAuthn is a password less authentification usind public key cryptography. A private-public keypair (known as a credential) is created for a website. The private key is stored securely on the user’s device; a public key and randomly generated credential ID is sent to the server for storage. The server can then use that public key to prove the user’s identity. The private key is usually stored on a hardware token. The token must be registered before it can be used for authentication.', +'webauthn_info' => 'WebAuthn is a password less authentification using public key cryptography. A private-public keypair (known as a credential) is created for a website. The private key is stored securely on the user’s device; a public key and randomly generated credential ID is sent to the server for storage. The server can then use that public key to prove the user’s identity. The private key is usually stored on a hardware token. The token must be registered before it can be used for authentication.', 'webauth_crossplatform' => 'Crossplatform', 'wednesday' => 'Wednesday', 'wednesday_abbr' => 'We', @@ -1944,6 +1959,7 @@ URL: [url]', 'workflow_state_in_use' => 'This state is currently used by workflows.', 'workflow_state_name' => 'Name', 'workflow_summary' => 'Workflow summary', +'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_filetype' => 'Wrong file type', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 0a5e3ef2f..679d87f7f 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 (1171), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1172), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -289,6 +289,7 @@ URL: [url]', 'confirm_rm_folder_files' => '¿Desea realmente eliminar todos los ficheros de la carpeta "[foldername]" y de sus subcarpetas?
Atención: Esta acción no se puede deshacer.', 'confirm_rm_group' => '¿Desea realmente eliminar el grupo "[groupname]"?
Atención: Esta acción no se puede deshacer.', 'confirm_rm_log' => '¿Desea realmente eliminar el fichero de registro "[logname]"?
Atención: Esta acción no se puede deshacer.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => '', 'confirm_rm_user' => '¿Desea realmente eliminar el usuario "[username]"?
Atención: Esta acción no se puede deshacer.', @@ -313,6 +314,7 @@ URL: [url]', 'current_version' => 'Versión actual', 'daily' => 'Diaria', 'databasesearch' => 'Búsqueda en base de datos', +'database_schema_version' => '', 'date' => 'Fecha', 'days' => 'días', 'debug' => 'Depuración', @@ -644,7 +646,7 @@ URL: [url]', 'import_extension' => '', 'import_fs' => 'Importar desde sistema de archivos', 'import_fs_warning' => 'Esto funciona únicamente con carpetas dentro de la carpeta destino. La operación importa recursivamente todos los archivos y carpetas. Los archivos serán liberados inmediatamente.', -'import_users' => '', +'import_users' => 'Importar usuarios', 'import_users_update' => '', 'include_content' => '', 'include_documents' => 'Incluir documentos', @@ -664,6 +666,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copiar lista de acceso heredado', 'inherits_access_empty_msg' => 'Empezar con una lista de acceso vacía', 'inherits_access_msg' => 'Acceso heredado.', +'installed_php_extensions' => '', 'internal_error' => 'Error interno', 'internal_error_exit' => 'Error interno. No es posible terminar la solicitud.', 'invalid_access_mode' => 'Modo de acceso no válido', @@ -779,6 +782,7 @@ URL: [url]', 'missing_checksum' => 'Falta checksum', 'missing_file' => '', 'missing_filesize' => 'Falta tamaño fichero', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => 'Falta usuario/grupo para transición', @@ -938,6 +942,7 @@ Si continua teniendo problemas de acceso, por favor contacte con el administrado 'pending_revision' => '', 'pending_workflows' => '', 'personal_default_keywords' => 'Listas de palabras clave personales', +'php_info' => '', 'pl_PL' => 'Polaco', 'possible_substitutes' => '', 'preset_expires' => 'Establece caducidad', @@ -1099,6 +1104,7 @@ URL: [url]', 'rm_from_clipboard' => 'Borrar del portapapeles', 'rm_group' => 'Eliminar este grupo', 'rm_role' => '', +'rm_task' => '', 'rm_transmittal' => '', 'rm_transmittalitem' => 'Eliminar elemento', 'rm_user' => 'Eliminar este usuario', @@ -1153,6 +1159,8 @@ URL: [url]', 'search_results_access_filtered' => 'Los resultados de la búsqueda podrían incluir contenidos cuyo acceso ha sido denegado.', 'search_time' => 'Tiempo transcurrido: [time] seg.', 'seconds' => 'segundos', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Selección', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1206,6 +1214,12 @@ URL: [url]', 'settings_allowReviewerOnly' => 'Permitir habilitar la función de Revisor para un usuario', 'settings_allowReviewerOnly_desc' => 'Habilite esto si se requiere permitir que un usuario sea lector o revisor sin capacidad de aprobar un documento en un proceso de workflow tradicional', 'settings_apache_mod_rewrite' => 'Apache - Módulo Reescritura', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Configuración de autenticación', 'settings_autoLoginUser' => 'Acceso automatico', 'settings_autoLoginUser_desc' => 'Utilice esta clave de usuario para accesos si el usuario no ha ingresado al sistema todavía. Este tipo de acceso no creará una sesión.', @@ -1586,6 +1600,7 @@ URL: [url]', 'splash_add_group' => 'Nuevo grupo agregado', 'splash_add_group_member' => 'Nuevo miembro del grupo agregado', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => 'Nuevo usuario agregado', @@ -1882,6 +1897,7 @@ URL: [url]', 'workflow_state_in_use' => 'Este estado está siendo usado por flujos de trabajo.', 'workflow_state_name' => 'Nombre', 'workflow_summary' => 'Resumen Flujo de Trabajo', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Resumen Usuario', 'wrong_filetype' => '', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index d0b3093f7..5fa9792ca 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Voulez-vous vraiment supprimer tous les fichiers du dossier « [foldername] » et ses sous-dossiers ?
Attention : Cette action est irréversible.', 'confirm_rm_group' => 'Voulez-vous vraiment supprimer le groupe « [groupname] » ?
Attention : Cette action est irréversible.', 'confirm_rm_log' => 'Voulez-vous vraiment supprimer le fichier journal « [logname] » ?
Attention : Cette action est irréversible.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'Veuillez confirmer la suppression de la transmission.', 'confirm_rm_transmittalitem' => 'Confirmer la suppression', 'confirm_rm_user' => 'Voulez-vous vraiment supprimer l’utilisateur « [username] » ?
Attention : Cette action est irréversible.', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Version actuelle', 'daily' => 'Journalier', 'databasesearch' => 'Recherche dans la base de données', +'database_schema_version' => '', 'date' => 'Date', 'days' => 'jours', 'debug' => 'Débogage', @@ -688,6 +690,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Recopier la liste des accès hérités', 'inherits_access_empty_msg' => 'Commencer avec une liste d\'accès vide', 'inherits_access_msg' => 'L\'accès est hérité.', +'installed_php_extensions' => '', 'internal_error' => 'Erreur interne', 'internal_error_exit' => 'Erreur interne. Impossible d\'achever la demande.', 'invalid_access_mode' => 'Droits d\'accès invalides', @@ -803,6 +806,7 @@ URL: [url]', 'missing_checksum' => 'Checksum manquante', 'missing_file' => 'Fichier manquant', 'missing_filesize' => 'Taille de fichier manquante', +'missing_php_extensions' => '', 'missing_reception' => 'Réception manquante', 'missing_request_object' => '', 'missing_transition_user_group' => 'Utilisateur/groupe manquant pour transition', @@ -960,6 +964,7 @@ En cas de problème persistant, veuillez contacter votre administrateur.', 'pending_revision' => 'Révisions en attente', 'pending_workflows' => 'Workflows en attente', 'personal_default_keywords' => 'Mots-clés personnels', +'php_info' => '', 'pl_PL' => 'Polonais', 'possible_substitutes' => 'Substituts', 'preset_expires' => 'Expiration prédéfinie', @@ -1154,6 +1159,7 @@ URL : [url]', 'rm_from_clipboard' => 'Supprimer du presse-papier', 'rm_group' => 'Supprimer ce groupe', 'rm_role' => 'Supprimer ce rôle', +'rm_task' => '', 'rm_transmittal' => 'Supprimer la transmission', 'rm_transmittalitem' => 'Supprimer l’élément', 'rm_user' => 'Supprimer cet utilisateur', @@ -1208,6 +1214,8 @@ URL : [url]', 'search_results_access_filtered' => 'L\'accès à certains résultats de la recherche pourrait être refusé.', 'search_time' => 'Temps écoulé: [time] sec.', 'seconds' => 'secondes', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Sélection', 'select_attrdefgrp_show' => 'Choisir quand afficher', 'select_attribute_value' => 'Sélectionnez la valeur de l’attribut', @@ -1266,6 +1274,12 @@ Nom : [username] 'settings_allowReviewerOnly' => 'Permettre d’affecter l’examinateur uniquement', 'settings_allowReviewerOnly_desc' => 'Activer cette option pour permettre d’affecter un examinateur mais pas d’approbateur dans le mode de Workflow traditionnel.', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Paramètres d\'authentification', 'settings_autoLoginUser' => 'Connexion automatique', 'settings_autoLoginUser_desc' => 'Utiliser l’ID de cet utilisateur pour se connecter automatiquement. Ce type d’accès ne permet pas la création de nouveaux comptes.', @@ -1646,6 +1660,7 @@ Nom : [username] 'splash_add_group' => 'Nouveau groupe ajouté', 'splash_add_group_member' => 'Nouveau membre ajouté au groupe', 'splash_add_role' => 'Nouveau rôle ajouté', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'Ajouter à la transmission', 'splash_add_transmittal' => 'Ajouté à la transmission', 'splash_add_user' => 'Nouvel utilisateur ajouté', @@ -1942,6 +1957,7 @@ URL: [url]', 'workflow_state_in_use' => 'Cet état est actuellement utilisé par des workflows.', 'workflow_state_name' => 'Nom', 'workflow_summary' => 'Récapitulatif workflow', +'workflow_title' => '', 'workflow_transition_without_user_group' => 'Au moins une transition a ni utilisateur, ni groupe !', 'workflow_user_summary' => 'Récapitulatif utilisateur', 'wrong_filetype' => 'Mauvais type de fichier', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 57a151fbd..6e210cf54 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -294,6 +294,7 @@ Internet poveznica: [url]', 'confirm_rm_folder_files' => 'Da li zaista želite ukloniti sve datoteke u mapi "[foldername]" i sve podmape?
Oprez: ova radnja nije povratna.', 'confirm_rm_group' => 'Da li zaista želite ukloniti grupu "[groupname]"?
Oprez: ova radnja nije povratna.', 'confirm_rm_log' => 'Da li zaista želite ukloniti log datoteku "[logname]"?
Oprez: ova radnja nije povratna.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => 'Potvrdi uklanjanje', 'confirm_rm_user' => 'Da li zaista želite ukloniti korisnika "[username]"?
Oprez: ova radnja nije povratna.', @@ -318,6 +319,7 @@ Internet poveznica: [url]', 'current_version' => 'Trenutna verzija', 'daily' => 'Dnevno', 'databasesearch' => 'Pretraživanje baze podataka', +'database_schema_version' => '', 'date' => 'Datum', 'days' => 'dani', 'debug' => 'Ispravljanje', @@ -669,6 +671,7 @@ Internet poveznica: [url]', 'inherits_access_copy_msg' => 'Kopiraj listu naslijeđenih prava pristupa', 'inherits_access_empty_msg' => 'Započnite s praznim popisom pristupa', 'inherits_access_msg' => 'Prava pristupa se naslijeđuju.', +'installed_php_extensions' => '', 'internal_error' => 'Interna greška', 'internal_error_exit' => 'Interna greška. Ne mogu završiti zahtjev.', 'invalid_access_mode' => 'Pogrešan način pristupa', @@ -784,6 +787,7 @@ Internet poveznica: [url]', 'missing_checksum' => 'Nedostaje kontrolna suma', 'missing_file' => '', 'missing_filesize' => 'Nedostaje veličina datoteke', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => 'Nedostaje korisnik/grupa za promjenu', @@ -942,6 +946,7 @@ Ako i dalje imate problema s prijavom, molimo kontaktirajte Vašeg administrator 'pending_revision' => '', 'pending_workflows' => '', 'personal_default_keywords' => 'Osobni popis ključnih riječi', +'php_info' => '', 'pl_PL' => 'Poljski', 'possible_substitutes' => 'Zamjene', 'preset_expires' => 'Ističe', @@ -1120,6 +1125,7 @@ Internet poveznica: [url]', 'rm_from_clipboard' => 'Uklonite iz međuspremnika', 'rm_group' => 'Uklonite ovu grupu', 'rm_role' => '', +'rm_task' => '', 'rm_transmittal' => 'Uklanjanje preusmjerenja', 'rm_transmittalitem' => 'Uklanjanje stavke', 'rm_user' => 'Uklonite ovog korisnika', @@ -1174,6 +1180,8 @@ Internet poveznica: [url]', 'search_results_access_filtered' => 'Rezultati pretrage mogu sadržavati sadržaj kojem je odbijen pristup.', 'search_time' => 'Proteklo vrijeme: [time] sek.', 'seconds' => 'sekunde', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Odabir', 'select_attrdefgrp_show' => '', 'select_attribute_value' => 'Izbari vrednost atributa', @@ -1227,6 +1235,12 @@ Internet poveznica: [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => 'Apache - Modul prepisa', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Postavke autentifikacije', 'settings_autoLoginUser' => 'Automatska prijava', 'settings_autoLoginUser_desc' => 'Koristite ovaj korisnički ID za pristup ukoliko korisnik već nije prijavljen. Takav pristup neće otvoriti sesiju.', @@ -1607,6 +1621,7 @@ Internet poveznica: [url]', 'splash_add_group' => 'Dodana nova grupa', 'splash_add_group_member' => 'Dodan novi član grupe', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => 'Dodan novi korisnik', @@ -1903,6 +1918,7 @@ Internet poveznica: [url]', 'workflow_state_in_use' => 'Tok rada trenutno koristi ovaj status.', 'workflow_state_name' => 'Naziv statusa', 'workflow_summary' => 'Pregled toka rada', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Pregled korisnika', 'wrong_filetype' => '', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 6ed06230c..7d3f29d73 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/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 (639), Kalpy (113), ribaz (1036) +// Translators: Admin (643), Kalpy (113), ribaz (1036) $text = array( '2_factor_auth' => 'Kétfaktoros azonosítás', @@ -289,6 +289,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Biztosan el kívánja távolítani az összes állományt és almappát a "[foldername]" mappából?
Legyen óvatos: Ez a művelet nem vonható vissza.', 'confirm_rm_group' => 'Biztosan el kívánja távolítani ezt a csoportot "[groupname]"?
Legyen óvatos: Ez a művelet nem vonható vissza.', 'confirm_rm_log' => 'Biztosan el kívánja távolítani ezt a napló állományt "[logname]"?
Legyen óvatos: Ez a művelet nem vonható vissza.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => '', 'confirm_rm_user' => 'Biztosan el kívánja távolítani ezt a felhasználót "[username]"?
Legyen óvatos: Ez a művelet nem vonható vissza.', @@ -313,9 +314,10 @@ URL: [url]', 'current_version' => 'Aktuális verzió', 'daily' => 'Napi', 'databasesearch' => 'Adatbázis keresés', +'database_schema_version' => '', 'date' => 'Dátum', 'days' => 'nap', -'debug' => '', +'debug' => 'Hibakeresés', 'december' => 'December', 'default_access' => 'Alapbeállítás szerinti jogosultság', 'default_keywords' => 'Rendelkezésre álló kulcsszavak', @@ -664,6 +666,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Örökített hozzáférési lista másolása', 'inherits_access_empty_msg' => 'Indulás üres hozzáférési listával', 'inherits_access_msg' => 'Jogosultság örökítése folyamatban.', +'installed_php_extensions' => '', 'internal_error' => 'Belső hiba', 'internal_error_exit' => 'Belső hiba. Nem lehet teljesíteni a kérést.', 'invalid_access_mode' => 'Érvénytelen hozzáférési mód', @@ -738,7 +741,7 @@ URL: [url]', 'link_to_version' => '', 'list_access_rights' => 'Összes jogosultság felsorolása...', 'list_contains_no_access_docs' => '', -'list_hooks' => '', +'list_hooks' => 'Hook lista', 'list_tasks' => '', 'local_file' => 'Helyi állomány', 'locked_by' => 'Zárolta', @@ -779,6 +782,7 @@ URL: [url]', 'missing_checksum' => 'Hiányzó ellenőrzőösszeg', 'missing_file' => 'hiányzó állomány', 'missing_filesize' => 'Hiányzó állomány méret', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => 'Hiányzó felhasználó/csoport az átvezetéshez', @@ -938,6 +942,7 @@ Amennyiben problémákba ütközik a bejelentkezés során, kérjük vegye fel a 'pending_revision' => '', 'pending_workflows' => '', 'personal_default_keywords' => 'Személyes kulcsszó lista', +'php_info' => '', 'pl_PL' => 'Lengyel', 'possible_substitutes' => '', 'preset_expires' => 'Érvényesség beállítása', @@ -1099,6 +1104,7 @@ URL: [url]', 'rm_from_clipboard' => 'Eltávolítás a vágólapról', 'rm_group' => 'Csoport eltávolítása', 'rm_role' => '', +'rm_task' => '', 'rm_transmittal' => '', 'rm_transmittalitem' => '', 'rm_user' => 'Felhasználó eltávolítása', @@ -1112,7 +1118,7 @@ URL: [url]', 'role_admin' => 'Adminisztrátor', 'role_guest' => 'Vendég', 'role_info' => 'szerepkör információ', -'role_management' => '', +'role_management' => 'Szerepkörök kezelése', 'role_name' => '', 'role_type' => '', 'role_user' => 'Felhasználó', @@ -1134,7 +1140,7 @@ URL: [url]', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', 'scheduler_class_tasks' => '', -'scheduler_task_mgr' => '', +'scheduler_task_mgr' => 'Ütemező', 'search' => 'Keresés', 'search_fulltext' => 'Keresés a teljes szövegben', 'search_in' => 'Keresés ebben a könyvtárban', @@ -1152,6 +1158,8 @@ URL: [url]', 'search_results_access_filtered' => 'Search results may contain content to which access has been denied.', 'search_time' => 'Felhasznßlt id: [time] mßsodperc.', 'seconds' => 'másodperc', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Selection', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1205,6 +1213,12 @@ URL: [url]', 'settings_allowReviewerOnly' => 'Engedélyezi, hogy csak az ellenört állítsa be', 'settings_allowReviewerOnly_desc' => 'Ha ezt engedélyez, akkor lehetővé válik, hogy a hagyományos munkafolyamat módban csak ellenört állítson be, ne jóváhagyót.', 'settings_apache_mod_rewrite' => 'Apache - Rewrite modul', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Hitelesítési beállítások', 'settings_autoLoginUser' => 'Automatikus bejelentkezés', 'settings_autoLoginUser_desc' => 'Használja ezt a felhasználói azonosítót a hozzáférésekhez, ha a felhasználó még nincs bejelentkezve. Az ilyen hozzáférés nem hoz létre munkamenetet.', @@ -1585,6 +1599,7 @@ URL: [url]', 'splash_add_group' => 'Új csoport hozzáadva', 'splash_add_group_member' => 'Új csoporttag hozzáadva', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => 'Új felhasználó hozzáadva', @@ -1881,6 +1896,7 @@ URL: [url]', 'workflow_state_in_use' => 'Ezt az állapotot munkafolyamatok használják.', 'workflow_state_name' => 'Név', 'workflow_summary' => 'Munkafolyamat áttekintés', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Felhasználó áttekintés', 'wrong_filetype' => '', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index d7cf2078b..125ce2bdc 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 (2021), rickr (144), s.pnt (26) +// Translators: Admin (2022), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Vuoi davvero rimuovere tutti i file dalla cartella "[foldername]" e dalle sue sottocartelle? Attenzione: questa operazione non può essere annullata.', 'confirm_rm_group' => 'Vuoi davvero rimuovere il gruppo "[groupname]"? Attenzione: questa operazione non può essere annullata.', 'confirm_rm_log' => 'Vuoi davvero rimuovere il file di log "[logname]"?
Attenzione: questa operazione non può essere annullata.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'Si prega di confermare l\'eliminazione della trasmissione.', 'confirm_rm_transmittalitem' => 'Conferma rimozione', 'confirm_rm_user' => 'Vuoi davvero rimuovere l\'utente "[username]"? Attenzione: questa operazione non può essere annullata.', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Versione attuale', 'daily' => 'Giornaliero', 'databasesearch' => 'Ricerca nel Database', +'database_schema_version' => '', 'date' => 'Data', 'days' => 'Giorni', 'debug' => 'Localizzare e rimuovere errori da (Debug)', @@ -674,6 +676,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copia la lista degli accessi ereditati', 'inherits_access_empty_msg' => 'Reimposta una lista di permessi vuota', 'inherits_access_msg' => 'È impostato il permesso ereditario.', +'installed_php_extensions' => '', 'internal_error' => 'Errore interno', 'internal_error_exit' => 'Errore interno. Impossibile completare la richiesta.', 'invalid_access_mode' => 'Permessi non validi', @@ -789,6 +792,7 @@ URL: [url]', 'missing_checksum' => 'Checksum mancante', 'missing_file' => 'File mancante', 'missing_filesize' => 'Dimensione mancante', +'missing_php_extensions' => '', 'missing_reception' => 'Ricezione mancante', 'missing_request_object' => 'Manca oggetto di richiesta', 'missing_transition_user_group' => 'Utente/Gruppo per la transizione mancanti', @@ -867,7 +871,7 @@ URL: [url]', 'no_action' => 'Non è richiesto alcun intervento', 'no_approval_needed' => 'Non è richiesta approvazione.', 'no_attached_files' => 'Nessun file allegato', -'no_backup_dir' => '', +'no_backup_dir' => 'Cartella di Backup non configurata', 'no_current_version' => 'La corrente versione di SeedDMS non è aggiornata. La versione più recente disponibile è la [latestversion].', 'no_default_keywords' => 'Nessuna parola-chiave disponibile', 'no_docs_checked_out' => 'Nessun documento approvato', @@ -948,6 +952,7 @@ Dovessero esserci ancora problemi al login, prego contatta l\'amministratore di 'pending_revision' => 'In attesa di riesame', 'pending_workflows' => 'Flussi di lavoro in sospeso', 'personal_default_keywords' => 'Parole-chiave personali', +'php_info' => '', 'pl_PL' => 'Polacco', 'possible_substitutes' => 'Sostituti', 'preset_expires' => 'Scadenza preimpostata', @@ -1142,6 +1147,7 @@ URL: [url]', 'rm_from_clipboard' => 'Rimuovi dalla clipboard', 'rm_group' => 'Rimuovi questo gruppo', 'rm_role' => 'Eliminare questo ruolo', +'rm_task' => '', 'rm_transmittal' => 'Rimuovi trasmissione', 'rm_transmittalitem' => 'Rimuovi oggetto', 'rm_user' => 'Rimuovi questo utente', @@ -1196,6 +1202,8 @@ 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_version' => '', 'selection' => 'Selezione', 'select_attrdefgrp_show' => 'Scegli quando mostrare', 'select_attribute_value' => 'Seleziona il valore dell\'attributo', @@ -1254,6 +1262,12 @@ Name: [username] 'settings_allowReviewerOnly' => 'Abilita l\'impostazione del solo revisore', 'settings_allowReviewerOnly_desc' => 'Abilita se si vuole concedere di impostare solo un revisore ma non un apporvatore nel flusso di lavoro tradizionale', 'settings_apache_mod_rewrite' => 'Apache - Mod Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Impostazioni di Autenticazione', 'settings_autoLoginUser' => 'Login automatico', 'settings_autoLoginUser_desc' => 'Utilizzare questo ID utente per l\'accesso se l\'utente non è già connesso. Questo tipo di accesso non creerà una sessione.', @@ -1634,6 +1648,7 @@ Name: [username] 'splash_add_group' => 'Gruppo aggiunto', 'splash_add_group_member' => 'Membro aggiunto al gruppo', 'splash_add_role' => 'Aggiunto nuovo ruolo', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'Aggiungere alla trasmissione', 'splash_add_transmittal' => 'Aggiungere trasmissione', 'splash_add_user' => 'Utente aggiunto', @@ -1930,6 +1945,7 @@ URL: [url]', 'workflow_state_in_use' => 'Questo stato è attualmente usato da alcuni flussi di lavoro', 'workflow_state_name' => 'Nome', 'workflow_summary' => 'Riepilogo flusso di lavoro', +'workflow_title' => '', 'workflow_transition_without_user_group' => 'Almeno una delle transizioni non ha un utente o un gruppo!', 'workflow_user_summary' => 'Riepilogo utenti', 'wrong_filetype' => '', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index 43bee7805..5ca6db245 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -297,6 +297,7 @@ URL: [url]', 'confirm_rm_folder_files' => '폴더 "[foldername]"내의 모든 파일을 정말 삭제 하시겠습니까?
주의: 취소가 불가능 합니다.', 'confirm_rm_group' => '그룹 "[groupname]"을 정말 삭제 하시겠습니까?
주의: 취소가 불가능 합니다.', 'confirm_rm_log' => '로그파일 "[logname]"을 정말 삭제 하시겠습니까?
주의: 취소가 불가능 합니다.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => '제거 확인', 'confirm_rm_user' => '사용자 "[username]"을 정말 삭제 하시겠습니까?
주의: 취소가 불가능 합니다.', @@ -321,6 +322,7 @@ URL: [url]', 'current_version' => '현재 버전', 'daily' => '매일', 'databasesearch' => '데이터베이스 검색', +'database_schema_version' => '', 'date' => '날짜', 'days' => '일', 'debug' => '디버그', @@ -670,6 +672,7 @@ URL: [url]', 'inherits_access_copy_msg' => '상속 액세스 목록 복사', 'inherits_access_empty_msg' => '빈 액세스 목록으로 시작', 'inherits_access_msg' => '액세스가 상속됩니다.', +'installed_php_extensions' => '', 'internal_error' => '내부 오류', 'internal_error_exit' => '내부 오류가 발생했습니다. 요청을 완료 할 수 없습니다. .', 'invalid_access_mode' => '잘못된 액세스 모드', @@ -785,6 +788,7 @@ URL: [url]', 'missing_checksum' => '검사 누락', 'missing_file' => '누락 된 파일', 'missing_filesize' => '누락 된 파일 크기', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => '변화에 대한 사용자 / 그룹을 누락', @@ -936,6 +940,7 @@ URL : [url]', 'pending_revision' => '', 'pending_workflows' => '대기중인 워크플로', 'personal_default_keywords' => '개인 키워드 목록', +'php_info' => '', 'pl_PL' => '폴란드어', 'possible_substitutes' => '대체', 'preset_expires' => '만료 조절', @@ -1114,6 +1119,7 @@ URL: [url]', 'rm_from_clipboard' => '클립 보드에서 제거', 'rm_group' => '이 그룹 제거', 'rm_role' => '이 역할 지우기', +'rm_task' => '', 'rm_transmittal' => '송부 삭제', 'rm_transmittalitem' => '아이템 삭제', 'rm_user' => '이 사용자 제거', @@ -1168,6 +1174,8 @@ URL : [url]', 'search_results_access_filtered' => '검색 결과는 액세스가 거부된 콘텐츠를 포함 할 수도 있습니다 search_results검색 결과', 'search_time' => '경과 시간 : [time] 초', 'seconds' => '초', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => '선택', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1221,6 +1229,12 @@ URL : [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => '아파치 - 모듈 다시 쓰기', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => '인증 설정', 'settings_autoLoginUser' => '자동 로그인', 'settings_autoLoginUser_desc' => '로그인하지 않은 사용자의 ID로 접근. 이러한 접근은 세션을 생성하지 않습니다.', @@ -1601,6 +1615,7 @@ URL : [url]', 'splash_add_group' => '새 그룹이 추가', 'splash_add_group_member' => '새 그룹 구성원 추가', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => '새 사용자 추가', @@ -1897,6 +1912,7 @@ URL : [url]', 'workflow_state_in_use' => '이 상태는 현재 워크플로우에 의해 사용된다.', 'workflow_state_name' => '이름', 'workflow_summary' => '워크플로우 요약', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '사용자 요약', 'wrong_filetype' => '', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index f16771dbe..3f911cc6d 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -292,6 +292,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'ເຈົ້າຕ້ອງການລົບໄຟລທັງໝົດໃນໂຟລເດີ [foldername] ແລະ ໂຟລເດີຍ່ອຍຂອງມັນໄຫມ່
ລະວັງ:ການກະທຳນີ້ບໍ່ສາມາດຍົກເລີກໄດ້', 'confirm_rm_group' => 'ເຈົ້າຕ້ອງການລົບກຸ່ມ "[groupname]"?
ລະວັງ: ການກະທຳນີ້ບໍ່ສາມາດຍົກເລີກໄດ້', 'confirm_rm_log' => 'ເຈົ້າຕ້ອງການລົບໄຟລບັນທຶກ "[logname]"?
ລະວັງ: ການກະທໍານີ້ບໍສາມາດຍົກເລີກໄດ້.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'ກະລຸນາຍຶນຢັນການລົບໄຟລການສົ່ງ', 'confirm_rm_transmittalitem' => 'ຍຶນຢັນການນຳອອກ', 'confirm_rm_user' => 'ເຈົ້າຄ້ອງການລົບຜູ້ໄຊ້ "[username]"?
ລະວັງ: ການກະທຳນີ້ບໍ່ສາມາດຍົກເລີກໄດ້', @@ -316,6 +317,7 @@ URL: [url]', 'current_version' => 'ເວີຊັນປະຈຸບັນ', 'daily' => 'ປະຈຳວັນ', 'databasesearch' => 'ຄົ້ນຫາຖານຂໍ້ມູນ', +'database_schema_version' => '', 'date' => 'ວັນທີ', 'days' => 'ວັນ', 'debug' => 'ກວດແກ້ຈຸດບົກຜ່ອງ', @@ -667,6 +669,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'ຄັດລັອກລາຍການເຂົາເຖິງທີສືບທອດ', 'inherits_access_empty_msg' => 'ເລີ້ມຕົ້ນດ້ວຍລາຍການທີ່ວ່າງເປົ່າ', 'inherits_access_msg' => 'ຂໍຜິດພາດພາຍໃນ', +'installed_php_extensions' => '', 'internal_error' => 'ຂໍ້ຜິດພາດພາຍໃນ', 'internal_error_exit' => 'ຂໍ້ຜິດພາດພາຍໃນບໍ່ສາມາດດຳເນີນການຕາມຄຳຂໍໄດ້', 'invalid_access_mode' => 'ຮູບແບບການເຂົ້າເຖິງບໍ່ຖືກຕ້ອງ', @@ -782,6 +785,7 @@ URL: [url]', 'missing_checksum' => 'ບໍ່ມີການກວດສອບ', 'missing_file' => 'ບໍ່ມີຟາຍ', 'missing_filesize' => 'ບໍ່ມີຂະໜາດໄຟລ', +'missing_php_extensions' => '', 'missing_reception' => 'ຂາດການຕອນຮັບ', 'missing_request_object' => 'ການສະເໜີຄຳຂໍໄດ້ຫາຍໄປ', 'missing_transition_user_group' => 'ບໍ່ມີຜູ້ໄຊ້/ ກຸ່ມສຳລັບການປ່ຽນແປງ', @@ -941,6 +945,7 @@ URL: [url]', 'pending_revision' => 'ລໍຖ້າການດຳເນີນການແກ້ໄຂ', 'pending_workflows' => 'ລໍຖ້າການດຳເນີນງານ', 'personal_default_keywords' => 'ລາຍການຄຳຫຼັກສ່ວນບຸກຄົນ', +'php_info' => '', 'pl_PL' => 'ຂັດ', 'possible_substitutes' => 'ທົດແທນ', 'preset_expires' => 'ວັນໝົດອາຍຸທີກຳນົດໄວ້ລ່ວງໜ້າ', @@ -1135,6 +1140,7 @@ URL: [url]', 'rm_from_clipboard' => 'ຍ້າຍອອກຈາກຄິບບອດ', 'rm_group' => 'ຍ້າຍກຸ່ມນີ້ອອກ', 'rm_role' => 'ລົບບົດບາດ', +'rm_task' => '', 'rm_transmittal' => 'ລົບການໂອນຍ້າຍ', 'rm_transmittalitem' => 'ລົບລາຍການ', 'rm_user' => 'ລົບຜູ້ໄຊ້', @@ -1189,6 +1195,8 @@ URL: [url]', 'search_results_access_filtered' => 'ຜົນການຄົ້ນຫາ ອາດຈະມີເນື້ອໃນທີ່ປະຕິເສດເຂົ້າເຖິງໄດ້', 'search_time' => 'ເວລາທີ່ໄຊ້ໄປ: [time] ວິນາທີ', 'seconds' => 'ວິນາທີ', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'ການເລືອກ', 'select_attrdefgrp_show' => 'ເລືອກເວລາທີ່ຈະສະແດງ', 'select_attribute_value' => '', @@ -1247,6 +1255,12 @@ URL: [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => 'ອາປາເຊ -ຂຽນໄຫມ່', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'ການຕັ້ງຄ່າການກວດສອບຄວາມຖືກຕ້ອງ', 'settings_autoLoginUser' => 'ເຂົ້າສູ້ລະບົບແບອັດຕະໂນມັດ', 'settings_autoLoginUser_desc' => 'ໄຊ້ລະຫັດຜູ້ໄຊ້ສຳຫລັບການເຂົ້າເຖີງຫາກຜູ້ໄຊ້ຍັງບໍ່ໄດ້ລົງຊື່ເຂົ້າໄຊ້ການເຂົ້າເຖີງດັ່ງກ່າວຈະບໍ່ສັງເຊັດຊັ້ນ', @@ -1627,6 +1641,7 @@ URL: [url]', 'splash_add_group' => 'ເພີ່ມກຸ່ມໄຫມ່ແລ້ວ', 'splash_add_group_member' => 'ເພີ່ມສະມາຊິກໄໝ່ແລ້ວ', 'splash_add_role' => 'ເພີ່ມບົດບາດໄຫມ່', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'ເພີ່ມການສົ່ງຜ່ານ', 'splash_add_transmittal' => 'ເພີ່ມການສົ່ງຜ່ານ', 'splash_add_user' => 'ເພີ່ມຜູ້ໄຊ້ໄຫມ່ແລ້ວ', @@ -1923,6 +1938,7 @@ URL: [url]', 'workflow_state_in_use' => 'ປະຈຸບັນນີ້ສະຖານະນີຖືກໄຊ້ໂດຍເວີກໂຟລ', 'workflow_state_name' => 'ຊື່', 'workflow_summary' => 'ສະຫຼຸບການເຮັດວຽກ', +'workflow_title' => '', 'workflow_transition_without_user_group' => 'ການປ່ຽນພາບຢ່າງນ້ອຍໜື່ງຄັ້ງບໍ່ມີທັງຜູ້ໄຊ້ແລະກຸ່ມ', 'workflow_user_summary' => 'ສະຫລູບຂໍ້ມູນຂອງຜູ້ໄຊ້', 'wrong_filetype' => '', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index 61b6997d4..1ca28f800 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/lang.inc @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Vil du virkelig fjerne alle filer i mappen "[foldername]" og i katalogens undermapper?
OBS! Filene kan ikke gjennopprettes!', 'confirm_rm_group' => 'Vil du virkelig fjerne gruppen "[groupname]"?
OBS! Gruppen kan ikke gjennopprettes!', 'confirm_rm_log' => 'Vil du virkelig fjerne loggfilen "[logname]"?
OBS! Loggfilen kan ikke gjennopprettes!', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'Bekreft fjerning av sendingen.', 'confirm_rm_transmittalitem' => 'Bekreft fjerning', 'confirm_rm_user' => 'Vil du virkelig fjerne bruker "[username]"?
OBS! handlingen kan ikke omgjøres!', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Aktuell version', 'daily' => 'Daglig', 'databasesearch' => 'Søk i database', +'database_schema_version' => '', 'date' => 'Dato', 'days' => 'dager', 'debug' => 'Feilsøking', @@ -688,6 +690,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Kopier arvet adgangsliste', 'inherits_access_empty_msg' => 'Start med tom adgangsliste', 'inherits_access_msg' => 'Tilgang blir arvet.', +'installed_php_extensions' => '', 'internal_error' => 'Intern feil', 'internal_error_exit' => 'Intern feil. Kan ikke fullføre forespørselen.', 'invalid_access_mode' => 'Ugyldig adgangsmodus', @@ -803,6 +806,7 @@ URL: [url]', 'missing_checksum' => 'Mangler sjekksum', 'missing_file' => 'Mangler fil', 'missing_filesize' => 'Mangler filstørrelse', +'missing_php_extensions' => '', 'missing_reception' => 'Mangler mottager', 'missing_request_object' => 'Mangler forespørsels-objekt', 'missing_transition_user_group' => 'Mangler bruker / gruppe for overgang', @@ -956,6 +960,7 @@ Om du fortsatt har problemer med innloggingen, kontakt admin.', 'pending_revision' => 'Venter på korrektur', 'pending_workflows' => 'Venter på arbeidsflyt', 'personal_default_keywords' => 'Personlig søkeordliste', +'php_info' => '', 'pl_PL' => 'Polsk', 'possible_substitutes' => 'Erstatte', 'preset_expires' => 'Forhåndsinnstilt utløp', @@ -1150,6 +1155,7 @@ URL: [url]', 'rm_from_clipboard' => 'Fjern fra utklippstavlen', 'rm_group' => 'Fjern denne gruppen', 'rm_role' => 'Slett denne rollen', +'rm_task' => '', 'rm_transmittal' => 'Fjern overføringen', 'rm_transmittalitem' => 'Fjerne gjenstand', 'rm_user' => 'Fjern bruker', @@ -1204,6 +1210,8 @@ URL: [url]', 'search_results_access_filtered' => 'Søkeresultater kan inneholde innhold som du ikke har tilgang til!', 'search_time' => 'Brukt tid: [time] sek.', 'seconds' => 'sekunder', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Utvalg', 'select_attrdefgrp_show' => 'Velg visings alternativ', 'select_attribute_value' => 'Velg egenskapsverdi', @@ -1260,6 +1268,12 @@ Bruker: [username] 'settings_allowReviewerOnly' => 'Tilat til å kun sette korrektur', 'settings_allowReviewerOnly_desc' => 'Aktiver dette hvis det skal være tillatt å stille en korrekturleser, men ingen godkjenner i tradisjonell arbeidsflytmodus.', 'settings_apache_mod_rewrite' => 'Apache - Omskriving av moduler', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Autentiseringsinnstillinger', 'settings_autoLoginUser' => 'Automatisk innlogging', 'settings_autoLoginUser_desc' => 'Bruk dette brukernavnet for tilgange hvis brukeren ikke allerede er logget inn. En slik tilgang vil ikke opprette en økt.', @@ -1640,6 +1654,7 @@ Bruker: [username] 'splash_add_group' => 'Ny gruppe lagt til', 'splash_add_group_member' => 'Nytt gruppemedlem lagt til', 'splash_add_role' => 'Lagt til ny rolle', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'Legg til overføring', 'splash_add_transmittal' => 'Lagt til overføring', 'splash_add_user' => 'Ny bruker lagt til', @@ -1936,6 +1951,7 @@ URL: [url]', 'workflow_state_in_use' => 'Denne tilstanden brukes for øyeblikket av arbeidsflyter.', 'workflow_state_name' => 'Navn', 'workflow_summary' => 'Arbeidsflyt sammendrag', +'workflow_title' => '', 'workflow_transition_without_user_group' => 'Minst en av overgangene har verken en bruker eller en gruppe!', 'workflow_user_summary' => 'Brukersammendrag', 'wrong_filetype' => 'Feil filtype', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index c4aad6a16..7d95b3462 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -287,6 +287,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Weet U zeker dat U alle bestanden en submappen van de map "[foldername]" wilt verwijderen?
Let op: deze actie kan niet ongedaan worden gemaakt.', 'confirm_rm_group' => 'Weet U zeker dat U de Groep "[groupname]" wilt verwijderen?
Let op: deze handeling kan niet ongedaan worden gemaakt.', 'confirm_rm_log' => 'Weet U zeker dat U het logbestand "[logname]" wilt verwijderen?
Let op: deze handeling kan niet ongedaan worden gemaakt.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'Bestig de verwijdering van de verzending', 'confirm_rm_transmittalitem' => 'Bevestig te verzenden item', 'confirm_rm_user' => 'Weet U zeker dat U de Gebruiker "[username]" wilt verwijderen?
Let op: deze handeling kan niet ongedaan worden gemaakt.', @@ -311,6 +312,7 @@ URL: [url]', 'current_version' => 'Huidige versie', 'daily' => 'Dagelijks', 'databasesearch' => 'Zoek in Database', +'database_schema_version' => '', 'date' => 'Datum', 'days' => 'Dagen', 'debug' => 'debug', @@ -662,6 +664,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Kopie lijst overerfde toegang', 'inherits_access_empty_msg' => 'Begin met lege toegangslijst', 'inherits_access_msg' => 'Toegang is (over/ge)erfd.', +'installed_php_extensions' => '', 'internal_error' => 'Interne fout', 'internal_error_exit' => 'Interne fout. Niet mogelijk om verzoek uit de voeren.', 'invalid_access_mode' => 'Foutmelding: verkeerde toegangsmode', @@ -777,6 +780,7 @@ URL: [url]', 'missing_checksum' => 'Controlesom ontbreekt', 'missing_file' => 'File ontbreekt', 'missing_filesize' => 'Bestandsgrootte ontbreekt', +'missing_php_extensions' => '', 'missing_reception' => 'Ontvanger ontbreekt', 'missing_request_object' => 'Gevraagd object ontbreekt', 'missing_transition_user_group' => 'Gebruiker / groep ontbreekt voor de overdracht', @@ -936,6 +940,7 @@ Mocht u de komende minuten geen email ontvangen, probeer het dan nogmaals en con 'pending_revision' => 'Wachten op herziening', 'pending_workflows' => 'Wachten op workflow', 'personal_default_keywords' => 'Persoonlijke sleutelwoorden', +'php_info' => '', 'pl_PL' => 'Pools', 'possible_substitutes' => 'Mogelijke alternatieven', 'preset_expires' => 'Preset verloopt', @@ -1128,6 +1133,7 @@ URL: [url]', 'rm_from_clipboard' => 'Verwijder van klembord', 'rm_group' => 'Verwijder deze Groep', 'rm_role' => 'Verwijder deze rol', +'rm_task' => '', 'rm_transmittal' => 'Verwijder de verzending', 'rm_transmittalitem' => 'Verwijder verzonden item', 'rm_user' => 'Verwijder deze Gebruiker', @@ -1182,6 +1188,8 @@ URL: [url]', 'search_results_access_filtered' => 'Zoekresultaten kunnen inhoud bevatten waar U geen toegang toe heeft.', 'search_time' => 'Verstreken tijd: [time] sec.', 'seconds' => 'seconden', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Selectie', 'select_attrdefgrp_show' => 'Toon attribut definities-groep', 'select_attribute_value' => '', @@ -1240,6 +1248,12 @@ Name: [username] 'settings_allowReviewerOnly' => 'Alleen reviewer toestaan', 'settings_allowReviewerOnly_desc' => 'Aanzetten als wel de reviewe, maar niet de goedkeurder toegewezen kan worden.', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Authenticatie instellingen', 'settings_autoLoginUser' => 'Automatische login', 'settings_autoLoginUser_desc' => 'Gebruik dit gebruikers-ID als de gebruiker nog niet is ingelogd. Zo, @@ -1624,6 +1638,7 @@ Name: [username] 'splash_add_group' => 'Nieuwe groep toegevoegd', 'splash_add_group_member' => 'Nieuwe groepslid toegevoegd', 'splash_add_role' => 'Nieuwe rol toegevoegd', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'Toevoegen aan verzending', 'splash_add_transmittal' => 'Verzending toegevoegd', 'splash_add_user' => 'Nieuwe gebruiker toegevoegd', @@ -1920,6 +1935,7 @@ URL: [url]', 'workflow_state_in_use' => 'Deze status wordt momenteel gebruikt door workflows.', 'workflow_state_name' => 'Naam', 'workflow_summary' => 'Workflow samenvatting', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Gebruiker samenvatting', 'wrong_filetype' => '', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index abc68509f..ff784e8ed 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -19,15 +19,15 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (871), netixw (84), romi (93), uGn (112) +// Translators: Admin (1451), netixw (84), romi (93), uGn (112) $text = array( -'2_factor_auth' => '', -'2_factor_auth_info' => '', -'2_fact_auth_secret' => '', +'2_factor_auth' => 'Uwierzytelnianie dwuetapowe', +'2_factor_auth_info' => 'Uwierzytelnianie dwuetapowe', +'2_fact_auth_secret' => 'Uwierzytelnianie dwuetapowe poufny kod', 'accept' => 'Akceptuj', 'access_control' => 'Kontrola dostępu', -'access_control_is_off' => '', +'access_control_is_off' => 'Kontrola dostepu jest wyłączona', 'access_denied' => 'Dostęp zabroniony.', 'access_inheritance' => 'Dziedziczenie dostępu', 'access_mode' => 'Tryb dostępu', @@ -54,7 +54,7 @@ URL: [url]', 'action_revise' => 'Korekta', 'add' => 'Dodaj', 'add_approval' => 'Zaakceptuj', -'add_attrdefgroup' => '', +'add_attrdefgroup' => 'Dodaj nowy atrybut grupy', 'add_document' => 'Dodaj dokument', 'add_document_link' => 'Dodaj link', 'add_document_notify' => 'Przypisz powiadomienia', @@ -65,15 +65,15 @@ URL: [url]', 'add_member' => 'Dodaj członka', 'add_multiple_documents' => 'Dodaj wiele dokumentów', 'add_multiple_files' => 'Dodaj wiele plików (Nazwy plików zostaną użyte jako nazwy dokumentów)', -'add_receipt' => '', +'add_receipt' => 'Dodaj potwierdzenie', 'add_review' => 'Zatwierdź recenzję', -'add_revision' => '', -'add_role' => '', +'add_revision' => 'Dodaj korektę', +'add_role' => 'Dodaj role', 'add_subfolder' => 'Dodaj podfolder', -'add_task' => '', +'add_task' => 'Dodaj zadanie', 'add_to_clipboard' => 'Dodaj do schowka', -'add_to_transmittal' => '', -'add_transmittal' => '', +'add_to_transmittal' => 'Dodaj do przekazu', +'add_transmittal' => 'Dodaj przekaz', 'add_user' => 'Dodaj nowego użytkownika', 'add_user_to_group' => 'Przypisz użytkownika do grupy', 'add_workflow' => 'Dodaj nowy proces', @@ -89,29 +89,29 @@ URL: [url]', 'already_subscribed' => 'Aktualnie subskrybowane', 'and' => 'i', 'apply' => 'Zastosuj', -'approvals_accepted' => '', -'approvals_accepted_latest' => '', -'approvals_and_reviews_accepted' => '', -'approvals_and_reviews_not_touched' => '', -'approvals_and_reviews_rejected' => '', -'approvals_not_touched' => '', -'approvals_not_touched_latest' => '', -'approvals_rejected' => '', -'approvals_rejected_latest' => '', -'approvals_without_group' => '', -'approvals_without_user' => '', +'approvals_accepted' => 'Zatwierdzenia zaakceptowane', +'approvals_accepted_latest' => 'Zatwierdzenia zaakceptowane później', +'approvals_and_reviews_accepted' => 'Zatwierdzenia i recenzje zaakceptowane', +'approvals_and_reviews_not_touched' => 'Zatwierdzenia i recenzje nie oglądane', +'approvals_and_reviews_rejected' => 'Zatwierdzenia i recenzje odrzucone', +'approvals_not_touched' => 'Zatwierdzenia nie oglądane', +'approvals_not_touched_latest' => 'Zatwierdzenia nie oglądane później', +'approvals_rejected' => 'Zatwierdzenia odrzucone', +'approvals_rejected_latest' => 'Zatwierdzenia odrzucone później', +'approvals_without_group' => 'Zatwierdzenia bez grupy', +'approvals_without_user' => 'Zatwierdzenia bez użytkownika', 'approval_deletion_email' => 'Prośba o akceptację została usunięta', 'approval_deletion_email_body' => '', -'approval_deletion_email_subject' => '', -'approval_file' => '', +'approval_deletion_email_subject' => 'Akceptacja', +'approval_file' => 'Zatwierdzenia pliku', 'approval_group' => 'Grupa akceptująca', 'approval_log' => 'Zatwierdź log', 'approval_request_email' => 'Prośba o akceptację', -'approval_request_email_body' => 'Prośba o zatwierdzenie -Dokument: [name] -Wersja: [version] -Folder nadrzędny: [folder_path] -Użytkownik: [username] +'approval_request_email_body' => 'Prośba o zatwierdzenie +Dokument: [name] +Wersja: [version] +Folder nadrzędny: [folder_path] +Użytkownik: [username] URL: [url]', 'approval_request_email_subject' => '[sitename]: [name] - Prośba o zatwierdzenie', 'approval_status' => 'Status akceptacji', @@ -121,10 +121,10 @@ URL: [url]', 'approval_summary' => 'Podsumowanie akceptacji', 'approval_update_failed' => 'Błąd aktualizacji statusu akceptacji. Aktualizacja nie powiodła się.', 'approvers' => 'Osoby akceptujące', -'approver_already_assigned' => '', -'approver_already_removed' => '', +'approver_already_assigned' => 'Użytkownik jest już przypisany jako osoba zatwierdzająca.', +'approver_already_removed' => 'Osoba zatwierdzająca została już usunięta z procesu zatwierdzania lub już przesłała zatwierdzenie.', 'april' => 'Kwiecień', -'archive' => '', +'archive' => 'Archiwum', 'archive_creation' => 'Tworzenie archiwum', 'archive_creation_warning' => 'Ta operacja utworzy archiwum zawierające pliki z całego repozytorium. Po utworzeniu archiwum będzie zapisane w folderze na serwerze.
UWAGA: archiwum utworzone jako czytelne dla ludzi będzie bezużyteczne jako kopia serwera.', 'ar_EG' => 'Arabski', @@ -133,13 +133,13 @@ URL: [url]', 'assign_reviewers' => 'Przypisz recenzentów', 'assign_user_property_to' => 'Przypisz właściwości użytkownika do', 'assumed_released' => 'Assumed released', -'attrdefgroup_management' => '', -'attrdefgrp_show_detail' => '', -'attrdefgrp_show_list' => '', -'attrdefgrp_show_search' => '', -'attrdefgrp_show_searchlist' => '', +'attrdefgroup_management' => 'Zarządzanie grupami atrybutów', +'attrdefgrp_show_detail' => 'Szczegóły', +'attrdefgrp_show_list' => 'Lista', +'attrdefgrp_show_search' => 'Szukaj', +'attrdefgrp_show_searchlist' => 'Wynik wyszukiwania', 'attrdef_exists' => 'Definicja atrybutu już istnieje', -'attrdef_info' => '', +'attrdef_info' => 'Informacja', 'attrdef_in_use' => 'Definicja atrybutu nadal jest w użyciu', 'attrdef_management' => 'Zarządzanie definicją atrybutu', 'attrdef_maxvalues' => 'Max. ilość wartości', @@ -147,49 +147,49 @@ URL: [url]', 'attrdef_min_greater_max' => 'Minimalna ilość wartości jest większa od ich maksymalnej ilości', 'attrdef_multiple' => 'Pozwól na wiele wartości', 'attrdef_multiple_needs_valueset' => 'Definiowanie atrybutów z wieloma wartościami wymaga podania tych wartości', -'attrdef_must_be_multiple' => '', +'attrdef_must_be_multiple' => 'Atrybut musi mieć więcej niż jedną wartość, ale nie może zawierać wielu wartości', 'attrdef_name' => 'Nazwa', -'attrdef_noname' => '', +'attrdef_noname' => 'Brak nazwy dla definicji atrybutu', 'attrdef_objtype' => 'Typ obiektu', 'attrdef_regex' => 'Wyrażenie regularne', 'attrdef_type' => 'Typ', -'attrdef_type_boolean' => '', +'attrdef_type_boolean' => 'Boolean', 'attrdef_type_date' => 'Data', -'attrdef_type_email' => '', +'attrdef_type_email' => 'Email', 'attrdef_type_float' => 'Liczna zmiennoprzecinkowa', 'attrdef_type_int' => 'Liczba całkowita', 'attrdef_type_string' => 'Ciąg znaków', -'attrdef_type_url' => '', -'attrdef_valueset' => 'Set of values', +'attrdef_type_url' => 'URL', +'attrdef_valueset' => 'Zestaw wartości', 'attributes' => 'Atrybuty', -'attribute_changed_email_body' => 'Zmiana atrybutu -Dokument: [name] -Wersja: [version] -Atrybut: [attribute_name] -Old value: [attribute_old_value] -New value: [attribute_new_value] -Folder nadrzędny: [folder_path] -Użytkownik: [username] +'attribute_changed_email_body' => 'Zmiana atrybutu +Dokument: [name] +Wersja: [version] +Atrybut: [attribute_name] +Old value: [attribute_old_value] +New value: [attribute_new_value] +Folder nadrzędny: [folder_path] +Użytkownik: [username] URL: [url]', 'attribute_changed_email_subject' => '[sitename]: [name] - Zmiana atrybutu', 'attribute_count' => 'liczba użyć', 'attribute_value' => 'wartość atrybutu', -'attribute_value_not_in_valueset' => '', -'attr_malformed_boolean' => '', -'attr_malformed_date' => '', -'attr_malformed_email' => '', -'attr_malformed_float' => '', -'attr_malformed_int' => '', -'attr_malformed_url' => '', -'attr_max_values' => '', -'attr_min_values' => '', -'attr_not_in_valueset' => '', +'attribute_value_not_in_valueset' => 'Wartość nie w zestawie wartości', +'attr_malformed_boolean' => 'Wartość atrybutu \'[value]\' \'[attrname]\' nie jest prawidłowy boolean', +'attr_malformed_date' => 'Wartość atrybutu \'[value]\' \'[attrname]\' nie jest prawidłową datą', +'attr_malformed_email' => 'Wartość atrybutu \'[value]\' \'[attrname]\' nie jest prawidłowy adres email', +'attr_malformed_float' => 'Wartość atrybutu \'[value]\' \'[attrname]\' nie jest prawidłową liczbą zmiennoprzecinkową', +'attr_malformed_int' => 'Wartość atrybutu \'[value]\' \'[attrname]\' nie jest prawidłową liczbą całkowitą', +'attr_malformed_url' => 'Wartość atrybutu \'[value]\' \'[attrname]\' nie jest prawidłowy URL', +'attr_max_values' => 'Przekroczono maksymalną liczbę wymaganych wartości dla atrybutu \'[attrname]\'', +'attr_min_values' => 'Minimalna liczba wymaganych wartości dla atrybutu \'[attrname]\' nie została osiągnięta', +'attr_not_in_valueset' => 'Wartość atrybutu \'[value]\' \'[attrname]\' nie jest zawarta w zestawie wartości', 'attr_no_regex_match' => 'Wartość atrybutu nie pasuje do wyrażenia regularnego', -'attr_validation_error' => '', +'attr_validation_error' => 'Wartość \'[value]\' atrybutu \'[attrname]\' jest nieprawidłowa', 'at_least_n_users_of_group' => 'Przynajmniej [number_of_users] użytkowników grupy [group]', 'august' => 'Sierpień', 'authentication' => 'Autoryzacja', -'authentication_failed' => '', +'authentication_failed' => 'Błędna autoryzacja', 'author' => 'Autor', 'automatic_status_update' => 'Automatyczna zmiana statusu', 'back' => 'Powrót', @@ -212,15 +212,15 @@ URL: [url]', 'cannot_retrieve_review_snapshot' => 'Nie można pobrać migawki stanu recenzowania dla tej wersji dokumentu.', 'cannot_rm_root' => 'Błąd: Nie można usunąć katalogu głównego.', 'categories' => 'Kategorie', -'categories_loading' => '', +'categories_loading' => 'Poczekaj, aż lista kategorii zostanie załadowana…', 'category' => 'Kategoria', 'category_exists' => 'Kategoria już istnieje.', 'category_filter' => 'Tylko w kategoriach', -'category_info' => '', +'category_info' => 'Informacja', 'category_in_use' => 'Ta kategoria jest aktualnie używana przez dokumenty.', 'category_noname' => 'Nie podano nazwy kategorii.', 'ca_ES' => 'Kataloński', -'changelog_loading' => '', +'changelog_loading' => 'Poczekaj, aż dziennik zmian zostanie załadowany…', 'change_assignments' => 'Zmiana przypisania', 'change_password' => 'Zmiana hasła', 'change_password_message' => 'Twoje hasło zostało zmienione.', @@ -236,18 +236,18 @@ URL: [url]', 'chart_docsperuser_title' => 'Dokumenty na użytkownika', 'chart_selection' => 'Wybierz wykres', 'chart_sizeperuser_title' => 'Zajętość dysku na użytkownika', -'checkedout_file_has_different_version' => '', -'checkedout_file_has_disappeared' => '', -'checkedout_file_is_unchanged' => '', -'checkin_document' => '', -'checkoutpath_does_not_exist' => '', -'checkout_document' => '', -'checkout_is_disabled' => '', +'checkedout_file_has_different_version' => 'Wersja wypisana nie jest identyczna z bieżącą wersją. Zameldowanie nie zaktualizuje dokumentu.', +'checkedout_file_has_disappeared' => 'Plik wyrejestrowanego dokumentu zniknął. Zameldowanie nie będzie możliwe.', +'checkedout_file_is_unchanged' => 'Plik wyrejestrowanego dokumentu jest nadal niezmieniony. Zameldowanie nie będzie możliwe. Jeśli nie planujesz żadnych modyfikacji, możesz zresetować status transakcji.', +'checkin_document' => 'Zamelduj się', +'checkoutpath_does_not_exist' => 'Ścieżka realizacji transakcji nie istnieje', +'checkout_document' => 'Wymelduj się', +'checkout_is_disabled' => 'Wyewidencjonowywanie dokumentów jest wyłączone w konfiguracji.', 'choose_attrdef' => 'Proszę wybrać definicję atrybutu', -'choose_attrdefgroup' => '', +'choose_attrdefgroup' => 'Wybierz grupę atrybutów', 'choose_category' => 'Proszę wybrać', 'choose_group' => 'Wybierz grupę', -'choose_role' => '', +'choose_role' => 'Wybierz rolę', 'choose_target_category' => 'Wybierz kategorię', 'choose_target_document' => 'Wybierz dokument', 'choose_target_file' => 'Wybierz plik', @@ -256,23 +256,23 @@ URL: [url]', 'choose_workflow' => 'Wybierz proces', 'choose_workflow_action' => 'Wybierz działanie procesu', 'choose_workflow_state' => 'Wybierz stan obiegu', -'class_name' => '', +'class_name' => 'Nazwa klasy', 'clear_cache' => 'Wyczyść cache', 'clear_clipboard' => 'Oczyść schowek', -'clear_password' => '', +'clear_password' => 'Wyczyść hasło', 'clipboard' => 'Schowek', 'close' => 'Zamknij', -'command' => '', +'command' => 'Polecenia', 'comment' => 'Opis', 'comment_changed_email' => '', 'comment_for_current_version' => 'Komentarz do wersji', 'configure_extension' => 'Konfiguruj rozszerzenie', -'confirm_clear_cache' => '', +'confirm_clear_cache' => 'Czy naprawdę chcesz wyczyścić pamięć podręczną? Spowoduje to usunięcie wszystkich wstępnie obliczonych obrazów podglądu.', 'confirm_create_fulltext_index' => 'Tak, chcę ponownie utworzyć indeks pełnotekstowy!', -'confirm_move_document' => '', -'confirm_move_folder' => '', +'confirm_move_document' => 'Potwierdź przeniesienie dokumentu', +'confirm_move_folder' => 'Potwierdź przeniesienie folderu', 'confirm_pwd' => 'Potwierdź hasło', -'confirm_rm_attr_value' => '', +'confirm_rm_attr_value' => 'Czy naprawdę chcesz usunąć wartość atrybutu?', 'confirm_rm_backup' => 'Czy rzeczywiście chcesz usunąć plik "[arkname]"?
Ostrożnie: Ta operacja nie może być cofnięta.', 'confirm_rm_document' => 'Czy rzeczywiście chcesz usunąć dokument \'[documentname]\'?
Ostrożnie: Ta operacja nie może być cofnięta.', 'confirm_rm_dump' => 'Czy rzeczywiście chcesz usunąć plik "[dumpname]"?
Ostrożnie: Ta operacja nie może być cofnięta.', @@ -282,33 +282,35 @@ URL: [url]', 'confirm_rm_folder_files' => 'Czy rzeczywiście chcesz usunąć wszystkie pliki z folderu "[foldername]" oraz jego podfoldery?
Ostrożnie: Ta operacja nie może być cofnięta.', 'confirm_rm_group' => 'Czy rzeczywiście chcesz usunąć grupę "[groupname]"?
Ostrożnie: Ta operacja nie może być cofnięta.', 'confirm_rm_log' => 'Czy rzeczywiście chcesz usunąć plik dziennika "[logname]"?
Ostrożnie: Ta operacja nie może być cofnięta.', -'confirm_rm_transmittal' => '', -'confirm_rm_transmittalitem' => '', +'confirm_rm_task' => '', +'confirm_rm_transmittal' => 'Proszę potwierdzić usunięcie przekazu.', +'confirm_rm_transmittalitem' => 'Potwierdź usunięcie', 'confirm_rm_user' => 'Czy rzeczywiście chcesz usunąć użytkownika "[username]"?
Ostrożnie: Ta operacja nie może być cofnięta.', -'confirm_rm_user_from_processes' => '', +'confirm_rm_user_from_processes' => 'Czy naprawdę chcesz usunąć użytkownika "[username]" ze wszystkich procesów?
Uwaga: Ta akcja może doprowadzić do zwolnienia dokumentów, jeśli użytkownik był jedynym lub ostatnim zatwierdzającym.', 'confirm_rm_version' => 'Czy rzeczywiście chcesz usunąć wersję [version] dokumentu "[documentname]"?
Ostrożnie: Ta operacja nie może być cofnięta.', -'confirm_transfer_link_document' => '', -'confirm_transfer_objects' => '', -'confirm_update_transmittalitem' => '', +'confirm_transfer_link_document' => 'Wybierz, jeśli chcesz połączyć przeciągnięty dokument lub przenieść jego zawartość do dokumentu docelowego jako nową wersję. Można przesyłać tylko dokumenty z jedną wersją. Przeciągnięty dokument zostanie następnie usunięty.', +'confirm_transfer_objects' => 'Czy naprawdę chcesz przenieść dokumenty, foldery itp. użytkownika "[username]"?
Uważaj: tej czynności nie można cofnąć.', +'confirm_update_transmittalitem' => 'Potwierdź aktualizację', 'content' => 'Zawartość', 'continue' => 'Kontynuuj', 'converter_new_cmd' => 'Komenda', 'converter_new_mimetype' => 'Nowy typ MIME', -'copied_to_checkout_as' => '', -'create_download_link' => '', +'copied_to_checkout_as' => 'Plik skopiowany w celu wyewidencjonowania miejsca jako \'[filename]\' w dniu [date]', +'create_download_link' => 'Utwórz link do pobrania', 'create_fulltext_index' => 'Utwórz indeks pełnotekstowy', 'create_fulltext_index_warning' => 'Zamierzasz ponownie utworzyć indeks pełnotekstowy. To może zająć sporo czasu i ograniczyć ogólną wydajność systemu. Jeśli faktycznie chcesz to zrobić, proszę potwierdź tę operację.', 'creation_date' => 'Utworzony', 'cs_CZ' => 'czeski', 'current_password' => 'Aktualne hasło', -'current_quota' => '', +'current_quota' => 'Obecny limit systemowy jest ustawiony [quota].', 'current_state' => 'Bieżący stan', 'current_version' => 'Bieżąca wiersja', 'daily' => 'Codziennie', 'databasesearch' => 'Przeszukiwanie bazy danych', +'database_schema_version' => '', 'date' => 'Data', 'days' => 'dni', -'debug' => '', +'debug' => 'Debugowanie', 'december' => 'Grudzień', 'default_access' => 'Domyślny tryb dostępu', 'default_keywords' => 'Dostępne słowa kluczowe', @@ -319,34 +321,34 @@ URL: [url]', 'de_DE' => 'niemiecki', 'disclaimer' => 'To jest zastrzeżona strefa. Dostęp do niej ma wyłącznie wyznaczony personel. Wszelkie naruszenia będą ścigane zgodnie z prawem krajowym i międzynarodowym.', 'discspace' => 'Miejsce na dysku', -'docs_in_reception_no_access' => '', -'docs_in_revision_no_access' => '', +'docs_in_reception_no_access' => 'Dokumenty z odbiorem bez dostępu odbiorcy', +'docs_in_revision_no_access' => 'Dokumenty w wersji bez dostępu przez audytora', 'document' => 'Dokument', 'documentcontent' => 'Zawartość dokumentu', 'documents' => 'Dokumenty', -'documents_checked_out_by_you' => '', +'documents_checked_out_by_you' => 'Dokumenty sprawdzone przez Ciebie', 'documents_expired' => 'Wygasłe dokumenty', 'documents_in_process' => 'Dokumenty procesowane', -'documents_locked' => '', +'documents_locked' => 'Dokumenty zablokowane', 'documents_locked_by_you' => 'Dokumenty zablokowane przez Ciebie', 'documents_only' => 'Tylko dokumenty', 'documents_to_approve' => 'Dokumenty oczekujące na Twoje zatwierdzenie', -'documents_to_correct' => '', -'documents_to_process' => '', -'documents_to_receipt' => '', +'documents_to_correct' => 'Dokumenty oczekujące na Twoje korekty', +'documents_to_process' => 'Dokumenty oczekujące na Twoje przetworzenie', +'documents_to_receipt' => 'Dokumenty oczekujące na Twoje potwierdzenie', 'documents_to_review' => 'Dokumenty oczekujące na Twoją recenzję', -'documents_to_revise' => '', -'documents_to_trigger_workflow' => '', -'documents_user_draft' => '', -'documents_user_expiration' => '', -'documents_user_needs_correction' => '', -'documents_user_no_reception' => '', -'documents_user_obsolete' => '', -'documents_user_reception' => '', +'documents_to_revise' => 'Dokumenty oczekujące na Twoją weryfikacje', +'documents_to_trigger_workflow' => 'Dokumenty w przepływie pracy', +'documents_user_draft' => 'Dokumenty w projekcie', +'documents_user_expiration' => 'Dokumenty wygasłe', +'documents_user_needs_correction' => 'Dokumenty wymagające korekty', +'documents_user_no_reception' => 'Nie odebrane dokumenty', +'documents_user_obsolete' => 'Dokument przestarzały', +'documents_user_reception' => 'Odebrane dokumenty', 'documents_user_rejected' => 'Odrzucone dokumenty', 'documents_user_requiring_attention' => 'Dokumenty należące do Ciebie, które wymagają uwagi', -'documents_with_notification' => '', -'document_already_checkedout' => '', +'documents_with_notification' => 'Dokument z powiadomieniem', +'document_already_checkedout' => 'Dokument został już pobrany', 'document_already_locked' => 'Ten dokument jest już zablokowany', 'document_attribute_changed_email_body' => '', 'document_attribute_changed_email_subject' => '', @@ -359,7 +361,7 @@ Folder macierzysty: [folder_path] Użytkownik: [username] URL: [url]', 'document_comment_changed_email_subject' => '[sitename]: [name] - Zmiana komentarza', -'document_count' => '', +'document_count' => 'Liczba dokumentów', 'document_deleted' => 'Dokument usunięty', 'document_deleted_email' => 'Dokument usunięty', 'document_deleted_email_body' => 'Document usunięto @@ -370,7 +372,7 @@ Użytkownik: [username]', 'document_duplicate_name' => 'Zduplikowana nazwa dokumentu', 'document_has_no_workflow' => 'Dokument nie ma przypisanego procesu', 'document_infos' => 'Informacje o dokumencie', -'document_is_checked_out' => '', +'document_is_checked_out' => 'Ten dokument jest pobierany', 'document_is_not_locked' => 'Ten dokument nie jest zablokowany', 'document_link_by' => 'Dowiązane przez', 'document_link_public' => 'Publiczny', @@ -382,7 +384,7 @@ Nowy folder: [new_folder_path] Użytkownik: [username] URL: [url]', 'document_moved_email_subject' => '[sitename]: [name] - Przeniesienie dokumentu', -'document_not_checkedout' => '', +'document_not_checkedout' => 'Dokument nie jest wyewidencjonowany.', 'document_renamed_email' => 'Nazwa dokumenty zmieniona', 'document_renamed_email_body' => 'Nazwa dokumentu uległa zmianie Dokument: [name] @@ -392,57 +394,57 @@ Użytkownik: [username] URL: [url]', 'document_renamed_email_subject' => '[sitename]: [name] - Zmiana nazwy dokumentu', 'document_status_changed_email' => 'Zmieniono status dokumentu', -'document_status_changed_email_body' => 'Status dokumentu zmienił się -Dokument: [name] -Status: [status] -Folder macierzysty: [folder_path] -Użytkownik: [username] +'document_status_changed_email_body' => 'Status dokumentu zmienił się +Dokument: [name] +Status: [status] +Folder macierzysty: [folder_path] +Użytkownik: [username] URL: [url]', 'document_status_changed_email_subject' => '[sitename]: [name] - Zmiana statusu dokumentu', 'document_title' => 'Dokument \'[documentname]\'', 'document_transfered_email_body' => '', 'document_transfered_email_subject' => '', 'document_updated_email' => 'Dokument zaktualizowany', -'document_updated_email_body' => 'Document zaktualizowano -Dokument: [name] -Folder macierzysty: [folder_path] -Użytkownik: [username] -Komentarz: [comment] -Komentarz wersji: [version_comment] +'document_updated_email_body' => 'Document zaktualizowano +Dokument: [name] +Folder macierzysty: [folder_path] +Użytkownik: [username] +Komentarz: [comment] +Komentarz wersji: [version_comment] URL: [url]', 'document_updated_email_subject' => '[sitename]: [name] - Aktualizacja dokumentu', 'does_not_expire' => 'Nigdy nie wygasa', 'does_not_inherit_access_msg' => 'Dziedzicz dostęp', 'download' => 'Pobierz', 'download_extension' => 'Pobierz rozszerzenie w pliku zip', -'download_header_approval_comment' => '', -'download_header_approval_date' => '', -'download_header_approval_state' => '', -'download_header_approver' => '', -'download_header_document_name' => '', -'download_header_document_no' => '', -'download_header_filename' => '', -'download_header_internal_version' => '', -'download_header_reviewer' => '', -'download_header_review_comment' => '', -'download_header_review_date' => '', -'download_header_review_state' => '', -'download_header_state' => '', -'download_links' => '', -'do_no_transfer_to_user' => '', +'download_header_approval_comment' => 'Komentarz do zatwierdzenia', +'download_header_approval_date' => 'Data do zatwierdzenia', +'download_header_approval_state' => 'Status do zatwierdzenia', +'download_header_approver' => 'Zatwierdzający', +'download_header_document_name' => 'Nazwa dokumentu', +'download_header_document_no' => 'Numer dokumentu', +'download_header_filename' => 'Nazwa pliku', +'download_header_internal_version' => 'Wersja wewnętrzna', +'download_header_reviewer' => 'Recenzent', +'download_header_review_comment' => 'Komentarz recezenta', +'download_header_review_date' => 'Data recezenta', +'download_header_review_state' => 'Status recezenta', +'download_header_state' => 'Status', +'download_links' => 'Pobierz link', +'do_no_transfer_to_user' => 'Nie przesyłaj procesów do użytkownika', 'do_object_repair' => 'Napraw wszystkie katalogi i pliki.', 'do_object_setchecksum' => 'Ustaw sumę kontrolną', 'do_object_setfilesize' => 'Podaj rozmiar pliku', -'do_object_setfiletype' => '', +'do_object_setfiletype' => 'Podaj typ pliku', 'do_object_unlink' => 'Usuń wersję dokumentu', -'draft' => '', +'draft' => 'Szkic', 'draft_pending_approval' => 'Szkic - w oczekiwaniu na akceptację', 'draft_pending_review' => 'Szkic - w oczekiwaniu na opinię', 'drag_icon_here' => 'Przeciągnij ikonę folderu lub dokumentu tutaj!', -'dropfolderdir_missing' => '', -'dropfolder_file' => 'Plik z folderu rozwijanego', -'dropfolder_folder' => 'Katalog ze strefy drop', -'dropfolder_metadata' => '', +'dropfolderdir_missing' => 'Twój osobisty folder zrzutu nie istnieje na serwerze! Poproś swojego administratora o jego utworzenie.', +'dropfolder_file' => 'Plik z folderu zrzutu', +'dropfolder_folder' => 'Katalog ze strefy zrzutu', +'dropfolder_metadata' => 'Metadane folderu zrzutu', 'dropupload' => 'Szybki upload', 'drop_files_here' => 'Przeciągnij tu pliki!', 'dump_creation' => 'Utworzenie zrzutu bazy danych', @@ -460,70 +462,70 @@ URL: [url]', 'edit_document_props' => 'Edytuj dokument', 'edit_event' => 'Edytuj zdarzenie', 'edit_existing_access' => 'Edytuj listę dostępu', -'edit_existing_attribute_groups' => '', +'edit_existing_attribute_groups' => 'Edytuj grupy atrybutów', 'edit_existing_notify' => 'Edytuj listę powiadomień', 'edit_folder_access' => 'Edytuj dostęp', -'edit_folder_attrdefgrp' => '', +'edit_folder_attrdefgrp' => 'Edytuj grupy atrybutów', 'edit_folder_notify' => 'Lista powiadomień dla folderu', 'edit_folder_props' => 'Edytuj folder', 'edit_group' => 'Edytuj grupę', -'edit_online' => '', -'edit_online_warning' => '', -'edit_task' => '', -'edit_transmittal_props' => '', +'edit_online' => 'Edytuj online', +'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', 'edit_user' => 'Edytuj użytkownika', 'edit_user_details' => 'Zmień dane użytkownika', -'edit_version' => '', +'edit_version' => 'Edytuj wersję', 'el_GR' => 'Grecki', '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_header' => 'To jest automatyczne powiadomienie serwera DMS.', 'email_not_given' => 'Proszę podać poprawny adres email.', -'empty_attribute_group_list' => '', +'empty_attribute_group_list' => 'Brak grup atrybutów', 'empty_folder_list' => 'Nie ma dokumentów lub folderów', -'empty_list' => '', +'empty_list' => 'Brak wpisów', 'empty_notify_list' => 'Brak elementów', 'en_GB' => 'Angielski (GB)', 'equal_transition_states' => 'Stan rozpoczęcia i ukończenia jest taki sam', 'error' => 'Błąd', -'error_add_aro' => '', -'error_add_permission' => '', -'error_cleared_cache' => '', -'error_edit_task' => '', -'error_extension_getlist' => '', -'error_importfs' => '', +'error_add_aro' => 'Błąd podczas dodawania obiektu żądania dostępu', +'error_add_permission' => 'Błąd podczas dodawania uprawnienia', +'error_cleared_cache' => 'Błąd podczas czyszczenia pamięci podręcznej', +'error_edit_task' => 'Błąd podczas zapisywania zadania', +'error_extension_getlist' => 'Błąd podczas pobierania listy rozszerzeń z repozytorium', +'error_importfs' => 'Błąd podczas importowania systemu plików formularza', 'error_no_document_selected' => 'Brak wybranych dokumentów', 'error_no_folder_selected' => 'Brak wybranych katalogów', 'error_occured' => 'Wystąpił błąd', -'error_remove_document' => '', -'error_remove_folder' => '', -'error_remove_permission' => '', -'error_rm_workflow' => '', -'error_rm_workflow_action' => '', -'error_rm_workflow_state' => '', -'error_toogle_permission' => '', -'error_transfer_document' => '', -'error_trigger_workflow' => '', -'error_update_document' => '', -'error_uploading_reviewer_only' => '', +'error_remove_document' => 'Błąd podczas usuwania dokumentu', +'error_remove_folder' => 'Błąd podczas usuwania folderu', +'error_remove_permission' => 'Błąd podczas usuwania uprawnienia', +'error_rm_workflow' => 'Błąd podczas usuwania przepływu pracy', +'error_rm_workflow_action' => 'Błąd podczas usuwania akcji przepływu pracy', +'error_rm_workflow_state' => 'Błąd podczas usuwania stanu przepływu pracy', +'error_toogle_permission' => 'Błąd podczas zmiany uprawnień', +'error_transfer_document' => 'Błąd podczas przesyłania dokumentu', +'error_trigger_workflow' => 'Błąd podczas wyzwalania przejścia przepływu pracy', +'error_update_document' => 'Błąd podczas aktualizacji dokumentu', +'error_uploading_reviewer_only' => 'Błąd podczas tworzenia dokumentu. Dokument ma recenzenta, ale nie ma osoby zatwierdzającej.', 'es_ES' => 'Hiszpański', 'event_details' => 'Szczegóły zdarzenia', 'exclude_items' => 'Pozycje wykluczone', 'expired' => 'Wygasłe', -'expired_at_date' => '', -'expired_documents' => '', +'expired_at_date' => 'Wygasło [datetime]', +'expired_documents' => 'Wygasłe dokumenty', 'expires' => 'Wygasa', 'expire_by_date' => 'Wygaśnięcie wg daty', -'expire_in_1d' => '', -'expire_in_1h' => '', +'expire_in_1d' => 'Wygasa po 1 dniu', +'expire_in_1h' => 'Wygasa po 1 godzinie', 'expire_in_1m' => 'Wygasa po 1 miesiącu', 'expire_in_1w' => 'Wygasa po 1 tygodniu', 'expire_in_1y' => 'Wygasa po 1 roku', -'expire_in_2h' => '', +'expire_in_2h' => 'Wygasa po 2 godzinach', 'expire_in_2y' => 'Wygasa po 2 latach', -'expire_today' => '', -'expire_tomorrow' => '', +'expire_today' => 'Wygasa dzisiaj', +'expire_tomorrow' => 'Wygasa jutro', 'expiry_changed_email' => 'Zmieniona data wygaśnięcia', 'expiry_changed_email_body' => 'Zmiana daty wygaśnięcia Dokument: [name] @@ -531,8 +533,8 @@ Folder nadrzędny: [folder_path] Użytkownik: [username] URL: [url]', 'expiry_changed_email_subject' => '[sitename]: [name] - Zmiana daty wygaśnięcia', -'export' => '', -'extension_archive' => '', +'export' => 'Export', +'extension_archive' => 'Rozszerzenie', 'extension_changelog' => 'Log Zmian', 'extension_loading' => 'Wgrywam dodatki...', 'extension_manager' => 'Zarządzanie rozszerzeniami', @@ -546,23 +548,23 @@ URL: [url]', 'files_deletion' => 'Usuwanie plików', 'files_deletion_warning' => 'Ta operacja pozwala usunąć wszystkie pliki z repozytorium. Informacje o wersjonowaniu pozostaną widoczne.', 'files_loading' => 'Proszę czekać do załadowania lista plików…', -'filetype' => '', +'filetype' => 'Typ pliku', 'file_size' => 'Rozmiar pliku', 'filter_for_documents' => 'Dodatkowe filtrowanie dla dokumentów', 'filter_for_folders' => 'Dodatkowe filtrowanie dla folderów', 'folder' => 'Folder', 'folders' => 'Foldery', 'folders_and_documents_statistic' => 'Podsumowanie zawartości', -'folders_with_notification' => '', +'folders_with_notification' => 'Foldery z powiadomieniem', 'folder_attribute_changed_email_body' => '', 'folder_attribute_changed_email_subject' => '', 'folder_comment_changed_email' => 'Zmiana komentarza', -'folder_comment_changed_email_body' => 'Komentarz uległ zmianie -Folder: [name] -Poprzedni komentarz: [old_comment] -Komentarz: [new_comment] -Parent folder: [folder_path] -Użytkownik: [username] +'folder_comment_changed_email_body' => 'Komentarz uległ zmianie +Folder: [name] +Poprzedni komentarz: [old_comment] +Komentarz: [new_comment] +Parent folder: [folder_path] +Użytkownik: [username] URL: [url]', 'folder_comment_changed_email_subject' => '[sitename]: [name] - Zmiana komentarza', 'folder_contents' => 'Zawartość folderu', @@ -599,10 +601,10 @@ URL: [url]', 'fr_FR' => 'Francuzki', 'fullsearch' => 'Przeszukiwanie treści dokumentów', 'fullsearch_hint' => 'Przeszukuj treść dokumentów', -'fulltextsearch_disabled' => '', +'fulltextsearch_disabled' => 'Indeks pełnotekstowy jest wyłączony', 'fulltext_converters' => 'Konwersja indeksu dokumentów', 'fulltext_info' => 'Informacje o indeksie pełnotekstowym', -'global_attributedefinitiongroups' => '', +'global_attributedefinitiongroups' => 'Grupy atrybutów', 'global_attributedefinitions' => 'Definicje atrybutów', 'global_default_keywords' => 'Globalne słowa kluczowe', 'global_document_categories' => 'Kategorie', @@ -613,18 +615,18 @@ URL: [url]', 'groups' => 'Grupy', 'group_approval_summary' => 'Podsumowanie akceptacji dla grupy', 'group_exists' => 'Grupa już istnieje.', -'group_info' => '', +'group_info' => 'Informacje o grupie', 'group_management' => 'Zarządzanie grupami', 'group_members' => 'Członkowie grupy', -'group_receipt_summary' => '', +'group_receipt_summary' => 'Podsumowanie potwierdzienia dla grupy', 'group_review_summary' => 'Podsumowanie opiniowania dla grupy', -'group_revision_summary' => '', +'group_revision_summary' => 'Podsumowanie korekty dla grupy', 'guest_login' => 'Zalogowany jako gość', 'guest_login_disabled' => 'Logowanie dla gościa jest wyłączone.', -'hash' => '', +'hash' => 'hash', 'help' => 'Pomoc', -'home_folder' => '', -'hook_name' => '', +'home_folder' => 'Katalog domowy', +'hook_name' => 'Nazwa zaczepu', 'hourly' => 'Co godzinę', 'hours' => 'godzin', 'hr_HR' => 'Chorwacki', @@ -633,30 +635,31 @@ URL: [url]', 'id' => 'ID', 'identical_version' => 'Nowa wersja jest identyczna z obecną', 'import' => 'Import', -'importfs' => '', -'import_extension' => '', +'importfs' => 'Importuj z systemu plików', +'import_extension' => 'Importuj rozszerzenie', 'import_fs' => 'Import z systemu plików', -'import_fs_warning' => '', +'import_fs_warning' => 'Będzie to działać tylko w przypadku folderów w folderze zrzutu. Operacja rekurencyjnie importuje wszystkie foldery i pliki. Pliki zostaną natychmiast zwolnione.', 'import_users' => '', 'import_users_update' => '', -'include_content' => '', +'include_content' => 'Dołącz treść', 'include_documents' => 'Uwzględnij dokumenty', 'include_subdirectories' => 'Uwzględnij podkatalogi', 'indexing_tasks_in_queue' => 'Zadanie indeksowania w kolejce', -'index_converters' => '', -'index_done' => '', -'index_error' => '', +'index_converters' => 'Bez zmian', +'index_done' => 'Gotowy', +'index_error' => 'Błąd', 'index_folder' => 'Indeksuj folder', -'index_no_content' => '', -'index_pending' => '', +'index_no_content' => 'Nie indeksuje zawartości', +'index_pending' => 'Oczekujące', 'index_waiting' => 'Oczekiwanie', 'individuals' => 'Indywidualni', 'individuals_in_groups' => 'Członkowie grupy', -'info_recipients_tab_not_released' => '', +'info_recipients_tab_not_released' => 'Potwierdzenie odbioru dla tej wersji dokumentu nie jest możliwe, ponieważ wersja nie została wydana.', 'inherited' => 'dziedziczony', 'inherits_access_copy_msg' => 'Kopiuj odziedziczoną listę dostępu', 'inherits_access_empty_msg' => 'Rozpocznij z pustą listą dostępu', 'inherits_access_msg' => 'Dostęp jest dziedziczony.', +'installed_php_extensions' => '', 'internal_error' => 'Błąd wewnętrzny', 'internal_error_exit' => 'Błąd wewnętrzny. Nie można ukończyć zadania.', 'invalid_access_mode' => 'Nieprawidłowy tryb dostępu', @@ -665,9 +668,9 @@ URL: [url]', 'invalid_create_date_end' => 'Nieprawidłowa data końcowa dla tworzenia przedziału czasowego.', 'invalid_create_date_start' => 'Nieprawidłowa data początkowa dla tworzenia przedziału czasowego.', 'invalid_doc_id' => 'Nieprawidłowy identyfikator dokumentu', -'invalid_dropfolder_folder' => '', -'invalid_expiration_date_end' => '', -'invalid_expiration_date_start' => '', +'invalid_dropfolder_folder' => 'Nieprawidłowy folder zrzutu', +'invalid_expiration_date_end' => 'Nieprawidłowa data końcowa zakresu dat utworzenia.', +'invalid_expiration_date_start' => 'Nieprawidłowa data początkowa zakresu dat utworzenia.', 'invalid_file_id' => 'Nieprawidłowy identyfikator pliku', 'invalid_folder_id' => 'Nieprawidłowy identyfikator katalogu', 'invalid_group_id' => 'Nieprawidłowy identyfikator grupy', @@ -681,19 +684,19 @@ URL: [url]', 'invalid_user_id' => 'Nieprawidłowy identyfikator użytkownika', 'invalid_version' => 'Nieprawidłowa wersja dokumentu', 'in_folder' => 'w folderze', -'in_revision' => '', +'in_revision' => 'W korekcie', 'in_workflow' => 'W procesie', 'is_disabled' => 'Konto nieaktywne', 'is_hidden' => 'Nie pokazuj na liście użytkowników', 'it_IT' => 'Włoski', 'january' => 'Styczeń', -'js_form_error' => '', -'js_form_errors' => '', -'js_invalid_email' => '', +'js_form_error' => 'Formularz nadal zawiera # błąd.', +'js_form_errors' => 'Formularz nadal zawiera # błędów.', +'js_invalid_email' => 'The email address is invalid', 'js_no_approval_group' => 'Proszę wybrać grupę odpowiedzalną za akceptację', 'js_no_approval_status' => 'Proszę wybrać status akceptacji', 'js_no_comment' => 'Proszę dodać komentarz', -'js_no_currentpwd' => '', +'js_no_currentpwd' => 'Proszę podać swoje aktualne hasło', 'js_no_email' => 'Wprowadź swój adres email', 'js_no_file' => 'Proszę wybrać plik', 'js_no_keywords' => 'Wybierz jakieś słowa kluczowe', @@ -707,10 +710,10 @@ URL: [url]', 'js_pwd_not_conf' => 'Hasło i potwierdzenie hasła nie są identyczne', 'js_select_user' => 'Proszę wybrać użytkownika', 'js_select_user_or_group' => 'Wybierz użytkownika lub grupę', -'js_unequal_passwords' => '', +'js_unequal_passwords' => 'Hasła nie są równe', 'july' => 'Lipiec', 'june' => 'Czerwiec', -'keep' => '', +'keep' => 'Zachować', 'keep_doc_status' => 'Pozostaw status dokumentu', 'keywords' => 'Słowa kluczowe', 'keywords_loading' => 'Proszę czekać do załadowania lista słów kluczowych…', @@ -720,25 +723,25 @@ URL: [url]', 'lastaccess' => 'Ostatni dostęp', 'last_update' => 'Ostatnia aktualizacja', 'legend' => 'Legenda', -'librarydoc' => '', +'librarydoc' => 'Nie zmieniaj', 'linked_documents' => 'Powiązane dokumenty', 'linked_files' => 'Załączniki', 'linked_to_current_version' => 'Link do obecnej wersji', 'linked_to_document' => 'Połączony z dokumentem', -'linked_to_this_version' => '', +'linked_to_this_version' => 'Powiązany z tą wersją', 'link_alt_updatedocument' => 'Jeśli chcesz wczytać pliki większe niż bieżące maksimum, użyj alternatywnej strony wczytywania.', -'link_document' => '', -'link_to_version' => '', +'link_document' => 'Link do dokumentu', +'link_to_version' => 'Załącz do wersji', 'list_access_rights' => 'Pokaż uprawnienia dostępu', -'list_contains_no_access_docs' => '', -'list_hooks' => '', -'list_tasks' => '', +'list_contains_no_access_docs' => 'Lista zawiera więcej dokumentów, do których nie masz dostępu i nie są wyświetlane.', +'list_hooks' => 'Lista błędów', +'list_tasks' => 'Lista zadań', 'local_file' => 'Lokalny plik', 'locked_by' => 'Zablokowane przez', 'lock_document' => 'Zablokuj', 'lock_message' => 'Ten dokument jest zablokowany przez [username]. Tylko uprawnieni użytkownicy mogą odblokować dokument.', 'lock_status' => 'Status', -'logfile_loading' => '', +'logfile_loading' => 'Proszę czekać, aż plik dziennika zostanie załadowany…', 'login' => 'Login', 'login_disabled_text' => 'Twoje konto jest zablokowane. Prawdopodobnie z powodu zbyt wielu nieudanych prób logowania.', 'login_disabled_title' => 'Konto jest zablokowane', @@ -746,40 +749,41 @@ URL: [url]', 'login_error_title' => 'Błąd logowania', 'login_not_given' => 'Nie podano nazwy użytkownika', 'login_ok' => 'Zalogowano', -'login_restrictions_apply' => '', +'login_restrictions_apply' => 'Logowanie nie powiodło się z powodu ograniczeń', 'logout' => 'Wyloguj', 'log_management' => 'Zarządzanie plikami dziennika', 'lo_LA' => 'Laotański', -'malformed_expiration_date' => '', -'manager' => 'Zarządca', -'manager_of_group' => '', -'mandatory_approvergroups' => '', -'mandatory_approvergroup_no_access' => '', +'malformed_expiration_date' => 'Zniekształcona data ważności', +'manager' => 'Menedżer', +'manager_of_group' => 'Jesteś menedżerem tej grupy', +'mandatory_approvergroups' => 'Obowiązkowe grupy osób zatwierdzających', +'mandatory_approvergroup_no_access' => 'Obowiązkowa grupa osób zatwierdzających \'[group]\' ma niewystarczające prawa dostępu.', 'mandatory_approvers' => 'Wymagani zatwierdzający', -'mandatory_approver_no_access' => '', -'mandatory_reviewergroups' => '', -'mandatory_reviewergroup_no_access' => '', +'mandatory_approver_no_access' => 'Obowiązkowa osoba zatwierdzająca \'[user]\' nie ma wystarczających praw dostępu.', +'mandatory_reviewergroups' => 'Obowiązkowa grupa recenzentów', +'mandatory_reviewergroup_no_access' => 'Obowiązkowa grupa recenzentów \'[group]\' ma niewystarczające prawa dostępu.', 'mandatory_reviewers' => 'Wymagani przeglądający', -'mandatory_reviewer_no_access' => '', +'mandatory_reviewer_no_access' => 'Obowiązkowy recenzent \'[user]\' ma niewystarczające prawa dostępu.', 'march' => 'Marzec', 'max_upload_size' => 'Maksymalny rozmiar pliku', 'may' => 'Maj', -'menu_dropfolder' => '', -'menu_upload_from_dropfolder' => '', +'menu_dropfolder' => 'Folder zrzutu', +'menu_upload_from_dropfolder' => 'Kopiuj do folderu zrzutu', 'mimetype' => 'Typ mime', 'minutes' => 'minut', 'misc' => 'Różne', 'missing_checksum' => 'Brak sumy kontrolnej', -'missing_file' => '', +'missing_file' => 'Brakujący plik', 'missing_filesize' => 'Brakujący rozmiar pliku', -'missing_reception' => '', -'missing_request_object' => '', +'missing_php_extensions' => '', +'missing_reception' => 'Brakuje odbioru', +'missing_request_object' => 'Brak obiektu żądania', 'missing_transition_user_group' => 'Brak użytkownika / grupy dla przejścia', 'monday' => 'Poniedziałek', 'monday_abbr' => 'Pn.', 'monthly' => 'Miesięcznie', 'month_view' => 'Widok miesięczny', -'more_objects_loading' => '', +'more_objects_loading' => 'Ładuję więcej obiektów ...', 'move' => 'Przenieś', 'move_clipboard' => 'Przenieś schowek', 'move_document' => 'Przenieś dokument', @@ -789,10 +793,10 @@ URL: [url]', 'my_transmittals' => 'Moi recenzenci', 'name' => 'Nazwa', 'nb_NO' => 'Norweski', -'needs_correction' => '', +'needs_correction' => 'Wymaga korekty', 'needs_workflow_action' => 'Dokument wymaga uwagi. Proszę sprawdzić kartę workflow.', -'network_drive' => '', -'never' => '', +'network_drive' => 'Dysk sieciowy', +'never' => 'Nowszy', 'new' => 'Nowy', 'new_attrdef' => 'Dodaj definicję atrybutu', 'new_default_keywords' => 'Dodaj słowa kluczowe', @@ -826,11 +830,11 @@ Użytkownik: [username] URL: [url]', 'new_subfolder_email_subject' => '[sitename]: [name] - Nowy folder', 'new_user_image' => 'Nowy obraz', -'next_revision_abbr' => '', +'next_revision_abbr' => 'Następna wersja', 'next_state' => 'Nowy status', 'nl_NL' => 'holenderski', 'no' => 'Nie', -'notification' => '', +'notification' => 'Powiadomienie', 'notify_added_email' => 'Twoje konto zostało dodane do listy powiadomień', 'notify_added_email_body' => 'Dodano do listy powiadomień Nazwa: [name] @@ -850,42 +854,42 @@ URL: [url]', 'no_action' => 'Żadne działanie nie jest wymagane', 'no_approval_needed' => 'Nie ma dokumentów oczekujących na akceptację.', 'no_attached_files' => 'Brak załączonych plików', -'no_backup_dir' => '', -'no_current_version' => '', +'no_backup_dir' => 'Katalog kopii zapasowej nie jest ustawiony', +'no_current_version' => 'Brak aktualnej wersji', 'no_default_keywords' => 'Nie ma słów kluczowych', -'no_docs_checked_out' => '', -'no_docs_expired' => '', +'no_docs_checked_out' => 'Brak dokumentów', +'no_docs_expired' => 'Brak wygasłych dokumentów', 'no_docs_locked' => 'Brak zablokowanych dokumentów.', -'no_docs_needs_correction' => '', -'no_docs_rejected' => '', +'no_docs_needs_correction' => 'Brak dokumentów wymagających korekty', +'no_docs_rejected' => 'Brak dokumentów odrzuconych', 'no_docs_to_approve' => 'Aktualnie nie ma dokumentów wymagających akceptacji.', 'no_docs_to_look_at' => 'Brak dokumentów wymagających uwagi.', -'no_docs_to_receipt' => '', +'no_docs_to_receipt' => 'Brak dokumentów na potwierdzenie', 'no_docs_to_review' => 'Aktualnie nie ma dokumentów oczekujących na recenzję.', -'no_docs_to_revise' => '', -'no_email_or_login' => '', +'no_docs_to_revise' => 'Brak dokumentów oczekyjących na weryfikację', +'no_email_or_login' => 'Login i adres e-mail muszą zostać wprowadzone', 'no_fulltextindex' => 'Brak indeksu pełnotekstowego', 'no_groups' => 'Brak grup', 'no_group_members' => 'Ta grupa nie ma członków', 'no_linked_files' => 'Brak powiązanych dokumentów', 'no_previous_versions' => 'Nie znaleziono poprzednich wersji', -'no_receipt_needed' => '', +'no_receipt_needed' => 'Brak dokumentów w trakcie potwierdzenia', 'no_review_needed' => 'Brak dokumentów w trakcie opiniowania.', -'no_revision_needed' => '', -'no_revision_planed' => '', +'no_revision_needed' => 'Brak dokumentów w trakcie korygowania', +'no_revision_planed' => 'Brak dokumentów w wersji planowanej korekty', 'no_update_cause_locked' => 'Nie możesz zaktualizować tego dokumentu. Proszę skontaktuj się z osobą która go blokuje.', 'no_user_image' => 'Nie znaleziono obrazu', 'no_version_check' => 'Poszukiwanie nowej wersji DeedDMS nie powiodło się! To może być spowodowane ustawieniem opcji \'allow_url_fopen = 0\' w twojej konfiguracji PHP.', -'no_version_modification' => '', -'no_workflow_available' => '', +'no_version_modification' => 'Bez modyfikacji wersji', +'no_workflow_available' => 'Brak przepływu pracy', 'objectcheck' => 'Sprawdź Katalog/Dokument', -'object_check_critical' => '', -'object_check_warning' => '', +'object_check_critical' => 'Błędy krytyczne', +'object_check_warning' => 'Ostrzeżenia', 'obsolete' => 'Zdezaktualizowany', 'october' => 'Październik', 'old' => 'Stary', 'only_jpg_user_images' => 'Wyłącznie pliki typu .jpg mogą być użyte jako obrazy użytkowników', -'order_by_sequence_off' => '', +'order_by_sequence_off' => 'Porządkowanie według sekwencji jest wyłączone w ustawieniach. Jeśli chcesz, aby ten parametr zadziałał, musisz go ponownie włączyć.', 'original_filename' => 'Oryginalna nazwa pliku', 'overall_indexing_progress' => 'Całkowity postęp indeksowania', 'owner' => 'Właściciel', @@ -901,11 +905,11 @@ URL: [url]', 'password' => 'Hasło', 'password_already_used' => 'Hasło jest aktualnie używane', 'password_expiration' => 'Wygaśnięcie hasła', -'password_expiration_text' => 'Twoje hasło wygasło. Proszę ustawić nowe zanim zaczniesz używać LetoDMS.', -'password_expired' => '', -'password_expires_in_days' => '', +'password_expiration_text' => 'Twoje hasło wygasło. Proszę ustawić nowe zanim zaczniesz używać DMS.', +'password_expired' => 'Hasło wygasło', +'password_expires_in_days' => 'Hasło wygasa za %s dni', 'password_forgotten' => 'Zapomniane hasło', -'password_forgotten_email_body' => 'Drogi użytkowniku SeedDMS, +'password_forgotten_email_body' => 'Drogi użytkowniku DMS Fallwork, otrzymaliśmy prośbę o zmianę Twojego hasła. @@ -919,60 +923,61 @@ Jeśli nadal będą problemy z zalogowaniem, prosimy o kontakt z administratorem 'password_forgotten_text' => 'Wypełnij pola poniżej i postępuj wg instrukcji z emaila, który zostanie do Ciebie wysłany.', 'password_forgotten_title' => 'Hasło wysłane', 'password_repeat' => 'Powtórz hasło', -'password_send' => '', -'password_send_text' => '', +'password_send' => 'Hasło wysłane', +'password_send_text' => 'Twoje nowe hasło zostało wysłane na podany adres e-mail, jeśli login i adres e-mail odpowiadają istniejącemu użytkownikowi. Jeśli w ciągu kilku minut nie otrzymasz wiadomości e-mail, upewnij się, że login i e-mail są poprawne, i ponownie uruchom proces.', 'password_strength' => 'Siła hasła', 'password_strength_insuffient' => 'Niewystarczająca siła hasła', 'password_wrong' => 'Złe hasło', 'pdf_converters' => 'Konwertery PDF', -'pending_approvals' => '', -'pending_receipt' => '', -'pending_reviews' => '', -'pending_revision' => '', -'pending_workflows' => '', +'pending_approvals' => 'Oczekuje na zatwierdzenie', +'pending_receipt' => 'Oczekuje na potwierdzenie', +'pending_reviews' => 'Oczekuje na recenzje', +'pending_revision' => 'Oczekuje na korekty', +'pending_workflows' => 'Oczekuje na przepływ pracy', 'personal_default_keywords' => 'Osobiste sława kluczowe', +'php_info' => '', 'pl_PL' => 'Polski', -'possible_substitutes' => '', +'possible_substitutes' => 'Ewentualni zastępcy', 'preset_expires' => 'Wygasa', 'preview' => 'Podgląd', 'preview_converters' => 'Podgląd konwersji dokumentu', -'preview_images' => '', -'preview_markdown' => '', -'preview_pdf' => '', -'preview_plain' => '', +'preview_images' => 'Podgląd obrazu', +'preview_markdown' => 'Oznacz w dół', +'preview_pdf' => 'Podgląd PDF', +'preview_plain' => 'Zwykły podgląd', 'previous_state' => 'Poprzedni stan', 'previous_versions' => 'Poprzednie wersje', 'process' => 'Proces', -'process_without_user_group' => '', +'process_without_user_group' => 'Procesy bez użytkowników/grup', 'pt_BR' => 'Portugalski(BR)', 'quota' => 'Przydział', 'quota_exceeded' => 'Twój limit przydzielonej przestrzeni dyskowej został przekroczony o [bytes].', 'quota_is_disabled' => 'Wsparcie limitów dyskowych jest obecnie wyłączone w ustawieniach. Ustawiony limit dyskowy użytkownika nie będzie działał dopóki wparcie nie zostanie ponownie włączone.', 'quota_warning' => 'Przekroczono użycie dysku o [bytes]. Usuń dokumenty lub poprzednie wersje.', -'receipts_accepted' => '', -'receipts_accepted_latest' => '', -'receipts_not_touched' => '', -'receipts_not_touched_latest' => '', -'receipts_rejected' => '', -'receipts_rejected_latest' => '', -'receipts_without_group' => '', -'receipts_without_user' => '', +'receipts_accepted' => 'Potwierdzenie zaakceptowane', +'receipts_accepted_latest' => 'Potwierdzenie zaakceptowane później', +'receipts_not_touched' => 'Potwierdzenie nie oglądane', +'receipts_not_touched_latest' => 'Potwierdzenie nie oglądane później', +'receipts_rejected' => 'Potwierdzenie odrzucone', +'receipts_rejected_latest' => 'Potwierdzenie odrzucone później', +'receipts_without_group' => 'Potwierdzenie bez grupy', +'receipts_without_user' => 'Potwierdzenie bez użytkownika', 'receipt_deletion_email_body' => '', 'receipt_deletion_email_subject' => '', -'receipt_log' => '', +'receipt_log' => 'Log potwierdzenia', 'receipt_request_email_body' => '', -'receipt_request_email_subject' => '', -'receipt_status' => '', -'receipt_summary' => '', -'receipt_update_failed' => '', +'receipt_request_email_subject' => 'Potwierdzenie', +'receipt_status' => 'Status odbioru', +'receipt_summary' => 'Podsumowanie odbioru', +'receipt_update_failed' => 'Potwierdzenie odbioru nie powiodło się', 'recent_uploads' => 'Najnowsze dodania', -'reception' => '', -'reception_acknowleged' => '', -'reception_noaction' => '', -'reception_rejected' => '', -'recipients' => '', -'recipient_already_removed' => '', -'redraw' => '', +'reception' => 'Przyjęcie', +'reception_acknowleged' => 'Odbiór potwierdzony', +'reception_noaction' => 'Bez akcji', +'reception_rejected' => 'Przyjęcie odrzucone', +'recipients' => 'Odbiorcy', +'recipient_already_removed' => 'Odbiorca został już usunięty lub potwierdzony.', +'redraw' => 'Przerysuj', 'refresh' => 'Odśwież', 'rejected' => 'Odrzucony', 'released' => 'Zatwierdzony', @@ -983,9 +988,9 @@ Dokument: [document] Użytkownik: [username] URL: [url]', 'removed_file_email_subject' => '[sitename]: [document] - Usunięty załącznik', -'removed_recipient' => '', +'removed_recipient' => 'został usunięty z listy odbiorców.', 'removed_reviewer' => 'został usunięty z listy recenzentów.', -'removed_revisor' => '', +'removed_revisor' => 'został usunięty z listy revisors', 'removed_workflow_email_body' => 'Usunięcie procesu z wersji dokumentu Dokument: [name] Wersja: [version] @@ -1000,8 +1005,8 @@ URL: [url]', 'repairing_objects' => 'Naprawa dokumentów i katalogów.', 'request_workflow_action_email_body' => '', 'request_workflow_action_email_subject' => '', -'reset_checkout' => '', -'restrict_access' => '', +'reset_checkout' => 'Zakończ i sprawdź', +'restrict_access' => 'Brak dostępu do', 'results_page' => 'Strona z wynikami', 'return_from_subworkflow' => 'Powróć z sub procesu', 'return_from_subworkflow_email_body' => 'Powrót z sub procesu dokumentu: [name] Wersja: [version] Proces: [workflow] Sub proces: [subworkflow] folderu nadrzędnego: [folder_path] Użytkownik: [username] URL: [url]', @@ -1010,18 +1015,18 @@ URL: [url]', 'reviewers' => 'Recenzenci', 'reviewer_already_assigned' => 'jest już przypisany jako recenzent', 'reviewer_already_removed' => 'został już usunięty z procesu opiniowania lub już wydał swoją opinię', -'reviews_accepted' => '', -'reviews_accepted_latest' => '', -'reviews_not_touched' => '', -'reviews_not_touched_latest' => '', -'reviews_rejected' => '', -'reviews_rejected_latest' => '', -'reviews_without_group' => '', -'reviews_without_user' => '', +'reviews_accepted' => 'Recenzje zaakceptowane', +'reviews_accepted_latest' => 'Recenzje zaakceptowane później', +'reviews_not_touched' => 'Recenzje nie oglądane', +'reviews_not_touched_latest' => 'Recenzje nie oglądane później', +'reviews_rejected' => 'Recenzje odrzucone', +'reviews_rejected_latest' => 'Recenzje odrzucone później', +'reviews_without_group' => 'Recenzje bez grupy', +'reviews_without_user' => 'Recenzje bez użytkownika', 'review_deletion_email' => 'Prośba o recenzję usunięta', 'review_deletion_email_body' => '', 'review_deletion_email_subject' => '', -'review_file' => '', +'review_file' => 'Plik', 'review_group' => 'Grupa recenzentów', 'review_log' => 'Zobacz log', 'review_request_email' => 'Prośba i recenzję', @@ -1033,29 +1038,29 @@ URL: [url]', 'review_submit_email_subject' => '[sitename]: [name] - Napisano recenzję', 'review_summary' => 'Podsumowanie opiniowania', 'review_update_failed' => 'Błąd podczas aktualizowania statusu recenzji. Aktualizacja nie powiodła się.', -'revise_document' => '', -'revise_document_on' => '', -'revisions_accepted' => '', -'revisions_accepted_latest' => '', -'revisions_not_touched' => '', -'revisions_not_touched_latest' => '', -'revisions_pending' => '', -'revisions_pending_latest' => '', -'revisions_rejected' => '', -'revisions_rejected_latest' => '', -'revisions_without_group' => '', -'revisions_without_user' => '', -'revision_date' => '', -'revision_log' => '', +'revise_document' => 'Zweryfikuj dokument', +'revise_document_on' => 'Sprawdź dokument', +'revisions_accepted' => 'Korekty zaakceptowane', +'revisions_accepted_latest' => 'Korekty zaakceptowane później', +'revisions_not_touched' => 'Korekty nie oglądane', +'revisions_not_touched_latest' => 'Korekty nie oglądane później', +'revisions_pending' => 'Korekty oczekujące', +'revisions_pending_latest' => 'Korekty oczekujące później', +'revisions_rejected' => 'Korekty odrzucone', +'revisions_rejected_latest' => 'Korekty odrzucone później', +'revisions_without_group' => 'Korekty bez grupy', +'revisions_without_user' => 'Korekty bez użytkownika', +'revision_date' => 'Data korekty', +'revision_log' => 'Log korekty', 'revision_request_email_body' => '', -'revision_request_email_subject' => '', -'revision_status' => '', +'revision_request_email_subject' => 'Korekta', +'revision_status' => 'Status korekty', 'revision_submit_email_body' => '', -'revision_submit_email_subject' => '', -'revision_summary' => '', -'revisors' => '', -'revisor_already_assigned' => '', -'revisor_already_removed' => '', +'revision_submit_email_subject' => 'Korekta', +'revision_summary' => 'Zbiorcza korekta', +'revisors' => 'Audytor', +'revisor_already_assigned' => 'Użytkownik jest już przypisany jako audytor', +'revisor_already_removed' => 'Audytor został już usunięty z procesu weryfikacji lub już poprawił dokument.', 'rewind_workflow' => 'Przewiń proces', 'rewind_workflow_email_body' => 'Przewinięcie procesu Dokument: [name] @@ -1067,21 +1072,22 @@ URL: [url]', 'rewind_workflow_email_subject' => '[sitename]: [name] - Przewinięto proces', 'rewind_workflow_warning' => 'Jeżeli przewiniesz proces do stanu początkowego, to cały log dla tego dokumentu zostanie usunięty bezpowrotnie.', 'rm_attrdef' => 'Usuń definicję atrybutu', -'rm_attrdefgroup' => '', -'rm_attr_value' => '', +'rm_attrdefgroup' => 'Usuń tę grupę atrybutów', +'rm_attr_value' => 'Usuń wartość', 'rm_default_keyword_category' => 'Usuń kategorię', 'rm_document' => 'Usuń dokument', 'rm_document_category' => 'Usuń kategorię', -'rm_event' => '', +'rm_event' => 'Usuń wydarzenie', 'rm_file' => 'Usuń plik', 'rm_folder' => 'Usuń folder', 'rm_from_clipboard' => 'Usuń ze schowka', 'rm_group' => 'Usuń tą grupę', -'rm_role' => '', -'rm_transmittal' => '', -'rm_transmittalitem' => '', +'rm_role' => 'Usuń tę rolę', +'rm_task' => '', +'rm_transmittal' => 'Usuń przekaz', +'rm_transmittalitem' => 'Usuń element', 'rm_user' => 'Usuń tego użytkownika', -'rm_user_from_processes' => '', +'rm_user_from_processes' => 'Usuń użytkownika z procesów', 'rm_version' => 'Usuń wersję', 'rm_workflow' => 'Usuń proces', 'rm_workflow_action' => 'Usunięcie działania procesu', @@ -1090,10 +1096,10 @@ URL: [url]', 'role' => 'Rola', 'role_admin' => 'Administrator', 'role_guest' => 'Gość', -'role_info' => '', -'role_management' => 'Zarządzanie rolam', -'role_name' => '', -'role_type' => '', +'role_info' => 'Informacja o rolach', +'role_management' => 'Zarządzanie rolami', +'role_name' => 'Nazwa', +'role_type' => 'Typ', 'role_user' => 'Użytkownik', 'ro_RO' => 'Rumuński', 'run_subworkflow' => 'Uruchom podproces', @@ -1110,10 +1116,10 @@ URL: [url]', 'saturday' => 'Sobota', 'saturday_abbr' => 'So', 'save' => 'Zapisz', -'scheduler_class' => '', -'scheduler_class_description' => '', -'scheduler_class_parameter' => '', -'scheduler_class_tasks' => '', +'scheduler_class' => 'Klasa harmonogramu', +'scheduler_class_description' => 'Opis klasy harmonogramu', +'scheduler_class_parameter' => 'Parametr klasy harmonogramu', +'scheduler_class_tasks' => 'Zadania klasy harmonogramu', 'scheduler_task_mgr' => 'Zadania', 'search' => 'Szukaj', 'search_fulltext' => 'Przeszukaj całe teksty', @@ -1132,36 +1138,43 @@ 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' => '', 'selection' => 'Wybierz', -'select_attrdefgrp_show' => '', -'select_attribute_value' => '', +'select_attrdefgrp_show' => 'Wybierz, kiedy pokazać', +'select_attribute_value' => 'Wybierz wartość atrybutu', 'select_category' => 'Kliknij by wybrać kategorię', 'select_group' => 'Wybierz grupę', 'select_groups' => 'Kliknij by wybrać grupy', 'select_grp_approvers' => 'Kliknij by wybrać grupę zatwierdzającą', 'select_grp_ind_approvers' => 'Kliknij by wybrać grupę', -'select_grp_ind_notification' => '', +'select_grp_ind_notification' => 'Kliknij by wybrać grupę', 'select_grp_ind_recipients' => 'Kliknij by wybrać grupę', 'select_grp_ind_reviewers' => 'Kliknij by wybrać grupę', -'select_grp_ind_revisors' => '', +'select_grp_ind_revisors' => 'Kliknij by wybrać grupę', 'select_grp_notification' => 'Kliknij, aby wybrać grupowe powiadomienia', 'select_grp_recipients' => 'Kliknij by wybrać grupę odbiorców', 'select_grp_reviewers' => 'Kliknij by wybrać grupę recenzentów', -'select_grp_revisors' => '', +'select_grp_revisors' => 'Kliknij by wybrać grupę audytorów', 'select_ind_approvers' => 'Kliknij by wybrać zatwierdzającego', 'select_ind_notification' => 'Kliknij, aby wybrać indywidualne powiadomienia', 'select_ind_recipients' => 'Kliknij by wybrać indywidualnych odbiorców', 'select_ind_reviewers' => 'Kliknij by wybrać recenzenta', -'select_ind_revisors' => '', +'select_ind_revisors' => 'Kliknij by wybrać audytora', 'select_one' => 'Wybierz', 'select_user' => 'Wybierz użytkownika', 'select_users' => 'Kliknij by wybrać użytkowników', 'select_value' => 'Wybrać wartość', 'select_workflow' => 'Wybierz proces', -'send_email' => '', -'send_login_data' => '', -'send_login_data_body' => '', -'send_login_data_subject' => '', +'send_email' => 'Wyślij e-mail', +'send_login_data' => 'Wyślij dane logowania', +'send_login_data_body' => 'Dane logowania + +Login: [login] +Name: [username] + +[comment]', +'send_login_data_subject' => '[sitename]: [login] - Twoje dane logowania', 'send_test_mail' => 'Wyślij wiadomość testową', 'september' => 'Wrzesień', 'sequence' => 'Kolejność', @@ -1169,37 +1182,43 @@ URL: [url]', 'seq_end' => 'Na końcu', 'seq_keep' => 'Na tej samej pozycji', 'seq_start' => 'Na początku', -'sessions' => '', -'setDateFromFile' => '', -'setDateFromFolder' => '', +'sessions' => 'Sesja', +'setDateFromFile' => 'Przejmij datę z importowanego pliku', +'setDateFromFolder' => 'Przejmij datę z importowanego folderu', 'settings' => 'Ustawienia', 'settings_activate_module' => 'Aktywuj moduł', 'settings_activate_php_extension' => 'Aktywuj rozszerzenie PHP', 'settings_adminIP' => 'Adres IP Administratora', 'settings_adminIP_desc' => 'Wprowadzenie tego adresu IP spowoduje, że administrator będzie mógł się logować tylko z tego adresu. Zostaw puste aby tego nie kontrolować. Uwaga! Działa tylko z autentykacją lokalną (nie w LDAP-ie)', 'settings_Advanced' => 'Zaawansowane', -'settings_advancedAcl' => '', -'settings_advancedAcl_desc' => '', -'settings_allowChangeRevAppInProcess' => '', -'settings_allowChangeRevAppInProcess_desc' => '', -'settings_allowReviewerOnly' => '', -'settings_allowReviewerOnly_desc' => '', +'settings_advancedAcl' => 'Zaawansowana kontrola dostępu', +'settings_advancedAcl_desc' => 'Zaawansowana kontrola dostępu pozwoli włączyć / wyłączyć niektóre moduły oprogramowania. Nie można go używać do praw dostępu do dokumentów i folderów.', +'settings_allowChangeRevAppInProcess' => 'Zezwalaj na zmianę recenzenta/osoby zatwierdzającej po rozpoczęciu procesu', +'settings_allowChangeRevAppInProcess_desc' => 'Domyślnie recenzenci i osoby zatwierdzające nie mogą być już zmieniane po przesłaniu recenzji lub zatwierdzenia. Ta opcja umożliwia administratorom to zrobić tak długo, jak długo dokument nie zostanie wydany lub odrzucony.', +'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_Authentication' => 'Ustawienia uwierzytelniania', 'settings_autoLoginUser' => 'Automatyczne logowanie', -'settings_autoLoginUser_desc' => '', +'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.', 'settings_available_languages' => 'Dostępne języki', 'settings_available_languages_desc' => 'Tylko wybrane języki zostaną załadowane i będą widoczne w kontrolce wyboru języka. Domyślny język zawsze jest ładowany.', 'settings_backupDir' => 'Lokalizacja kopii zapasowej', -'settings_backupDir_desc' => '', +'settings_backupDir_desc' => 'Katalog, w którym narzędzie do tworzenia kopii zapasowych zapisuje kopie zapasowe. Jeśli ten katalog nie jest ustawiony lub nie można uzyskać do niego dostępu, kopie zapasowe zostaną zapisane w katalogu zawartości.', 'settings_cacheDir' => 'Folder bufora', 'settings_cacheDir_desc' => 'Miejsce przechowywania obrazków podglądu (najlepiej wybrać katalog nie dostępny bezpośrednio dla web-serwera).', 'settings_Calendar' => 'Ustawienia kalendarza', 'settings_calendarDefaultView' => 'Domyślny widok kalendarza', 'settings_calendarDefaultView_desc' => 'Domyślny widok kalendarza', 'settings_cannot_disable' => 'Plik ENABLE_INSTALL_TOOL nie może zostać usunięty', -'settings_checkOutDir' => '', -'settings_checkOutDir_desc' => '', +'settings_checkOutDir' => 'Katalog wyewidencjonowanych dokumentów', +'settings_checkOutDir_desc' => 'Jest to katalog, w którym najnowsza zawartość dokumentu jest kopiowana, jeśli dokument jest wyewidencjonowany. Jeśli ten katalog będzie dostępny dla użytkowników, mogą edytować plik i zaewidencjonować go ponownie po zakończeniu.', 'settings_cmdTimeout' => 'Przekroczony czas wykonania zewnętrznego polecenia', 'settings_cmdTimeout_desc' => 'Ten czas w sekundach określa kiedy zewnętrzne polecenie (np. do tworzenia indeksu) zostanie przerwany', 'settings_contentDir' => 'Katalog treści', @@ -1212,8 +1231,8 @@ URL: [url]', 'settings_cookieLifetime_desc' => 'Czas życia pliku cookie w sekundach. Jeśli wartość zostanie ustawione na 0, plik cookie zostanie usunięte po zamknięciu przeglądarki.', 'settings_coreDir' => 'Katalog Core letoDMS', 'settings_coreDir_desc' => 'Ścieżka do LetoDMS_Core (opcjonalnie)', -'settings_createCheckOutDir' => '', -'settings_createCheckOutDir_desc' => '', +'settings_createCheckOutDir' => 'Tworzenie katalogu wyewidencjonowania', +'settings_createCheckOutDir_desc' => 'Utwórz katalog do wyewidencjonowania, jeśli nie istnieje', 'settings_createdatabase' => 'Utwórz tabele basy danych', 'settings_createdirectory' => 'Utwórz katalog', 'settings_currentvalue' => 'Bieżąca wartość', @@ -1231,30 +1250,30 @@ URL: [url]', 'settings_dbVersion' => 'Schemat bazy danych jest za stary', 'settings_defaultAccessDocs' => 'Domyślny dostęp do nowych dokumentów', 'settings_defaultAccessDocs_desc' => 'Kiedy zostanie utworzony nowy dokument, będzie to domyślne prawo dostępu.', -'settings_defaultDocPosition' => '', -'settings_defaultDocPosition_desc' => '', +'settings_defaultDocPosition' => 'Położenie dokumentu podczas tworzenia', +'settings_defaultDocPosition_desc' => 'Jest to domyślna pozycja w folderze podczas tworzenia dokumentu.', 'settings_defaultDocPosition_val_end' => 'koniec', 'settings_defaultDocPosition_val_start' => 'początek', 'settings_defaultSearchMethod' => 'Domyślna metoda wyszukiwania', -'settings_defaultSearchMethod_desc' => '', +'settings_defaultSearchMethod_desc' => 'Domyślna metoda wyszukiwania, gdy wyszukiwanie jest uruchamiane przez formularz wyszukiwania w menu głównym.', 'settings_defaultSearchMethod_valdatabase' => 'baza danych', -'settings_defaultSearchMethod_valfulltext' => 'pewłnotekstowe', +'settings_defaultSearchMethod_valfulltext' => 'pełnotekstowe', 'settings_delete_install_folder' => 'Aby móc używać LetoDMS, musisz usunąć plik ENABLE_INSTALL_TOOL znajdujący się w katalogu konfiguracyjnym', 'settings_disableSelfEdit' => 'Wyłącz auto edycję', 'settings_disableSelfEdit_desc' => 'Jeśli zaznaczone, użytkownik nie może zmieniać własnych danych', 'settings_disable_install' => 'Usuń plik ENABLE_INSTALL_TOOL jeśli to możliwe', 'settings_Display' => 'Ustawienia wyświetlania', -'settings_dropFolderDir' => 'Katalog dla folderu rozwijanego', +'settings_dropFolderDir' => 'Katalog dla folderu zrzutu', 'settings_dropFolderDir_desc' => 'Ten katalog służy do kopiowania plików, przeznaczonych do zaimportowania, bezpośrednio do serwera i z pominięciem przeglądarki. W tym katalogu muszą się znajdować podfoldery dla wszystkich użytkowników, którzy posiadają uprawnienia do tego typu importu.', 'settings_Edition' => 'Ustawienia edycji', 'settings_editOnlineFileTypes' => 'Edytuj typy plików online', 'settings_editOnlineFileTypes_desc' => 'Pliki z następującymi rozszerzeniami mogą być edytowane online (używaj tylko małych liter)', -'settings_enable2FactorAuthentication' => '', -'settings_enable2FactorAuthentication_desc' => '', -'settings_enableAcknowledgeWorkflow' => '', -'settings_enableAcknowledgeWorkflow_desc' => '', -'settings_enableAdminReceipt' => '', -'settings_enableAdminReceipt_desc' => '', +'settings_enable2FactorAuthentication' => 'Włączanie uwierzytelniania dwuskładnikowego', +'settings_enable2FactorAuthentication_desc' => 'Włącz/wyłącz uwierzytelnianie dwuskładnikowe. Użytkownicy będą potrzebować Google Authenticator na swoim telefonie komórkowym.', +'settings_enableAcknowledgeWorkflow' => 'Włączanie potwierdzenia przepływu pracy', +'settings_enableAcknowledgeWorkflow_desc' => 'Włączanie potwierdzenia przepływu pracy', +'settings_enableAdminReceipt' => 'Zezwalaj na odbieranie dokumentów dla administratorów', +'settings_enableAdminReceipt_desc' => 'Włącz tę opcję, jeśli chcesz, aby administratorzy były wymienieni jako adresaci dokumentów.', 'settings_enableAdminRevApp' => 'Dołącz Administratora do recenzji/rewizji', 'settings_enableAdminRevApp_desc' => 'Odznacz aby usunąć Administratora z listy zatwierdzających/recenzentów', 'settings_enableCalendar' => 'Włącz kalendarz', @@ -1263,30 +1282,30 @@ URL: [url]', 'settings_enableClipboard_desc' => 'Włącz/wyłącz schowek', 'settings_enableConverting' => 'Włącz konwertowanie', 'settings_enableConverting_desc' => 'Włącz/Wyłącz konwertowanie plików', -'settings_enableDebugMode' => '', -'settings_enableDebugMode_desc' => '', -'settings_enableDropFolderList' => '', -'settings_enableDropFolderList_desc' => '', -'settings_enableDropUpload' => '', -'settings_enableDropUpload_desc' => '', +'settings_enableDebugMode' => 'Włączenie debugowania', +'settings_enableDebugMode_desc' => 'Włącz to, aby włączyć tryb debugowania, który dodaje nowe menu w narzędziach administracyjnych', +'settings_enableDropFolderList' => 'Włącz listę plików w folderze zrzutu w menu', +'settings_enableDropFolderList_desc' => 'Włącz listę plików w folderze zrzutu. Lista jest wyświetlana w menu głównym.', +'settings_enableDropUpload' => 'Włącz szybkie przesyłanie', +'settings_enableDropUpload_desc' => 'Włącz/Wyłącz obszar upuszczania na stronie "Wyświetl folder" w celu przesyłania plików przez Drag&Drop.', 'settings_enableDuplicateDocNames' => 'Zezwalaj na zduplikowane nazwy dokumentów', 'settings_enableDuplicateDocNames_desc' => 'Zezwala na tworzenie w folderze dokumentów o tej samej nazwie.', 'settings_enableDuplicateSubFolderNames' => 'Zezwól na duplikaty nazw podfolderów', 'settings_enableDuplicateSubFolderNames_desc' => 'Zezwala na zduplikowane nazwy podfolderów w folderze', 'settings_enableEmail' => 'Włącz powiadomienia e-mail', 'settings_enableEmail_desc' => 'Włącz/Wyłącz automatyczne powiadomienia drogą mailową', -'settings_enableFilterReceipt' => '', -'settings_enableFilterReceipt_desc' => '', +'settings_enableFilterReceipt' => 'Odfiltruj właściciela, recenzenta, ... z listy odbioru', +'settings_enableFilterReceipt_desc' => 'Włącz, aby odfiltrować niektórych adresatów z listy odbioru, jeśli wybrano członków grupy.', 'settings_enableFolderTree' => 'Pokaż drzewo katalogów', 'settings_enableFolderTree_desc' => 'Odznacz aby nie pokazywać drzewa katalogów', 'settings_enableFullSearch' => 'Włącz przeszukiwanie pełnotekstowe', 'settings_enableFullSearch_desc' => 'Włącz przeszukiwanie pełnotekstowe', 'settings_enableGuestAutoLogin' => 'Włącz automatyczne logowanie dla gości', -'settings_enableGuestAutoLogin_desc' => '', +'settings_enableGuestAutoLogin_desc' => 'Włącza automatyczne logowanie dla gości', 'settings_enableGuestLogin' => 'Pozwól na logowanie gościa', 'settings_enableGuestLogin_desc' => 'Jeśli chcesz dowolnej osobie zalogować się jako gość, zaznacz tę opcję. Uwaga: logowanie gościa powinno być używane wyłącznie w zaufanym środowisku.', 'settings_enableHelp' => 'Włącz pomoc', -'settings_enableHelp_desc' => '', +'settings_enableHelp_desc' => 'Włączenie pomocy w menu', 'settings_enableLanguageSelector' => 'Włącz wybór języka', 'settings_enableLanguageSelector_desc' => 'Pokaż selektor języka dla interfejsu użytkownika po zalogowaniu To nie ma wpływu na wybór języka na stronie logowania.', 'settings_enableLargeFileUpload' => 'Zezwól na wczytywanie dużych plików', @@ -1294,43 +1313,43 @@ URL: [url]', 'settings_enableMenuTasks' => 'Włącz listę zadań w menu', 'settings_enableMenuTasks_desc' => 'Włącza /Wyłącza pozycję w menu w której znajdują się wszystkie zadania dla użytkownika. Zawiera dokumenty, które potrzebują być ocenione, zatwierdzone, i.t.d.', 'settings_enableMultiUpload' => 'Zezwól na wysyłanie wielu plików', -'settings_enableMultiUpload_desc' => '', +'settings_enableMultiUpload_desc' => 'Zezwolenie na wysyłanie wielu plików', 'settings_enableNotificationAppRev' => 'Włącz/Wyłącz powiadomienia dla zatwierdzających/recenzentów', 'settings_enableNotificationAppRev_desc' => 'Zaznacz aby wysyłać powiadomienia do zatwierdzających i recenzentów kiedy pojawi się nowa wersja dokumentu', -'settings_enableNotificationWorkflow' => '', -'settings_enableNotificationWorkflow_desc' => '', +'settings_enableNotificationWorkflow' => 'Wysyłanie powiadomień do użytkowników w następnym przejściu przepływu pracy', +'settings_enableNotificationWorkflow_desc' => 'Jeśli ta opcja jest włączona, użytkownicy i grupy, które muszą podjąć działania w następnym przejściu przepływu pracy, zostaną powiadomieni. Nawet jeśli nie dodali powiadomienia o dokumencie.', 'settings_enableOwnerNotification' => 'Włącz domyślne powiadamianie właściciela', 'settings_enableOwnerNotification_desc' => 'Zaznacz aby właściciel pliku był powiadamiany zmianach w pliku.', -'settings_enableOwnerReceipt' => '', -'settings_enableOwnerReceipt_desc' => '', +'settings_enableOwnerReceipt' => 'Zezwalaj na odbiór dokumentów przez właściciela', +'settings_enableOwnerReceipt_desc' => 'Włącz tę opcję, jeśli chcesz, aby właściciel dokumentu był wyświetlany jako adresat.', 'settings_enableOwnerRevApp' => 'Pozwól przeglądać/zatwierdzenia właściciela', 'settings_enableOwnerRevApp_desc' => 'Włącz tę opcję jeżeli właściciel dokumentu powinien być wymieniony jako zatwierdzających/recenzentów oraz dla przepływu procesu', 'settings_enablePasswordForgotten' => 'Włącz odzyskiwanie hasła po jego zapomnieniu', 'settings_enablePasswordForgotten_desc' => 'Jeśli chcesz zezwolić użytkownikom na zmianę własnego hasła i wysyłanie go emailem, zaznacz tę opcję.', -'settings_enableReceiptReject' => '', -'settings_enableReceiptReject_desc' => '', -'settings_enableReceiptWorkflow' => '', -'settings_enableReceiptWorkflow_desc' => '', +'settings_enableReceiptReject' => 'Umożliwianie odrzucania przyjęć', +'settings_enableReceiptReject_desc' => 'Włącz, aby włączyć odrzucenie przyjęć.', +'settings_enableReceiptWorkflow' => 'Włącz potwierdzenie odbioru dokumentu', +'settings_enableReceiptWorkflow_desc' => 'Włącz, aby włączyć przepływ pracy, aby potwierdzić odbiór dokumentu.', 'settings_enableRecursiveCount' => 'Włącz licznik rekurencji dokumentu/folderu', 'settings_enableRecursiveCount_desc' => 'Jeżeli jest włączone, to liczba dokumentów i folderów w widoku będzie ustalona poprzez zliczenie wszystkich obiektów przez rekurencyjnie przetwarzane foldery i policzenia tych dokumentów i folderów do których użytkownik ma dostęp', -'settings_enableRevisionOneVoteReject' => '', -'settings_enableRevisionOneVoteReject_desc' => '', -'settings_enableRevisionOnVoteReject' => '', -'settings_enableRevisionOnVoteReject_desc' => '', -'settings_enableRevisionWorkflow' => '', -'settings_enableRevisionWorkflow_desc' => '', -'settings_enableSelfReceipt' => '', -'settings_enableSelfReceipt_desc' => '', +'settings_enableRevisionOneVoteReject' => 'Odrzuć przez jedną korektę', +'settings_enableRevisionOneVoteReject_desc' => 'Jeśli ta opcja jest włączona, stan dokumentu zostanie ustawiony na "wymaga korekty", gdy pierwsza korekta odrzuci dokument. Jeśli jest wyłączona, stan dokumentu nie ulegnie zmianie, dopóki wszystkie zmiany nie zakończą ich rewizji.', +'settings_enableRevisionOnVoteReject' => 'Odrzuć przez korektę', +'settings_enableRevisionOnVoteReject_desc' => 'Odrzuć przez korektę', +'settings_enableRevisionWorkflow' => 'Włączanie korekty dokumentów', +'settings_enableRevisionWorkflow_desc' => 'Włącz, aby móc uruchomić przepływ pracy w celu zmiany dokumentu po określonym czasie.', +'settings_enableSelfReceipt' => 'Zezwalaj na odbiór dokumentów dla zalogowanego użytkownika', +'settings_enableSelfReceipt_desc' => 'Włącz tę opcję, jeśli chcesz, aby aktualnie zalogowany użytkownik był wymieniony jako adresat dokumentu.', 'settings_enableSelfRevApp' => 'Pozwalaj przeglądać/zatwierdzać dla zalogowanych użytkowników', 'settings_enableSelfRevApp_desc' => 'Włącz tę opcję jeżeli zalogowany użytkownik ma prawo do recenzowania/zatwierdzania oraz do przepływu procesu', 'settings_enableSessionList' => 'Włącz listę użytkowników online w menu', 'settings_enableSessionList_desc' => 'Włącza listę obecnie zalogowanych użytkowników w menu.', 'settings_enableThemeSelector' => 'Wybór motywu', -'settings_enableThemeSelector_desc' => '', -'settings_enableUpdateReceipt' => '', -'settings_enableUpdateReceipt_desc' => '', -'settings_enableUpdateRevApp' => '', -'settings_enableUpdateRevApp_desc' => '', +'settings_enableThemeSelector_desc' => 'Włącza/wyłącza wybór motywu na stronie logowania.', +'settings_enableUpdateReceipt' => 'Zezwalaj na edycję istniejącego odbioru', +'settings_enableUpdateReceipt_desc' => 'Włącz to, jeśli użytkownik, który dokonał odbioru, może zmienić decyzję.', +'settings_enableUpdateRevApp' => 'Zezwól na edycję zamykania recenzji / zatwierdzenia', +'settings_enableUpdateRevApp_desc' => 'Włącz to, jeśli użytkownik, który dokonał przeglądu / zatwierdzenia, może zmienić decyzję, dopóki bieżący krok przepływu pracy nie zostanie zakończony.', 'settings_enableUserImage' => 'Włącz obrazy użytkowników', 'settings_enableUserImage_desc' => 'Zezwól na indywidualne obrazki użytkowników', 'settings_enableUsersView' => 'Włącz podgląd użytkownika', @@ -1339,10 +1358,10 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Włącz/Wyłącz możliwość kasowania poprzednich wersji plików przez zwykłych użytkowników. Administrator może w każdej chwili usunąć stare wersjie.', 'settings_enableVersionModification' => 'Zezwól na modyfikowanie wersji', 'settings_enableVersionModification_desc' => 'Włącz/Wyłącz możliwość modyfikacji wersji dokumentów przez zwykłych użytkowników po wczytaniu pliku. Administrator może w każdej chwili zmienić wersję wczytanego pliku.', -'settings_enableWebdavReplaceDoc' => '', -'settings_enableWebdavReplaceDoc_desc' => '', -'settings_enableXsendfile' => '', -'settings_enableXsendfile_desc' => '', +'settings_enableWebdavReplaceDoc' => 'Zamień dokument podczas zapisywania', +'settings_enableWebdavReplaceDoc_desc' => 'Jeśli ta opcja jest włączona, zapisanie nowej wersji dokumentu zastąpi stary dokument zamiast tworzenia nowej wersji. Będzie to miało zastosowanie tylko wtedy, gdy użytkownik, mimetype i nazwa pliku są równe ostatniej wersji. Może to być przydatne, gdy aplikacje automatycznie zapisują dokument w ustalonych odstępach czasu.', +'settings_enableXsendfile' => 'Użyj modułu apache xsendfile', +'settings_enableXsendfile_desc' => 'Jeśli ta opcja jest ustawiona i zainstalowany jest moduł apache xsendfile, będzie on używany do dostarczania obrazów.', 'settings_encryptionKey' => 'Klucz szyfrujący', 'settings_encryptionKey_desc' => 'Ten ciąg znaków jest używany do tworzenia unikatowego identyfikatora dodawanego jako ukryte pole do formularza aby zapobiec atakom CSRF.', 'settings_error' => 'Błąd', @@ -1358,7 +1377,7 @@ URL: [url]', 'settings_firstDayOfWeek_desc' => 'Pierwszy dzień tygodnia', 'settings_footNote' => 'Treść stopki', 'settings_footNote_desc' => 'Wiadomość wyświetlana na dole każdej strony', -'settings_fullSearchEngine' => '', +'settings_fullSearchEngine' => 'Wyszukiwanie pełnotekstowe', 'settings_fullSearchEngine_desc' => 'Ustaw metodę używaną do pełnotekstowego wyszukiwania', 'settings_fullSearchEngine_vallucene' => 'Zend Lucene', 'settings_fullSearchEngine_valsqlitefts' => 'SQLiteFTS', @@ -1367,11 +1386,11 @@ URL: [url]', 'settings_httpRoot' => 'Http Root', 'settings_httpRoot_desc' => 'Relatywna ścieżka w URL, część za domeną. Nie dołączaj przedrostka http:// ani nazwy hosta. Np. Jeśli cały URL to http://www.example.com/letodms/, wpisz \'/letodms/\'. Jeśli URL to http://www.example.com/, set \'/\'', 'settings_incItemsPerPage' => 'Liczba wpisów załadowana na dole strony', -'settings_incItemsPerPage_desc' => '', -'settings_initialDocumentStatus' => '', -'settings_initialDocumentStatus_desc' => '', -'settings_initialDocumentStatus_draft' => '', -'settings_initialDocumentStatus_released' => '', +'settings_incItemsPerPage_desc' => 'Jeśli liczba folderów i dokumentów jest ograniczona, spowoduje to ustawienie liczby dodatkowo załadowanych obiektów podczas przewijania w dół do dołu strony folderu widoku. Ustawienie tego na 0 spowoduje załadowanie takiej samej liczby obiektów, jaka została załadowana początkowo.', +'settings_initialDocumentStatus' => 'Stan dokumentu początkowego', +'settings_initialDocumentStatus_desc' => 'Ten stan zostanie ustawiony po dodaniu dokumentu.', +'settings_initialDocumentStatus_draft' => 'Projekt', +'settings_initialDocumentStatus_released' => 'Wydany', '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\'', @@ -1382,8 +1401,8 @@ URL: [url]', 'settings_install_zendframework' => 'Zainstaluj Zend Framework, jeśli zamierzasz używać przeszukiwania pełnotekstowego', 'settings_language' => 'Domyślny język', 'settings_language_desc' => 'Domyślny język (nazwa podkatalogu w katalogu "languages")', -'settings_libraryFolder' => '', -'settings_libraryFolder_desc' => '', +'settings_libraryFolder' => 'Folder Biblioteka', +'settings_libraryFolder_desc' => 'Folder, w którym można kopiować dokumenty w celu utworzenia nowych dokumentów.', 'settings_logFileEnable' => 'Włącz plik dziennika', 'settings_logFileEnable_desc' => 'Włącz/Wyłącz plik dziennika', 'settings_logFileRotation' => 'Rotowanie pliku dziennika', @@ -1399,24 +1418,24 @@ URL: [url]', 'settings_maxExecutionTime' => 'Maksymalny czas wykonywania (s)', 'settings_maxExecutionTime_desc' => 'Ustawia maksymalny czas, liczony w sekundach, jaki ma na wykonanie skrypt zanim zostanie zakończony.', 'settings_maxItemsPerPage' => 'Maksymalna liczba wpisów na stronę', -'settings_maxItemsPerPage_desc' => '', +'settings_maxItemsPerPage_desc' => 'Ogranicza liczbę folderów i dokumentów wyświetlanych na stronie folderu widoku. Kolejne obiekty zostaną załadowane podczas przewijania do końca strony. Ustaw na 0, aby zawsze wyświetlać wszystkie obiekty.', 'settings_maxRecursiveCount' => 'Max. liczba rekurencji dokumentów/folderów', 'settings_maxRecursiveCount_desc' => 'Jest to maksymalna liczba dokumentów i folderów, które będą sprawdzane pod kątem praw dostępu, gdy włączone jest rekurencyjnie liczenie obiektów. Jeżeli liczba ta zostanie przekroczona to ilości dokumentów i folderów w widoku zostaną oszacowane.', -'settings_maxSizeForFullText' => '', -'settings_maxSizeForFullText_desc' => '', +'settings_maxSizeForFullText' => 'Maksymalny rozmiar plików do natychmiastowego indeksowania', +'settings_maxSizeForFullText_desc' => 'Wszystkie nowe wersje dokumentu mniejsze niż skonfigurowany rozmiar zostaną w pełni zindeksowane zaraz po przesłaniu. We wszystkich innych przypadkach tylko metadane będą indeksowane.', 'settings_maxUploadSize' => 'Maksymalny rozmiar wysyłanych plików', 'settings_maxUploadSize_desc' => 'To jest maksymalny rozmiar dla nadesłanych plików. To ustawienie wpływa również na wersje dokumentu i załączniki.', 'settings_more_settings' => 'Wykonaj dalszą konfigurację. Domyślny login/hasło: admin/admin', -'settings_noDocumentFormFields' => '', -'settings_noDocumentFormFields_desc' => '', +'settings_noDocumentFormFields' => 'Nie pokazuj tych pól', +'settings_noDocumentFormFields_desc' => 'Te pola nie będą wyświetlane podczas dodawania lub edycji dokumentu. Istniejące wartości zostaną zachowane.', 'settings_notfound' => 'Nie znaleziono', 'settings_Notification' => 'Ustawienia powiadomień', 'settings_notwritable' => 'Konfiguracja nie może zostać zapisana ponieważ plik konfiguracyjny nie jest zapisywalny.', 'settings_no_content_dir' => 'Katalog treści', -'settings_onePageMode' => '', -'settings_onePageMode_desc' => '', +'settings_onePageMode' => 'Tryb jednostronny', +'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' => '', +'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_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', @@ -1436,30 +1455,30 @@ URL: [url]', 'settings_php_gd2' => 'Rozszerzenie PHP: php_gd2', 'settings_php_mbstring' => 'Rozszerzenie PHP: php_mbstring', 'settings_php_version' => 'Wersja PHP', -'settings_presetExpirationDate' => '', -'settings_presetExpirationDate_desc' => '', +'settings_presetExpirationDate' => 'Wstępnie ustawiona data ważności', +'settings_presetExpirationDate_desc' => 'Wszystkie nowe przesłane dokumenty będą miały datę ważności ustawioną na tę wartość. Wprowadzoną datę można określić w sposób zrozumiały dla funkcji strtotime () PHP, np. +5 weeks.', 'settings_previewWidthDetail' => 'Szerokość obrazka podglądu (szczegóły)', 'settings_previewWidthDetail_desc' => 'Szerokość obrazka podglądu na stronie szczegółów', -'settings_previewWidthDropFolderList' => '', -'settings_previewWidthDropFolderList_desc' => '', +'settings_previewWidthDropFolderList' => 'Szerokość obrazów podglądu (lista folderów)', +'settings_previewWidthDropFolderList_desc' => 'Szerokość obrazów podglądu wyświetlanych na liście podczas wybierania pliku z folderu rozwijanego.', 'settings_previewWidthList' => 'Szerokość obrazka podglądu (lista)', 'settings_previewWidthList_desc' => 'Szerokość podglądu obrazu pokazanego na liście', -'settings_previewWidthMenuList' => '', -'settings_previewWidthMenuList_desc' => '', +'settings_previewWidthMenuList' => 'Szerokość obrazów podglądu (lista menu)', +'settings_previewWidthMenuList_desc' => 'Szerokość obrazów podglądu wyświetlanych jako elementy w menu rozwijanego folderu.', 'settings_printDisclaimer' => 'Wyświetlaj Zrzeczenie się', 'settings_printDisclaimer_desc' => 'Zaznaczenie tej opcji spowoduje, że na dole strony będzie wyświetlany komunikat zrzeczenia się zawarty w pliku lang.inc.', -'settings_proxyUPassword' => '', -'settings_proxyUPassword_desc' => '', -'settings_proxyUrl' => '', -'settings_proxyUrl_desc' => '', -'settings_proxyUser' => '', -'settings_proxyUser_desc' => '', +'settings_proxyUPassword' => 'Hasło dla serwera proxy', +'settings_proxyUPassword_desc' => 'Hasło do uwierzytelniania na serwerze proxy.', +'settings_proxyUrl' => 'Adres URL serwera proxy', +'settings_proxyUrl_desc' => 'Adres URL serwera proxy używanego do uzyskiwania dostępu do repozytorium rozszerzeń.', +'settings_proxyUser' => 'Nazwa użytkownika używana dla serwera proxy', +'settings_proxyUser_desc' => 'Nazwa użytkownika używana do uwierzytelniania za pomocą serwera proxy', 'settings_quota' => 'Przydział dysku użytkownika', 'settings_quota_desc' => 'Maksymalna liczba bajtów jaką użytkownik może wykorzystać na dysku. Ustaw na 0 dla nieograniczonej przestrzeni dyskowej. Wartość ta może być zastąpiona dla każdego zastosowania w swoim profilu.', -'settings_removeFromDropFolder' => '', -'settings_removeFromDropFolder_desc' => '', -'settings_repositoryUrl' => '', -'settings_repositoryUrl_desc' => '', +'settings_removeFromDropFolder' => 'Usuwanie pliku z folderu zrzutu po pomyślnym przesłaniu', +'settings_removeFromDropFolder_desc' => 'Włącz to, jeśli plik pobrany z folderu zrzutu zostanie usunięty po pomyślnym przesłaniu.', +'settings_repositoryUrl' => 'Adres URL repozytorium', +'settings_repositoryUrl_desc' => 'Adres URL repozytorium rozszerzeń', 'settings_restricted' => 'Ograniczony dostęp', 'settings_restricted_desc' => 'Mogą zalogować się tylko ci użytkownicy, którzy mają swoje wpisy w lokalnej bazie danych (niezależnie od pomyślnego uwierzytelnienia w LDAP)', 'settings_rootDir' => 'Katalog główny', @@ -1469,11 +1488,11 @@ URL: [url]', 'settings_SaveError' => 'Błąd zapisu pliku konfiguracyjnego', 'settings_Server' => 'Ustawienia serwera', 'settings_showFullPreview' => 'Pokaż cały dokument', -'settings_showFullPreview_desc' => '', +'settings_showFullPreview_desc' => 'Włącz/wyłącz pełny podgląd dokumentu na stronie szczegółów, jeśli przeglądarka jest w stanie to zrobić.', 'settings_showMissingTranslations' => 'Pokaż brakujące tłumaczenia', -'settings_showMissingTranslations_desc' => '', -'settings_showSingleSearchHit' => '', -'settings_showSingleSearchHit_desc' => '', +'settings_showMissingTranslations_desc' => 'Wyświetl wszystkie brakujące tłumaczenia na stronie u dołu strony. Zalogowany użytkownik będzie mógł przesłać propozycję braku tłumaczenia, które zostanie zapisane w pliku csv. Nie włączaj tej funkcji w środowisku produkcyjnym!', +'settings_showSingleSearchHit' => 'Przejdź prosto do pojedynczego trafienia wyszukiwania', +'settings_showSingleSearchHit_desc' => 'Jeśli wyniki wyszukiwania w jednym trafieniu, zostanie on wyświetlony od razu zamiast listy wyników.', 'settings_Site' => 'Strona', 'settings_siteDefaultPage' => 'Domyślna strona', 'settings_siteDefaultPage_desc' => 'Strona wyświetlana domyślnie po zalogowaniu. Domyślnie jest to out/out.ViewFolder.php', @@ -1493,7 +1512,7 @@ URL: [url]', 'settings_smtpUser' => 'Użytkownik SMTP', 'settings_smtpUser_desc' => 'Użytkownik SMTP', 'settings_sortFoldersDefault' => 'Domyślna metoda sotowania', -'settings_sortFoldersDefault_desc' => '', +'settings_sortFoldersDefault_desc' => 'Spowoduje to ustawienie metod sortowania folderów i dokumentów w widoku folderów.', 'settings_sortFoldersDefault_val_name' => 'po nazwie', 'settings_sortFoldersDefault_val_sequence' => 'po sekwencji', 'settings_sortFoldersDefault_val_unsorted' => 'niesortowane', @@ -1510,14 +1529,14 @@ URL: [url]', 'settings_strictFormCheck_desc' => 'Sprawdzanie poprawności forularzy. Jeśli ta opcja jest włączona, to wszystkie pola w formularzach będą obowiązkowe do wypełnienia. Jeśli nie włączysz tej opcji, to większość komentarzy i pól słów kluczowych będzie opcjonalna. Komentarze są zawsze wymagane przy zatwierdzaniu, opiniowaniu lub zmianie statusu dokumentu.', 'settings_suggestionvalue' => 'Sugerowana wartość', 'settings_System' => 'System', -'settings_tasksInMenu' => '', -'settings_tasksInMenu_approval' => '', -'settings_tasksInMenu_desc' => '', -'settings_tasksInMenu_needscorrection' => '', -'settings_tasksInMenu_receipt' => '', -'settings_tasksInMenu_review' => '', -'settings_tasksInMenu_revision' => '', -'settings_tasksInMenu_workflow' => '', +'settings_tasksInMenu' => 'Wybrane zadania', +'settings_tasksInMenu_approval' => 'Zatwierdzone', +'settings_tasksInMenu_desc' => 'Wybierz te zadania, które mają być zliczane. Jeśli żadna opcja nie zostanie wybrana, wszystkie zadania zostaną policzone.', +'settings_tasksInMenu_needscorrection' => 'Konieczna korekta', +'settings_tasksInMenu_receipt' => 'Wpływy', +'settings_tasksInMenu_review' => 'Recenzji', +'settings_tasksInMenu_revision' => 'Korekty', +'settings_tasksInMenu_workflow' => 'Przepływu pracy', 'settings_theme' => 'Domyślny motyw', 'settings_theme_desc' => 'Domyślny styl wyglądu (nazwa podkatalogu w katalogu "styles")', 'settings_titleDisplayHack' => 'Korekta wyświetlania tytułu', @@ -1533,13 +1552,13 @@ URL: [url]', 'settings_versiontolow' => 'Za niska wersja', 'settings_viewOnlineFileTypes' => 'Typy plików widoczne online', 'settings_viewOnlineFileTypes_desc' => 'Pliki z jednym z następujących rozszerzeń mogą być widoczne online (UŻYWAJ WYŁĄCZNIE MAŁYCH LITER)', -'settings_webdav' => '', +'settings_webdav' => 'WebDAV', 'settings_workflowMode' => 'Tryb procesu', 'settings_workflowMode_desc' => 'Zaawansowany proces pozwala określić własne release procesu zwalniający dla wersji dokumentu.', 'settings_workflowMode_valadvanced' => 'zaawansowane', -'settings_workflowMode_valnone' => '', +'settings_workflowMode_valnone' => 'żaden', 'settings_workflowMode_valtraditional' => 'tradycyjny', -'settings_workflowMode_valtraditional_only_approval' => '', +'settings_workflowMode_valtraditional_only_approval' => 'tradycyjny (bez recenzji)', 'settings_zendframework' => 'Zend Framework', 'set_expiry' => 'Ustaw datę wygaśnięcia', 'set_owner' => 'Ustaw właściciela', @@ -1555,147 +1574,148 @@ URL: [url]', 'site_brand' => '', 'sk_SK' => 'słowacki', 'sort_by_date' => 'Sortuj według daty', -'sort_by_expiration_date' => '', +'sort_by_expiration_date' => 'Sortuj według daty ważności', 'sort_by_name' => 'Sortuj według nazwy', -'sort_by_sequence' => '', +'sort_by_sequence' => 'Sortuj według sekwencji', 'space_used_on_data_folder' => 'Przestrzeń zajęta przez folder danych', 'splash_added_to_clipboard' => 'Dodano do schowka', -'splash_add_access' => '', +'splash_add_access' => 'Dodano prawo dostępu', 'splash_add_attribute' => 'Dodano nowy atrybut', 'splash_add_group' => 'Dodano nową grupę', 'splash_add_group_member' => 'Dodano nowego członka grupy', -'splash_add_role' => '', -'splash_add_to_transmittal' => '', -'splash_add_transmittal' => '', +'splash_add_role' => 'Dodano nową rolę', +'splash_add_task' => '', +'splash_add_to_transmittal' => 'Dodaj do przekazu', +'splash_add_transmittal' => 'Dodano przekaz', 'splash_add_user' => 'Dodano nowego użytkownika', -'splash_cleared_cache' => '', +'splash_cleared_cache' => 'Pamięć podręczna wyczyszczona', 'splash_cleared_clipboard' => 'Wyczyszczono schowek', -'splash_delete_access' => '', -'splash_document_added' => '', -'splash_document_checkedout' => '', +'splash_delete_access' => 'Prawo dostępu zostało usunięte', +'splash_document_added' => 'Dokument został dodany', +'splash_document_checkedout' => 'Wyewidencjonowany dokument', 'splash_document_edited' => 'Dokument został zapisany', -'splash_document_indexed' => '', +'splash_document_indexed' => 'Dokument \'[name]\' zindeksowany.', 'splash_document_locked' => 'Dokument zablokowany', 'splash_document_unlocked' => 'Odblokowano dokument', -'splash_edit_access' => '', +'splash_edit_access' => 'Prawo dostępu zostało zmienione', 'splash_edit_attribute' => 'Zapisano atrybuty', -'splash_edit_event' => '', +'splash_edit_event' => 'Wydarzenie zapisane', 'splash_edit_group' => 'Grupa zapisana', -'splash_edit_role' => '', -'splash_edit_task' => '', -'splash_edit_transmittal' => '', +'splash_edit_role' => 'Rola zapisana', +'splash_edit_task' => 'Zadanie zapisane', +'splash_edit_transmittal' => 'Przesyłanie zapisane', 'splash_edit_user' => 'Zapisano użytkownika', -'splash_error_add_to_transmittal' => '', -'splash_error_rm_download_link' => '', -'splash_error_send_download_link' => '', -'splash_extension_getlist' => '', -'splash_extension_import' => '', -'splash_extension_refresh' => '', -'splash_extension_upload' => '', +'splash_error_add_to_transmittal' => 'Błąd podczas dodawania dokumentu do przekazu', +'splash_error_rm_download_link' => 'Błąd podczas usuwania linku do pobrania', +'splash_error_send_download_link' => 'Błąd podczas wysyłania linku do pobrania', +'splash_extension_getlist' => 'Zaktualizowana lista rozszerzeń z repozytorium', +'splash_extension_import' => 'Rozszerzenie zainstalowane', +'splash_extension_refresh' => 'Odświeżona lista rozszerzeń', +'splash_extension_upload' => 'Rozszerzenie zainstalowane', 'splash_folder_edited' => 'Zapisz zmiany folderu', -'splash_importfs' => '', -'splash_inherit_access' => '', +'splash_importfs' => 'Zaimportowane dokumenty [docs] i foldery [folders]', +'splash_inherit_access' => 'Prawa dostępu będą dziedziczone', 'splash_invalid_folder_id' => 'Nieprawidłowy identyfikator folderu', 'splash_invalid_searchterm' => 'Nieprawidłowa wartość wyszukiwania', -'splash_link_document' => '', +'splash_link_document' => 'Dodano link', 'splash_moved_clipboard' => 'Schowek został przeniesiony do bieżącego folderu', -'splash_move_document' => '', -'splash_move_folder' => '', -'splash_notinherit_access' => '', -'splash_receipt_update_success' => '', +'splash_move_document' => 'Dokument został przeniesiony', +'splash_move_folder' => 'Folder został przeniesiony', +'splash_notinherit_access' => 'Prawa dostępu nie są już dziedziczone', +'splash_receipt_update_success' => 'Odbiór został dodany pomyślnie', 'splash_removed_from_clipboard' => 'Usunięto ze schowka', 'splash_rm_attribute' => 'Usunięto atrybut', -'splash_rm_attr_value' => '', +'splash_rm_attr_value' => 'Wartość atrybutu została usunięta', 'splash_rm_document' => 'Dokument usunięto', -'splash_rm_download_link' => '', +'splash_rm_download_link' => 'Usunięto link do pobrania', 'splash_rm_folder' => 'Folder usunięty', 'splash_rm_group' => 'Grupę usunięto', 'splash_rm_group_member' => 'Usunięto członka grupy', -'splash_rm_role' => '', -'splash_rm_transmittal' => '', +'splash_rm_role' => 'Rola usunięta', +'splash_rm_transmittal' => 'Przekazywanie usunięte', 'splash_rm_user' => 'Użytkownika usunięto', -'splash_rm_user_processes' => '', -'splash_rm_workflow' => '', -'splash_rm_workflow_action' => '', -'splash_rm_workflow_state' => '', -'splash_saved_file' => '', -'splash_save_user_data' => '', -'splash_send_download_link' => '', -'splash_send_login_data' => '', -'splash_setowner' => '', +'splash_rm_user_processes' => 'Użytkownik usunięty ze wszystkich procesów', +'splash_rm_workflow' => 'Usunięto przepływ pracy', +'splash_rm_workflow_action' => 'Usunięto akcję przepływu pracy', +'splash_rm_workflow_state' => 'Usunięto stan przepływu pracy', +'splash_saved_file' => 'Wersja zapisana', +'splash_save_user_data' => 'Zapisane dane użytkownika', +'splash_send_download_link' => 'Link do pobrania wysłany e-mailem.', +'splash_send_login_data' => 'Dane do logowania zostały wysłane', +'splash_setowner' => 'Ustaw nowego właściciela', 'splash_settings_saved' => 'Zmiany zapisano', -'splash_set_default_access' => '', +'splash_set_default_access' => 'Domyślny zestaw praw dostępu', 'splash_substituted_user' => 'Zmieniono użytkownika', 'splash_switched_back_user' => 'Przełączono z powrotem do oryginalnego użytkownika', 'splash_toogle_group_manager' => 'Przełączono grupę menadżerów', -'splash_transfer_content' => '', -'splash_transfer_document' => '', -'splash_transfer_objects' => '', -'splash_trigger_workflow' => '', +'splash_transfer_content' => 'Treści przekazywane', +'splash_transfer_document' => 'Dokument przesłany', +'splash_transfer_objects' => 'Obiekty przekazane', +'splash_trigger_workflow' => 'Wyzwalane przejście przepływu pracy', 'state_and_next_state' => 'Status/Następny status', 'statistic' => 'Statystyka', 'status' => 'Status', 'status_approval_rejected' => 'Szkic odrzucony', 'status_approved' => 'Zatwierdzone', 'status_approver_removed' => 'Osoba zatwierdzająca usunięta z procesu', -'status_needs_correction' => '', +'status_needs_correction' => 'Wymaga korekty', 'status_not_approved' => 'Nie zatwierdzone', -'status_not_receipted' => '', +'status_not_receipted' => 'Jeszcze nie otrzymane', 'status_not_reviewed' => 'Nie zrecenzowane', -'status_not_revised' => '', -'status_receipted' => '', -'status_receipt_rejected' => '', -'status_recipient_removed' => '', +'status_not_revised' => 'Nie zweryfikowane', +'status_receipted' => 'Otrzymane', +'status_receipt_rejected' => 'Odrzucone', +'status_recipient_removed' => 'Adresat usunięty z listy', 'status_reviewed' => 'Zrecenzowane', 'status_reviewer_rejected' => 'Szkic odrzucony', 'status_reviewer_removed' => 'Recenzent usunięty z procesu', -'status_revised' => '', -'status_revision_rejected' => '', -'status_revision_sleeping' => '', -'status_revisor_removed' => '', +'status_revised' => 'Zmieniony', +'status_revision_rejected' => 'Korekta odrzucona', +'status_revision_sleeping' => 'Oczekujące', +'status_revisor_removed' => 'Revisor usunięty z listy', 'status_unknown' => 'Nieznany', 'storage_size' => 'Zajętość dysku', -'subfolder_duplicate_name' => '', -'submit_2_fact_auth' => '', +'subfolder_duplicate_name' => 'Zduplikowana nazwa podfolderu', +'submit_2_fact_auth' => 'Zapisz sekretne hasło', 'submit_approval' => 'Zaakceptuj', 'submit_login' => 'Zaloguj się', 'submit_password' => 'Ustaw nowe hasło', 'submit_password_forgotten' => 'Uruchom proces', -'submit_receipt' => '', +'submit_receipt' => 'Prześlij pokwitowanie', 'submit_review' => 'Zatwierdź recenzję', -'submit_revision' => '', +'submit_revision' => 'Zatwierdź korektę', 'submit_userinfo' => 'Zatwierdź dane', -'submit_webauthn_login' => '', -'submit_webauthn_register' => '', -'subsribe_timelinefeed' => '', -'substitute_to_user' => '', -'substitute_user' => 'Zastępca użytkownika', -'success_add_aro' => '', -'success_add_permission' => '', -'success_remove_permission' => '', -'success_toogle_permission' => '', +'submit_webauthn_login' => 'Login', +'submit_webauthn_register' => 'Zarejestrować', +'subsribe_timelinefeed' => 'Subskrybuj kanał czasu', +'substitute_to_user' => 'Przełącz na \'[username]\'', +'substitute_user' => 'Użytkownik zastępczy', +'success_add_aro' => 'Dodano obiekt żądania dostępu', +'success_add_permission' => 'Dodano uprawnienie', +'success_remove_permission' => 'Usunięto uprawnienie', +'success_toogle_permission' => 'Zmieniono uprawnienie', 'sunday' => 'Niedziela', 'sunday_abbr' => 'Ni', 'sv_SE' => 'szwedzki', 'switched_to' => 'Przełączone na', -'takeOverAttributeValue' => '', -'takeOverGrpApprover' => '', -'takeOverGrpApprovers' => '', -'takeOverGrpReviewer' => '', -'takeOverGrpReviewers' => '', -'takeOverIndApprover' => '', -'takeOverIndApprovers' => '', -'takeOverIndReviewer' => '', -'takeOverIndReviewers' => '', -'tasks' => '', -'task_core_expireddocs_days' => '', -'task_description' => '', -'task_disabled' => '', -'task_frequency' => '', -'task_last_run' => '', -'task_name' => '', -'task_next_run' => '', -'temp_jscode' => '', +'takeOverAttributeValue' => 'Przejmij wartość atrybutu z ostatniej wersji', +'takeOverGrpApprover' => 'Przejmij grupę osób zatwierdzających z ostatniej wersji.', +'takeOverGrpApprovers' => 'Przejęcie grupy zatwierdzających', +'takeOverGrpReviewer' => 'Przejmij grupę recenzentów z ostatniej wersji.', +'takeOverGrpReviewers' => 'Przejęcie grupy recezentów', +'takeOverIndApprover' => 'Przejmij kontrolę nad pojedynczym zatwierdzającym z ostatniej wersji.', +'takeOverIndApprovers' => 'Przejmij indywidualne osoby zatwierdzające', +'takeOverIndReviewer' => 'Przejmij kontrolę nad indywidualnym recenzentem z ostatniej wersji.', +'takeOverIndReviewers' => 'Przejmij poszczególnych recenzentów', +'tasks' => 'Zadania', +'task_core_expireddocs_days' => 'Rdzeń zadania wygasa', +'task_description' => 'Opis zadania', +'task_disabled' => 'Zadanie wyłączone', +'task_frequency' => 'Częstotliwość zadania', +'task_last_run' => 'Ostatnie uruchomienie zadania', +'task_name' => 'Nazwa zadania', +'task_next_run' => 'Zadanie następnego uruchomienia', +'temp_jscode' => 'Tymczasowy kod javascript', 'testmail_body' => 'To jest mail testowy SeedDMS', 'testmail_subject' => 'Wiadomość testowa', 'theme' => 'Wygląd', @@ -1703,66 +1723,66 @@ URL: [url]', 'thursday_abbr' => 'Cz', 'timeline' => 'Zakres czasowy', 'timeline_add_file' => 'Nowy załącznik', -'timeline_add_version' => '', -'timeline_full_add_file' => '', -'timeline_full_add_version' => '', -'timeline_full_scheduled_revision' => '', -'timeline_full_status_change' => '', -'timeline_scheduled_revision' => '', -'timeline_selected_item' => '', +'timeline_add_version' => 'Nowa wersja [version]', +'timeline_full_add_file' => '[document]
Nowy załącznik', +'timeline_full_add_version' => '[document]
Nowa wersja [version]', +'timeline_full_scheduled_revision' => '[document]
Rewizja wersji [version]', +'timeline_full_status_change' => 'Pełna zmiana statusu na osi czasu', +'timeline_scheduled_revision' => 'Rewizja wersji [version]', +'timeline_selected_item' => 'Wybrany dokument', 'timeline_skip_add_file' => 'dodano załącznik', -'timeline_skip_scheduled_revision' => '', +'timeline_skip_scheduled_revision' => 'Zaplanowana wersja', 'timeline_skip_status_change_-1' => 'odrzucony', 'timeline_skip_status_change_-3' => 'przedawniony', 'timeline_skip_status_change_0' => 'oczekuje na opinię', 'timeline_skip_status_change_1' => 'oczekuje na zatwierdzenie', 'timeline_skip_status_change_2' => 'wydany', 'timeline_skip_status_change_3' => 'w obiegu', -'timeline_skip_status_change_4' => '', -'timeline_skip_status_change_5' => '', +'timeline_skip_status_change_4' => 'w wersji', +'timeline_skip_status_change_5' => 'projekt', 'timeline_status_change' => 'Wersja [wersja]: [status]', 'to' => 'Do', 'toggle_manager' => 'Przełączanie zarządcy', -'toggle_qrcode' => '', -'total' => '', -'to_before_from' => '', -'transfer_content' => '', +'toggle_qrcode' => 'Pokaż/ukryj kod QR', +'total' => 'Suma', +'to_before_from' => 'Data zakończenia nie może być wcześniejsza niż data rozpoczęcia', +'transfer_content' => 'Przenieś zawartość', 'transfer_document' => 'Transfer dokumentu', 'transfer_no_read_access' => 'Użytkownik nie ma prawa do odczytu w tym folderze', 'transfer_no_write_access' => 'Użytkownik nie ma prawa do zapisu w tym folderze', -'transfer_objects' => '', -'transfer_objects_to_user' => '', -'transfer_process_to_user' => '', +'transfer_objects' => 'Przenieś obiekty', +'transfer_objects_to_user' => 'Nowy właściciel', +'transfer_process_to_user' => 'Prześlij proces do użytkownika', 'transfer_to_user' => 'Przekaż użytkownikowi', 'transition_triggered_email' => 'Uruchomiono proces przepływu', -'transition_triggered_email_body' => 'Uruchomiono proces przepływu -Dokument: [name] -Wersja: [version] -Komentarz: [comment] -Proces: [workflow] -Poprzedni status: [previous_state] -Bieżący status: [current_state] -Folder nadrzędny: [folder_path] -Użytkownik: [username] +'transition_triggered_email_body' => 'Uruchomiono proces przepływu +Dokument: [name] +Wersja: [version] +Komentarz: [comment] +Proces: [workflow] +Poprzedni status: [previous_state] +Bieżący status: [current_state] +Folder nadrzędny: [folder_path] +Użytkownik: [username] URL: [url]', 'transition_triggered_email_subject' => '[sitename]: [name] - Uruchomiono proces przepływu', -'transmittal' => '', -'transmittalitem_removed' => '', -'transmittalitem_updated' => '', -'transmittal_comment' => '', -'transmittal_name' => '', -'transmittal_size' => '', +'transmittal' => 'Przekaz', +'transmittalitem_removed' => 'Przedmiot przekazu został usunięty', +'transmittalitem_updated' => 'Dokument zaktualizowano do najnowszej wersji', +'transmittal_comment' => 'Komentarz', +'transmittal_name' => 'Nazwa przekazu', +'transmittal_size' => 'Rozmiar przekazu', 'tree_loading' => 'Czekaj, trwa ładowanie...', 'trigger_workflow' => 'Proces', 'tr_TR' => 'Turecki', 'tuesday' => 'Wtorek', 'tuesday_abbr' => 'Wt', -'type_of_hook' => '', -'type_to_filter' => '', +'type_of_hook' => 'Typ', +'type_to_filter' => 'Wpisz, aby przefiltrować listę', 'type_to_search' => 'Wpisz wyszukiwane', 'uk_UA' => 'Ukrainski', 'under_folder' => 'W folderze', -'unknown_attrdef' => '', +'unknown_attrdef' => 'Nieznana definicja atrybutu', 'unknown_command' => 'Polecenie nie rozpoznane.', 'unknown_document_category' => 'Nieznana kategoria', 'unknown_group' => 'Nieznany ID grupy', @@ -1783,10 +1803,10 @@ URL: [url]', 'update_fulltext_index' => 'Aktualizuj indeks pełnotekstowy', 'update_info' => 'Aktualizuj informacje', 'update_locked_msg' => 'Ten dokument jest zablokowany.', -'update_recipients' => '', +'update_recipients' => 'Zaktualizuj listę odbiorców', 'update_reviewers' => 'Aktualizuj listę recenzentów', -'update_revisors' => '', -'update_transmittalitem' => '', +'update_revisors' => 'Aktualizuj listę audytorów', +'update_transmittalitem' => 'Zaktualizuj do najnowszej wersji dokumentu', 'uploaded_by' => 'Przesłane przez', 'uploading_failed' => 'Przesyłanie nie powiodło się. Skontaktuj się z administratorem.', 'uploading_maxsize' => 'Rozmiar pliku większy niż dopuszczalny', @@ -1799,7 +1819,7 @@ URL: [url]', 'users_and_groups' => 'Użytkownicy/Grupy', 'users_done_work' => 'Użytkownicy', 'user_exists' => 'Użytkownik już istnieje.', -'user_group' => '', +'user_group' => 'Użytkownik / grupa', 'user_group_management' => 'Zarządzanie Użytkownikami/Grupami', 'user_image' => 'Zdjęcie', 'user_info' => 'Informacje o użytkowniku', @@ -1810,7 +1830,7 @@ URL: [url]', 'use_comment_of_document' => 'Skomentuj dokumentu', 'use_default_categories' => 'Użyj predefiniowanych kategorii', 'use_default_keywords' => 'Użyj predefiniowanych słów kluczowych', -'valid_till' => '', +'valid_till' => 'Ważne do', 'version' => 'Wersja', 'versioning_file_creation' => 'Utwórz archiwum z wersjonowaniem', 'versioning_file_creation_warning' => 'Ta operacja utworzy plik zawierający informacje o wersjach plików z całego wskazanego folderu. Po utworzeniu, każdy plik będzie zapisany w folderze odpowiednim dla danego dokumentu.', @@ -1818,52 +1838,53 @@ URL: [url]', 'versiontolow' => 'Za niska wersja', 'version_comment' => 'Opis wersji', 'version_deleted_email' => 'Wersja usunięta', -'version_deleted_email_body' => 'Wersja została usunięta -Dokument: [name] -Wersja: [version] -Folder nadrzędny: [folder_path] -Użytkownik: [username] +'version_deleted_email_body' => 'Wersja została usunięta +Dokument: [name] +Wersja: [version] +Folder nadrzędny: [folder_path] +Użytkownik: [username] URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Usunięcie wersji', 'version_info' => 'Informacje o wersji', 'view' => 'Widok', 'view_online' => 'Obejrzyj online', 'warning' => 'Ostrzeżenie', -'webauthn_auth' => '', -'webauthn_crossplatform_info' => '', -'webauthn_info' => '', -'webauth_crossplatform' => '', +'webauthn_auth' => 'Uwierzytelnianie WebAuthn', +'webauthn_crossplatform_info' => 'Używaj wieloplatformowego „Tak”, gdy masz urządzenie wymienne, takie jak klucz Yubico, którego chcesz użyć do logowania na różnych komputerach; Powiedz „Nie”, gdy urządzenie jest podłączone do komputera. Wybór wpływa na to, które urządzenia są oferowane przez przeglądarkę i / lub system bezpieczeństwa komputera.', +'webauthn_info' => 'WebAuthn to uwierzytelnianie bez hasła, które wykorzystuje kryptografię klucza publicznego. Dla strony internetowej tworzony jest klucz prywatny-publiczny (znany jako poświadczenie). Klucz prywatny jest bezpiecznie przechowywany na urządzeniu użytkownika; Klucz publiczny i losowo wygenerowany identyfikator poświadczenia są wysyłane do serwera w celu przechowywania. Serwer może następnie użyć tego klucza publicznego do udowodnienia tożsamości użytkownika. Klucz prywatny jest zwykle przechowywany na tokenie sprzętowym. Token musi zostać zarejestrowany, zanim będzie można go użyć do uwierzytelnienia.', +'webauth_crossplatform' => 'Używaj wieloplatformowego', 'wednesday' => 'Środa', 'wednesday_abbr' => 'Śr', 'weeks' => 'tygodni', 'week_view' => 'Widok tygodniowy', 'workflow' => 'Proces', -'workflows_involded' => '', +'workflows_involded' => 'Zaangażowany w przepływ pracy', 'workflow_actions_management' => 'Zarządzanie akcjami procesu', 'workflow_action_in_use' => 'Akcja ta jest obecnie zastosowana w procesie', 'workflow_action_name' => 'Nazwa', 'workflow_editor' => 'Edytor procesu', 'workflow_group_summary' => 'Podsumowanie grupy', -'workflow_has_cycle' => '', +'workflow_has_cycle' => 'Przepływ pracy ma cykl', 'workflow_initstate' => 'Początkowy status', 'workflow_in_use' => 'Proces ten jest obecnie zastosowany w dokumentach.', -'workflow_layoutdata_saved' => '', +'workflow_layoutdata_saved' => 'Zapisano dane układu', 'workflow_management' => 'Menadżer procesów', 'workflow_name' => 'Nazwa', -'workflow_no_doc_rejected_state' => '', -'workflow_no_doc_released_state' => '', -'workflow_no_initial_state' => '', +'workflow_no_doc_rejected_state' => 'Dokument nie zostanie odrzucony w stanie przepływu pracy!', +'workflow_no_doc_released_state' => 'Dokument nie zostanie wydany w stanie przepływu pracy!', +'workflow_no_initial_state' => 'Żadne z przejść nie rozpoczyna się od początkowego stanu przepływu pracy!', 'workflow_no_states' => 'Zanim dodasz proces musisz najpierw zdefiniować jego status.', -'workflow_save_layout' => '', -'workflow_state' => '', +'workflow_save_layout' => 'Zapisz układ', +'workflow_state' => 'Stan procesu', 'workflow_states_management' => 'Menadżer statusów procesu', 'workflow_state_docstatus' => 'Status dokumentu', 'workflow_state_in_use' => 'Ten status jest aktualnie zastosowany w procesach.', 'workflow_state_name' => 'Nazwa', 'workflow_summary' => 'Podsumowanie procesu', -'workflow_transition_without_user_group' => '', +'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_filetype' => '', +'wrong_filetype' => 'Nieprawidłowy typ pliku', 'x_more_objects' => '[number] więcej obiektów', 'year_view' => 'Widok roczny', 'yes' => 'Tak', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index ba852e6db..a8a7bcc1a 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Você realmente deseja remover todos os arquivos da pasta "[foldername]" e de suas subpastas
Cuidado: Eáa ação não pode ser desfeita.', 'confirm_rm_group' => 'Você realmente quer remover o grupo "[groupname]"?
Tenha cuidado: Esta ação não pode ser desfeita.', 'confirm_rm_log' => 'Você realmente deseja remover o arquivo de log "[logname]"?
Cuidado: esta ação não pode ser desfeita.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'Por favor, confirme a exclusão da transmissão.', 'confirm_rm_transmittalitem' => 'Confirme a remoção', 'confirm_rm_user' => 'Você realmente deseja remover o usuário "[username]"?
Tenha cuidado: esta ação não pode ser desfeita.', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Versão Atual', 'daily' => 'Diariamente', 'databasesearch' => 'Pesquisar Base de dados', +'database_schema_version' => '', 'date' => 'Data', 'days' => 'dias', 'debug' => 'Debug', @@ -688,6 +690,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copiar lista de acesso herdada', 'inherits_access_empty_msg' => 'Inicie com a lista de acesso vazia', 'inherits_access_msg' => 'acesso está endo herdado.', +'installed_php_extensions' => '', 'internal_error' => 'Erro interno', 'internal_error_exit' => 'Erro interno. Não é possível concluir o pedido.', 'invalid_access_mode' => 'Modo de acesso inválido', @@ -803,6 +806,7 @@ URL: [url]', 'missing_checksum' => 'Falta verificação de checksum', 'missing_file' => 'Falta o arquivo', 'missing_filesize' => 'Falta tamanho do arquivo', +'missing_php_extensions' => '', 'missing_reception' => 'Falta o recebimento', 'missing_request_object' => 'Objeto de solicitação ausente', 'missing_transition_user_group' => 'Falta usuário/grupo para transição', @@ -961,6 +965,7 @@ Se você ainda tiver problemas para fazer o login, por favor, contate o administ 'pending_revision' => 'Revisões pendentes', 'pending_workflows' => 'Fluxos de trabalho pendentes', 'personal_default_keywords' => 'palavras-chave pessoais', +'php_info' => '', 'pl_PL' => 'Polonês', 'possible_substitutes' => 'Substitutos', 'preset_expires' => 'Vencimento pré-definido', @@ -1154,6 +1159,7 @@ URL: [url]', 'rm_from_clipboard' => 'Remover da área de transferência', 'rm_group' => 'Remove este grupo', 'rm_role' => 'Excluir este papel', +'rm_task' => '', 'rm_transmittal' => 'Por favor, confirme a exclusão da transmissão.', 'rm_transmittalitem' => 'Confirme a remoção', 'rm_user' => 'Remove este usuário', @@ -1208,6 +1214,8 @@ URL: [url]', 'search_results_access_filtered' => 'Os resultados da pesquisa podem conter conteúdo ao qual o acesso foi negado.', 'search_time' => 'Tempo decorrido: [time] seg.', 'seconds' => 'segundos', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Seleção', 'select_attrdefgrp_show' => 'Escolha quando mostrar', 'select_attribute_value' => 'Selecione o valor do atributo', @@ -1266,6 +1274,12 @@ Nome: [username] 'settings_allowReviewerOnly' => 'Permitir definir apenas o revisor', 'settings_allowReviewerOnly_desc' => 'Habilitar se for permitido definir apenas um revisor, mas nenhum aprovador no modo de fluxo de trabalho tradicional.', 'settings_apache_mod_rewrite' => 'Apache - Módulo Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Definições de autenticação', 'settings_autoLoginUser' => 'Login automático', 'settings_autoLoginUser_desc' => 'Use esse ID de usuário para acessos se o usuário ainda não tiver efetuado login. Esse acesso não criará uma sessão.', @@ -1646,6 +1660,7 @@ Nome: [username] 'splash_add_group' => 'Novo grupo adicionado', 'splash_add_group_member' => 'Novo membro do grupo adicionado', 'splash_add_role' => 'Novo papel adicionado', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'Adicionar à transmissão', 'splash_add_transmittal' => 'Transmissão adicionada', 'splash_add_user' => 'Novo usuário adicionado', @@ -1942,6 +1957,7 @@ URL: [url]', 'workflow_state_in_use' => 'Este estado está sendo usado por fluxos de trabalho.', 'workflow_state_name' => 'Nome', 'workflow_summary' => 'Sumário de fluxo de trabalho', +'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_filetype' => 'Tipo de arquivo errado', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index eaf20010f..c1b871266 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Sigur doriți să eliminați toate fișierele din folderul "[foldername]" si toate subfolderele?
Fiți atenți: Această acțiune nu poate fi anulată.', 'confirm_rm_group' => 'Sigur doriți să eliminați grupul "[groupname]"?
Fiți atenți: Această acțiune nu poate fi anulată.', 'confirm_rm_log' => 'Sigur doriți să eliminați fișierul log "[logname]"?
Fiți atenți: Această acțiune nu poate fi anulată.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => '', 'confirm_rm_user' => 'Sigur doriți să eliminați utilizatorul "[username]"?
Fiți atenți: Această acțiune nu poate fi anulată.', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Versiune curentă', 'daily' => 'Zilnic', 'databasesearch' => 'Căutare baza de date', +'database_schema_version' => '', 'date' => 'Data', 'days' => 'zile', 'debug' => '', @@ -669,6 +671,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copie lista de acces moștenită', 'inherits_access_empty_msg' => 'Începeți cu lista de acces goală', 'inherits_access_msg' => 'Accesul este moștenit.', +'installed_php_extensions' => '', 'internal_error' => 'Eroare internă', 'internal_error_exit' => 'Eroare internă. Nu se poate finaliza cererea.', 'invalid_access_mode' => 'Modul de acces invalid', @@ -784,6 +787,7 @@ URL: [url]', 'missing_checksum' => 'Lipsește suma de control(checksum)', 'missing_file' => '', 'missing_filesize' => 'Lipsește dimensiunea fișierului', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => 'Lipsește utilizatorul/grupul pentru tranziție', @@ -943,6 +947,7 @@ Dacă aveți în continuare probleme la autentificare, vă rugăm să contactaț 'pending_revision' => '', 'pending_workflows' => '', 'personal_default_keywords' => 'Liste de cuvinte cheie personale', +'php_info' => '', 'pl_PL' => 'Poloneză', 'possible_substitutes' => '', 'preset_expires' => 'Expirarea presetului', @@ -1121,6 +1126,7 @@ URL: [url]', 'rm_from_clipboard' => 'Eliminați din clipboard', 'rm_group' => 'Eliminați acest grup', 'rm_role' => '', +'rm_task' => '', 'rm_transmittal' => 'Elimina transmiterea', 'rm_transmittalitem' => '', 'rm_user' => 'Eliminați acest utilizator', @@ -1175,6 +1181,8 @@ URL: [url]', 'search_results_access_filtered' => 'Rezultatele căutării pot cuprinde conținut la care accesul a fost interzis.', 'search_time' => 'Timp scurs: [time] sec.', 'seconds' => 'secunde', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Selecție', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1228,6 +1236,12 @@ URL: [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Setări de autentificare', 'settings_autoLoginUser' => 'Login automat', 'settings_autoLoginUser_desc' => '', @@ -1608,6 +1622,7 @@ URL: [url]', 'splash_add_group' => 'Grup nou adăugat', 'splash_add_group_member' => 'Membru grup nou adăugat', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => 'Utilizator nou adăugat', @@ -1904,6 +1919,7 @@ URL: [url]', 'workflow_state_in_use' => 'Această stare este utilizată în prezent de Workflow-uri.', 'workflow_state_name' => 'Nume', 'workflow_summary' => 'Sumar Workflow', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Sumar Utilizator', 'wrong_filetype' => '', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index 621bd38d5..77b9772f7 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Удалить в каталоге «[foldername]» все файлы и подкаталоги?
Действие необратимо', 'confirm_rm_group' => 'Удалить группу «[groupname]»?
Действие необратимо', 'confirm_rm_log' => 'Удалить журнал «[logname]»?
Действие необратимо', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'Подтвердить удаление', 'confirm_rm_transmittalitem' => 'Подтвердить удаление', 'confirm_rm_user' => 'Удалить пользователя «[username]»?
Действие необратимо', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Текущая версия', 'daily' => 'Ежедневно', 'databasesearch' => 'Поиск по БД', +'database_schema_version' => '', 'date' => 'Дата', 'days' => 'дни', 'debug' => 'Отладка', @@ -669,6 +671,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Скопировать наследованный список', 'inherits_access_empty_msg' => 'Начать с пустого списка доступа', 'inherits_access_msg' => 'Доступ унаследован.', +'installed_php_extensions' => '', 'internal_error' => 'Внутренняя ошибка', 'internal_error_exit' => 'Внутренняя ошибка. Невозможно выполнить запрос.', 'invalid_access_mode' => 'Неверный уровень доступа', @@ -784,6 +787,7 @@ URL: [url]', 'missing_checksum' => 'Отсутствует контрольная сумма', 'missing_file' => 'Отсутствует файл', 'missing_filesize' => 'Отсутствует размер файла', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => 'Отсутствует пользователь/группа для изменения.', @@ -940,6 +944,7 @@ URL: [url]', 'pending_revision' => '', 'pending_workflows' => 'В ожидании процесса', 'personal_default_keywords' => 'Личный список меток', +'php_info' => '', 'pl_PL' => 'Polish', 'possible_substitutes' => 'Замена', 'preset_expires' => 'Установить срок', @@ -1128,6 +1133,7 @@ URL: [url]', 'rm_from_clipboard' => 'Удалить из буфера обмена', 'rm_group' => 'Удалить группу', 'rm_role' => 'Удалить роль', +'rm_task' => '', 'rm_transmittal' => 'Удалить передачу', 'rm_transmittalitem' => 'Удалить документ', 'rm_user' => 'Удалить пользователя', @@ -1182,6 +1188,8 @@ URL: [url]', 'search_results_access_filtered' => 'Результаты поиска могут содержать объекты к которым у вас нет доступа', 'search_time' => 'Прошло: [time] с', 'seconds' => 'секунды', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Выбор', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1235,6 +1243,12 @@ URL: [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => 'Apache — модуль Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Настройки авторизации', 'settings_autoLoginUser' => 'Автоматический вход', 'settings_autoLoginUser_desc' => 'Использовать этого пользователя для доступа, если пользователь не вошел в систему. Такой доступ не будет создавать сеанс.', @@ -1615,6 +1629,7 @@ URL: [url]', 'splash_add_group' => 'Добавлена новая группа', 'splash_add_group_member' => 'Добавлен новый член группы', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => 'Добавлен новый пользователь', @@ -1911,6 +1926,7 @@ URL: [url]', 'workflow_state_in_use' => 'Этот статус используется процессами.', 'workflow_state_name' => 'Название', 'workflow_summary' => 'Сводка по процессу', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Сводка по пользователю', 'wrong_filetype' => '', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index f202c5bee..4dc2f6b41 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Skutočne si prajete odstrániť všetky súbory zložky "[foldername]" a všetkých jej podzložiek?
Buďte opatrní, táto akcia je nezvratná.', 'confirm_rm_group' => 'Skutočne si prajete odstrániť skupinu "[groupname]"?
Buďte opatrní, táto akcia je nezvratná.', 'confirm_rm_log' => 'Skutočne si prajete zmazať protokol "[logname]"?
Buďte opatrní, táto akcia je nezvratná.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'Please confirm the deletion of the transmittal.', 'confirm_rm_transmittalitem' => 'Potvrďte odstránenie', 'confirm_rm_user' => 'Skutočne si prajete odstrániť používateľa "[username]"?
Buďte opatrní, táto akcia je nezvratná.', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Aktuálna verzia', 'daily' => 'Denná', 'databasesearch' => 'Hľadať databázu', +'database_schema_version' => '', 'date' => 'Dátum', 'days' => 'dní', 'debug' => 'Ladiť', @@ -688,6 +690,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Skopírovať zdedený zoznam riadenia prístupu', 'inherits_access_empty_msg' => 'Založiť nový zoznam riadenia prístupu', 'inherits_access_msg' => 'Prístup sa dedí.', +'installed_php_extensions' => '', 'internal_error' => 'Vnútorná chyba', 'internal_error_exit' => 'Vnútorná chyba. Nebolo možné dokončiť požiadavku.', 'invalid_access_mode' => 'Neplatný režim prístupu', @@ -803,6 +806,7 @@ URL: [url]', 'missing_checksum' => 'Chýba kontrolný súčet', 'missing_file' => 'Chýba súbor', 'missing_filesize' => 'Chýba veľkosť súboru', +'missing_php_extensions' => '', 'missing_reception' => 'Missing reception', 'missing_request_object' => 'Chýba požadovaný objekt', 'missing_transition_user_group' => 'Chýba používateľ/skupina pre prenos', @@ -962,6 +966,7 @@ If you have still problems to login, then please contact your administrator.', 'pending_revision' => 'Pending revisions', 'pending_workflows' => 'Pending workflows', 'personal_default_keywords' => 'Osobné kľúčové slová', +'php_info' => '', 'pl_PL' => 'Poľština', 'possible_substitutes' => 'Substitutes', 'preset_expires' => 'Preset expiration', @@ -1156,6 +1161,7 @@ URL: [url]', 'rm_from_clipboard' => 'Odstrániť zo schránky', 'rm_group' => 'Odstrániť túto skupinu', 'rm_role' => 'Odstrániť túto rolu', +'rm_task' => '', 'rm_transmittal' => 'Remove transmittal', 'rm_transmittalitem' => 'Odstrániť položku', 'rm_user' => 'Odstrániť tohto používateľa', @@ -1210,6 +1216,8 @@ URL: [url]', 'search_results_access_filtered' => 'Výsledky hľadania môžu obsahovať obsah, ku ktorému bol zamietnutý prístup.', 'search_time' => 'Uplynulý čas: [time] sek', 'seconds' => 'sekundy', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Výber', 'select_attrdefgrp_show' => 'Choose when to show', 'select_attribute_value' => 'Vyberte hodnotu atribútu', @@ -1268,6 +1276,12 @@ Meno: [username] 'settings_allowReviewerOnly' => 'Allow to set reviewer only', 'settings_allowReviewerOnly_desc' => 'Enable this, if it shall be allow to set just a reviewer but no approver in traditional workflow mode.', 'settings_apache_mod_rewrite' => 'Apache - Modul Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Authentication settings', 'settings_autoLoginUser' => 'Automatické prihlásenie', 'settings_autoLoginUser_desc' => 'Use this user id for accesses if the user is not already logged in. Such an access will not create a session.', @@ -1648,6 +1662,7 @@ Meno: [username] 'splash_add_group' => 'Bola pridaná nová skupina', 'splash_add_group_member' => 'New group member added', 'splash_add_role' => 'Nová rola bola pridaná', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'Add to transmittal', 'splash_add_transmittal' => 'Added transmittal', 'splash_add_user' => 'Pridaný nový používateľ', @@ -1944,6 +1959,7 @@ URL: [url]', 'workflow_state_in_use' => 'This state is currently used by workflows.', 'workflow_state_name' => 'Názov', 'workflow_summary' => 'Workflow summary', +'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_filetype' => '', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index 5e674e3a8..ae2a50f65 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -295,6 +295,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Vill du verkligen ta bort alla filer i katalogen "[foldername]" och i katalogens undermappar?
OBS! Filerna kan inte återskapas!', 'confirm_rm_group' => 'Vill du verkligen ta bort gruppen "[groupname]"?
OBS! Gruppen kan inte återskapas!', 'confirm_rm_log' => 'Vill du verkligen ta bort loggfilen "[logname]"?
OBS! Loggfilen kan inte återskapas!', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => 'Vänligen bekräfta radering av meddelande.', 'confirm_rm_transmittalitem' => 'Bekräfta radering', 'confirm_rm_user' => 'Vill du verkligen ta bort användaren "[username]"?
OBS! Åtgärden kan inte ångras!', @@ -319,6 +320,7 @@ URL: [url]', 'current_version' => 'Aktuell version', 'daily' => 'Dagligen', 'databasesearch' => 'Sök databas', +'database_schema_version' => '', 'date' => 'Datum', 'days' => 'dagar', 'debug' => 'Felsökning', @@ -675,6 +677,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Kopiera lista för behörighetsarv', 'inherits_access_empty_msg' => 'Börja med tom behörighetslista', 'inherits_access_msg' => 'Behörigheten har ärvts.', +'installed_php_extensions' => '', 'internal_error' => 'Internt fel', 'internal_error_exit' => 'Internt fel. Förfrågan kunde inte utföras.', 'invalid_access_mode' => 'Ogiltig behörighetsnivå', @@ -790,6 +793,7 @@ URL: [url]', 'missing_checksum' => 'Checksumma saknas', 'missing_file' => 'Fil saknas', 'missing_filesize' => 'Filstorlek saknas', +'missing_php_extensions' => '', 'missing_reception' => 'Mottagande saknas', 'missing_request_object' => 'Begärt objekt saknas', 'missing_transition_user_group' => 'Användare/grupp saknas för övergång', @@ -946,6 +950,7 @@ Om du fortfarande har problem med inloggningen, kontakta administratören.', 'pending_revision' => 'Förestående revisioner', 'pending_workflows' => 'Förestående arbetsflöden', 'personal_default_keywords' => 'Personlig nyckelordslista', +'php_info' => '', 'pl_PL' => 'Polska', 'possible_substitutes' => 'Alternativ', 'preset_expires' => 'Förinställd utgångstid', @@ -1129,6 +1134,7 @@ URL: [url]', 'rm_from_clipboard' => 'Ta bort från Urklipp', 'rm_group' => 'Ta bort denna grupp', 'rm_role' => 'Ta bort denna roll', +'rm_task' => '', 'rm_transmittal' => '', 'rm_transmittalitem' => '', 'rm_user' => 'Ta bort denna användare', @@ -1183,6 +1189,8 @@ URL: [url]', 'search_results_access_filtered' => 'Sökresultatet kan innehålla filer/dokument som du inte har behörighet att öppna.', 'search_time' => 'Förfluten tid: [time] sek', 'seconds' => 'sekunder', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Urval', 'select_attrdefgrp_show' => 'Välj visingsalternativ', 'select_attribute_value' => '', @@ -1241,6 +1249,12 @@ Kommentar: [comment]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Inställningar för autentisering', 'settings_autoLoginUser' => 'Automatisk inloggning', 'settings_autoLoginUser_desc' => 'Använd detta användar-ID för åtkomst om inte användaren redan är inloggad. Denna typ av inloggning kommer inte att skapa en session.', @@ -1621,6 +1635,7 @@ Kommentar: [comment]', 'splash_add_group' => 'Ny grupp tillagd', 'splash_add_group_member' => 'Ny gruppmedlem tillagt', 'splash_add_role' => 'Lägg till ny roll', +'splash_add_task' => '', 'splash_add_to_transmittal' => 'Lägg till meddelande', 'splash_add_transmittal' => 'Meddelande tillagt', 'splash_add_user' => 'Ny användare tillagd', @@ -1917,6 +1932,7 @@ URL: [url]', 'workflow_state_in_use' => 'Denna status används i ett arbetsflöde.', 'workflow_state_name' => 'Namn', 'workflow_summary' => 'Sammanfattning arbetsflöde', +'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_filetype' => '', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index b3eb7ba27..35eb51282 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -19,14 +19,14 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1107), aydin (83) +// Translators: Admin (1109), aydin (83) $text = array( '2_factor_auth' => 'İki faktörlü yetkilendirme', '2_factor_auth_info' => '', '2_fact_auth_secret' => '', 'accept' => 'Kabul', -'access_control' => '', +'access_control' => 'Erişim Kontrolü', 'access_control_is_off' => '', 'access_denied' => 'Erişim engellendi.', 'access_inheritance' => 'Devredilen Erişim', @@ -288,6 +288,7 @@ URL: [url]', 'confirm_rm_folder_files' => '"[foldername]" klasöründeki tüm dosyaları ve alt klasörleri silmeyi onaylıyor musunuz?
Dikkatli olun: Bu eylemin geri dönüşü yoktur.', 'confirm_rm_group' => '"[groupname]" grubunu silmeyi onaylıyor musunuz?
Dikkatli olun: Bu eylemin geri dönüşü yoktur.', 'confirm_rm_log' => '"[logname]" log dosyasını silmeyi onaylıyor musunuz?
Dikkatli olun: Bu eylemin geri dönüşü yoktur.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => '', 'confirm_rm_user' => '"[username]" kullanıcısını silmeyi onaylıyor musunuz?
Dikkatli olun: Bu eylemin geri dönüşü yoktur.', @@ -312,6 +313,7 @@ URL: [url]', 'current_version' => 'Mevcut versiyon', 'daily' => 'Günlük', 'databasesearch' => 'Veritabanı arama', +'database_schema_version' => '', 'date' => 'Tarih', 'days' => 'gün', 'debug' => '', @@ -643,7 +645,7 @@ URL: [url]', 'import_extension' => '', 'import_fs' => 'dosya sisteminden getir', 'import_fs_warning' => '', -'import_users' => '', +'import_users' => 'Kullanıcıları İçe Aktar', 'import_users_update' => '', 'include_content' => '', 'include_documents' => 'Dokümanları kapsa', @@ -663,6 +665,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Devralınan erişim listesini kopyala', 'inherits_access_empty_msg' => 'Boş erişim listesiyle başla', 'inherits_access_msg' => 'Erişim devralınıyor', +'installed_php_extensions' => '', 'internal_error' => 'İç hata', 'internal_error_exit' => 'İç hata. İstek tamamlanmadı.', 'invalid_access_mode' => 'Gereçsiz Erişim Modu', @@ -778,6 +781,7 @@ URL: [url]', 'missing_checksum' => 'Sağlama toplamı eksik', 'missing_file' => '', 'missing_filesize' => 'Dosya boyutu eksik', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => 'Geçiş için kullanıcı/grup bilgisi eksik', @@ -939,6 +943,7 @@ Giriş yaparken halen sorun yaşıyorsanız lütfen sistem yöneticinizle görü 'pending_revision' => '', 'pending_workflows' => '', 'personal_default_keywords' => 'Kişisel anahtar kelimeler', +'php_info' => '', 'pl_PL' => 'Polonyaca', 'possible_substitutes' => '', 'preset_expires' => 'Son Kullanım Tarihi Tanımla', @@ -1100,6 +1105,7 @@ URL: [url]', 'rm_from_clipboard' => 'Panodan sil', 'rm_group' => 'Bu grubu sil', 'rm_role' => '', +'rm_task' => '', 'rm_transmittal' => '', 'rm_transmittalitem' => '', 'rm_user' => 'Bu kullanıcıyı sil', @@ -1154,6 +1160,8 @@ URL: [url]', 'search_results_access_filtered' => 'Arama sonuçları içerisinde erişimin kısıtlandığı içerik bulunabilir.', 'search_time' => 'Arama süresi: [time] sn.', 'seconds' => 'saniye', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Seçim', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1207,6 +1215,12 @@ URL: [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Yetkilendirme ayarları', 'settings_autoLoginUser' => 'otomatik giriş', 'settings_autoLoginUser_desc' => '', @@ -1587,6 +1601,7 @@ URL: [url]', 'splash_add_group' => 'Yeni grup eklendi', 'splash_add_group_member' => 'Yeni grup üyesi eklendi', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => 'Yeni kullanıcı eklendi', @@ -1883,6 +1898,7 @@ URL: [url]', 'workflow_state_in_use' => 'Bu durum iş akışı tarafından kullanımda.', 'workflow_state_name' => 'İsim', 'workflow_summary' => 'İş akış özeti', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Kullanıcı özeti', 'wrong_filetype' => '', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 512c3a5c5..947a43c58 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => 'Видалити в каталозі «[foldername]» всі файли і підкаталоги?
Дія незворотня', 'confirm_rm_group' => 'Видалити групу «[groupname]»?
Дія незворотня', 'confirm_rm_log' => 'Видалити журнал «[logname]»?
Дія незворотня', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => 'Підтвердити видалення', 'confirm_rm_user' => 'Видалити користувача «[username]»?
Дія незворотня', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => 'Поточна версія', 'daily' => 'Щоденно', 'databasesearch' => 'Пошук по БД', +'database_schema_version' => '', 'date' => 'Дата', 'days' => 'дні', 'debug' => '', @@ -669,6 +671,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Скопіювати успадкований список', 'inherits_access_empty_msg' => 'Почати з порожнього списку доступу', 'inherits_access_msg' => 'Доступ успадковано.', +'installed_php_extensions' => '', 'internal_error' => 'Внутрішня помилка', 'internal_error_exit' => 'Внутрішня помилка. Неможливо виконати запит.', 'invalid_access_mode' => 'Невірний рівень доступу', @@ -784,6 +787,7 @@ URL: [url]', 'missing_checksum' => 'Відсутня контрольна сума', 'missing_file' => 'Відсутній файл', 'missing_filesize' => 'Відсутній розмір файлу', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => 'Відсутній користувач/група для зміни.', @@ -940,6 +944,7 @@ URL: [url]', 'pending_revision' => '', 'pending_workflows' => 'Очікує процес', 'personal_default_keywords' => 'Особистий список ключових слів', +'php_info' => '', 'pl_PL' => 'Polish', 'possible_substitutes' => 'Підстановки', 'preset_expires' => '', @@ -1121,6 +1126,7 @@ URL: [url]', 'rm_from_clipboard' => 'Видалити з буферу обміну', 'rm_group' => 'Видалити групу', 'rm_role' => '', +'rm_task' => '', 'rm_transmittal' => 'Видалити передачу', 'rm_transmittalitem' => 'Видалити елемент передачі', 'rm_user' => 'Видалити користувача', @@ -1175,6 +1181,8 @@ URL: [url]', 'search_results_access_filtered' => 'Результати пошуку можуть містити об\'єкти, до яких у вас немає доступу', 'search_time' => 'Пройшло: [time] с', 'seconds' => 'секунди', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => 'Вибір', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1228,6 +1236,12 @@ URL: [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => 'Apache — модуль Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => 'Налаштування авторизації', 'settings_autoLoginUser' => 'Автоматичний вхід', 'settings_autoLoginUser_desc' => 'Використовувати цього користувача для доступу, якщо користувач не увійшов в систему. Такий доступ не буде створювати сеанс.', @@ -1608,6 +1622,7 @@ URL: [url]', 'splash_add_group' => 'Додана нова група', 'splash_add_group_member' => 'Додано нового члена групи', 'splash_add_role' => '', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => 'Додано нового користувача', @@ -1904,6 +1919,7 @@ URL: [url]', 'workflow_state_in_use' => 'Цей статус використовується в процесах.', 'workflow_state_name' => 'Назва', 'workflow_summary' => 'Підсумки по процесу', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Підсумки по користувачу', 'wrong_filetype' => '', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 060a562d7..ed5c80d65 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -286,6 +286,7 @@ URL: [url]', 'confirm_rm_folder_files' => '您确定要删除"[foldername]" 中所有文件及其子文件夹?
请注意:此动作执行后不能撤销.', 'confirm_rm_group' => '您确定要删除"[groupname]"组?
请注意:此动作执行后不能撤销.', 'confirm_rm_log' => '您确定要删除"[logname]"日志文件?
请注意:此动作执行后不能撤销.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '', 'confirm_rm_transmittalitem' => '确认删除', 'confirm_rm_user' => '您确定要删除"[username]"用户?
请注意:此动作执行后不能撤销.', @@ -312,6 +313,7 @@ URL: [url]', 'current_version' => '当前版本', 'daily' => '天', 'databasesearch' => '数据库搜索', +'database_schema_version' => '', 'date' => '日期', 'days' => '天', 'debug' => '调试', @@ -659,6 +661,7 @@ URL: [url]', 'inherits_access_copy_msg' => '复制继承访问权限列表', 'inherits_access_empty_msg' => '从访问权限空列表开始', 'inherits_access_msg' => '继承访问权限', +'installed_php_extensions' => '', 'internal_error' => '内部错误', 'internal_error_exit' => '内部错误.无法完成请求.离开系统', 'invalid_access_mode' => '无效访问模式', @@ -774,6 +777,7 @@ URL: [url]', 'missing_checksum' => '缺失校验', 'missing_file' => '', 'missing_filesize' => '缺失文件大小', +'missing_php_extensions' => '', 'missing_reception' => '', 'missing_request_object' => '', 'missing_transition_user_group' => '', @@ -933,6 +937,7 @@ URL: [url]', 'pending_revision' => '待处理的修订', 'pending_workflows' => '待处理的工作流', 'personal_default_keywords' => '用户关键字', +'php_info' => '', 'pl_PL' => '波兰语', 'possible_substitutes' => '', 'preset_expires' => '预设失效时间', @@ -1091,6 +1096,7 @@ URL: [url]', 'rm_from_clipboard' => '从剪切板删除', 'rm_group' => '删除该组', 'rm_role' => '删除角色', +'rm_task' => '', 'rm_transmittal' => '', 'rm_transmittalitem' => '移除项目', 'rm_user' => '删除该用户', @@ -1145,6 +1151,8 @@ URL: [url]', 'search_results_access_filtered' => '搜索到得结果中可能包含受限访问的文档', 'search_time' => '耗时:[time]秒', 'seconds' => '秒', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => '选择', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', @@ -1203,6 +1211,12 @@ URL: [url]', 'settings_allowReviewerOnly' => '', 'settings_allowReviewerOnly_desc' => '', 'settings_apache_mod_rewrite' => '', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => '授权管理', 'settings_autoLoginUser' => '自动登陆', 'settings_autoLoginUser_desc' => '', @@ -1583,6 +1597,7 @@ URL: [url]', 'splash_add_group' => '组已添加', 'splash_add_group_member' => '组成员已添加', 'splash_add_role' => '添加新角色', +'splash_add_task' => '', 'splash_add_to_transmittal' => '', 'splash_add_transmittal' => '', 'splash_add_user' => '用户已添加', @@ -1870,6 +1885,7 @@ URL: [url]', 'workflow_state_in_use' => '当前状态在工作流中已被使用。', 'workflow_state_name' => '状态名称', 'workflow_summary' => '工作流概述', +'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '用户概述', 'wrong_filetype' => '', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index f56c78b8a..4cfa14779 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -294,6 +294,7 @@ URL: [url]', 'confirm_rm_folder_files' => '您確定要刪除"[foldername]" 中所有檔及其子資料夾?
請注意:此動作執行後不能撤銷.', 'confirm_rm_group' => '您確定要刪除"[groupname]"組?
請注意:此動作執行後不能撤銷.', 'confirm_rm_log' => '您確定要刪除"[logname]"日誌檔?
請注意:此動作執行後不能撤銷.', +'confirm_rm_task' => '', 'confirm_rm_transmittal' => '請確認刪除傳送的內容。', 'confirm_rm_transmittalitem' => '確認移除', 'confirm_rm_user' => '您確定要刪除"[username]"使用者?
請注意:此動作執行後不能撤銷.', @@ -318,6 +319,7 @@ URL: [url]', 'current_version' => '當前版本', 'daily' => '每日', 'databasesearch' => '資料庫搜索', +'database_schema_version' => '', 'date' => '日期', 'days' => '天數', 'debug' => '除錯', @@ -688,6 +690,7 @@ URL: [url]', 'inherits_access_copy_msg' => '複製繼承存取權限列表', 'inherits_access_empty_msg' => '從存取權限空列表開始', 'inherits_access_msg' => '繼承存取權限', +'installed_php_extensions' => '', 'internal_error' => '內部錯誤', 'internal_error_exit' => '內部錯誤.無法完成請求.離開系統', 'invalid_access_mode' => '無效訪問模式', @@ -803,6 +806,7 @@ URL: [url]', 'missing_checksum' => '缺少校驗', 'missing_file' => '缺少檔案', 'missing_filesize' => '缺少檔案大小', +'missing_php_extensions' => '', 'missing_reception' => '缺少接待處', 'missing_request_object' => '缺少請求物件', 'missing_transition_user_group' => '缺少傳送的使用者/群組', @@ -960,6 +964,7 @@ URL: [url]', 'pending_revision' => '待修訂', 'pending_workflows' => '待處理的工作流程', 'personal_default_keywords' => '使用者關鍵字', +'php_info' => '', 'pl_PL' => '波蘭語', 'possible_substitutes' => '替代品', 'preset_expires' => '預設到期日', @@ -1154,6 +1159,7 @@ URL: [url]', 'rm_from_clipboard' => '從剪貼板中刪除', 'rm_group' => '刪除該組', 'rm_role' => '刪除這個角色', +'rm_task' => '', 'rm_transmittal' => '刪除傳送', 'rm_transmittalitem' => '移除項目', 'rm_user' => '刪除該使用者', @@ -1208,6 +1214,8 @@ URL: [url]', 'search_results_access_filtered' => '搜索到得結果中可能包含受限訪問的文件', 'search_time' => '耗時:[time]秒', 'seconds' => '秒', +'seeddms_info' => '', +'seeddms_version' => '', 'selection' => '選擇', 'select_attrdefgrp_show' => '選擇當展示時', 'select_attribute_value' => '選擇屬性值', @@ -1266,6 +1274,12 @@ URL: [url]', 'settings_allowReviewerOnly' => '只允許設置審閱者', 'settings_allowReviewerOnly_desc' => '如果允許在傳統的工作流程模式下僅設置審閱者而不設置批准者,則啟用此功能。', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', +'settings_apiKey' => '', +'settings_apiKey_desc' => '', +'settings_apiOrigin' => '', +'settings_apiOrigin_desc' => '', +'settings_apiUserId' => '', +'settings_apiUserId_desc' => '', 'settings_Authentication' => '認證設定', 'settings_autoLoginUser' => '自動登入', 'settings_autoLoginUser_desc' => '如果用戶尚未登錄,請使用此用戶ID進行訪問。這種訪問不會創建會話。', @@ -1646,6 +1660,7 @@ URL: [url]', 'splash_add_group' => '新增群組', 'splash_add_group_member' => '新群組會員新增', 'splash_add_role' => '新增一個角色', +'splash_add_task' => '', 'splash_add_to_transmittal' => '新增到傳送', 'splash_add_transmittal' => '加入傳送', 'splash_add_user' => '新增新的使用者', @@ -1942,6 +1957,7 @@ URL: [url]', 'workflow_state_in_use' => '正在使用之流程狀態', 'workflow_state_name' => '流程狀態名稱', 'workflow_summary' => '工作流程摘要', +'workflow_title' => '', 'workflow_transition_without_user_group' => '至少有一個過渡既沒有用戶也沒有組!', 'workflow_user_summary' => '使用者摘要', 'wrong_filetype' => '錯誤的檔案類型', diff --git a/op/op.Cron.php b/op/op.Cron.php index b25b1584c..e9b56b111 100644 --- a/op/op.Cron.php +++ b/op/op.Cron.php @@ -26,6 +26,8 @@ include("../inc/inc.Utils.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("../inc/inc.Scheduler.php"); @@ -33,6 +35,7 @@ $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms)); $controller->setParam('settings', $settings); +header("Content-Type: text/plain"); if(!$controller->run()) { echo getMLText("error_occured"); exit; diff --git a/op/op.ImportUsers.php b/op/op.ImportUsers.php index 2c6d3e820..1ef99467a 100644 --- a/op/op.ImportUsers.php +++ b/op/op.ImportUsers.php @@ -26,19 +26,28 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); -if (isset($_FILES['userdata']) && $_FILES['userdata']['error'] == 0) { - if(!is_uploaded_file($_FILES["userdata"]["tmp_name"])) - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); - - if($_FILES["userdata"]["size"] == 0) - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_zerosize")); -} - function getBaseData($colname, $coldata, $objdata) { /* {{{ */ $objdata[$colname] = $coldata; return $objdata; } /* }}} */ +function getQuotaData($colname, $coldata, $objdata) { /* {{{ */ + $objdata[$colname] = SeedDMS_Core_File::parse_filesize($coldata); + return $objdata; +} /* }}} */ + +function getFolderData($colname, $coldata, $objdata) { /* {{{ */ + global $dms; + if($coldata) { + if($folder = $dms->getFolder((int)$coldata)) { + $objdata['homefolder'] = $folder; + } + } else { + $objdata['homefolder'] = null; + } + return $objdata; +} /* }}} */ + function getGroupData($colname, $coldata, $objdata) { /* {{{ */ global $dms; if($group = $dms->getGroupByName($coldata)) { @@ -62,6 +71,18 @@ function getRoleData($colname, $coldata, $objdata) { /* {{{ */ return $objdata; } /* }}} */ +if (!$user->isAdmin()) { + UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); +} + +$log = array(); +if (isset($_FILES['userdata']) && $_FILES['userdata']['error'] == 0) { + if(!is_uploaded_file($_FILES["userdata"]["tmp_name"])) + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); + + if($_FILES["userdata"]["size"] == 0) + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_zerosize")); + $csvdelim = ';'; $csvencl = '"'; if($fp = fopen($_FILES['userdata']['tmp_name'], 'r')) { @@ -73,6 +94,10 @@ function getRoleData($colname, $coldata, $objdata) { /* {{{ */ $colmap[$i] = array("getGroupData", $colname); } elseif(in_array($colname, array('role'))) { $colmap[$i] = array("getRoleData", $colname); + } elseif(in_array($colname, array('homefolder'))) { + $colmap[$i] = array("getFolderData", $colname); + } elseif(in_array($colname, array('quota'))) { + $colmap[$i] = array("getQuotaData", $colname); } elseif(in_array($colname, array('login', 'name', 'email', 'comment', 'group'))) { $colmap[$i] = array("getBaseData", $colname); } elseif(substr($colname, 0, 5) == 'attr:') { @@ -103,32 +128,69 @@ function getRoleData($colname, $coldata, $objdata) { /* {{{ */ } } // print_r($newusers); + $makeupdate = !empty($_POST['update']); foreach($newusers as $u) { if($eu = $dms->getUserByLogin($u['login'])) { - if(!empty($_POST['update'])) { - if(isset($u['name'])) + if(isset($u['name']) && $u['name'] != $eu->getFullName()) { + $log[] = array('id'=>$eu->getLogin(), 'type'=>'success', 'msg'=> "Name of user updated. '".$u['name']."' != '".$eu->getFullName()."'"); + if($makeupdate) $eu->setFullName($u['name']); - if(isset($u['email'])) + } + if(isset($u['email']) && $u['email'] != $eu->getEmail()) { + $log[] = array('id'=>$eu->getLogin(), 'type'=>'success', 'msg'=> "Email of user updated. '".$u['email']."' != '".$eu->getEmail()."'"); + if($makeupdate) $eu->setEmail($u['email']); - if(isset($u['comment'])) + } + if(isset($u['comment'])) { + $log[] = array('id'=>$eu->getLogin(), 'type'=>'success', 'msg'=> "Comment of user updated. '".$u['comment']."' != '".$eu->getComment()."'"); + if($makeupdate) $eu->setComment($u['comment']); - if(isset($u['language'])) + } + if(isset($u['language'])) { + $log[] = array('id'=>$eu->getLogin(), 'type'=>'success', 'msg'=> "Language of user updated. '".$u['language']."' != '".$eu->getLanguage()."'"); + if($makeupdate) $eu->setLanguage($u['language']); - if(isset($u['groups'])) { + } + if(isset($u['quota'])) { + $log[] = array('id'=>$eu->getLogin(), 'type'=>'success', 'msg'=> "Quota of user updated. '".$u['quota']."' != '".$eu->getQuota()."'"); + if($makeupdate) + $eu->setQuota($u['language']); + } + if(isset($u['homefolder'])) { + $log[] = array('id'=>$eu->getLogin(), 'type'=>'success', 'msg'=> "Homefolder of user updated. '".($u['homefolder'] ? $u['homefolder']->getId() : '')."' != '".($eu->getHomeFolder() ? $eu->getHomeFolder()->getId() : '')."'"); + if($makeupdate) + $eu->setHomeFolder($u['homefolder']); + } + if(isset($u['groups'])) { + $func = function($o) {return $o->getID();}; + $log[] = array('id'=>$eu->getLogin(), 'type'=>'success', 'msg'=> "Groups of user updated. '".implode(',',array_map($func, $u['groups']))."' != '".implode(',',array_map($func, $eu->getGroups()))."'"); + if($makeupdate) { foreach($eu->getGroups() as $g) $eu->leaveGroup($g); foreach($u['groups'] as $g) $eu->joinGroup($g); } } + $log[] = array('id'=>$eu->getLogin(), 'type'=>'success', 'msg'=> "User '".$u['name']."' updated."); } else { - if(!empty($u['login']) && !empty($u['name']) && !empty($u['email'])) { - $ret = $dms->addUser($u['login'], '', $u['name'], $u['email'], !empty($u['language']) ? $u['language'] : 'en_GB', 'bootstrap', !empty($u['comment']) ? $u['comment'] : '', $u['role']); - var_dump($ret); + if(!empty($_POST['addnew'])) { + if(!empty($u['login']) && !empty($u['name']) && !empty($u['email'])) { + $ret = $dms->addUser($u['login'], '', $u['name'], $u['email'], !empty($u['language']) ? $u['language'] : 'en_GB', 'bootstrap', !empty($u['comment']) ? $u['comment'] : '', $u['role']); + var_dump($ret); + } } + $log[] = array('id'=>$u['login'], 'type'=>'success', 'msg'=> "User '".$u['name']."' added."); } } } } +} + +$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); +$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); +if($view) { + $view->setParam('log', $log); + $view($_GET); + exit; +} -//header("Location:../out/out.ViewFolder.php?folderid=".$newfolder->getID()); diff --git a/op/op.SchedulerTaskMgr.php b/op/op.SchedulerTaskMgr.php index 8b327b468..45589660b 100644 --- a/op/op.SchedulerTaskMgr.php +++ b/op/op.SchedulerTaskMgr.php @@ -52,9 +52,10 @@ if ($action == "addtask") { /* {{{ */ $name = $_POST["name"]; $description = $_POST["description"]; $frequency = $_POST["frequency"]; + $disabled = isset($_POST["disabled"]) ? $_POST["disabled"] : 0; $params = $_POST["params"]; - $newtask = $scheduler->addTask($extension, $task, $name, $description, $frequency, 0, $params); + $newtask = $scheduler->addTask($extension, $task, $name, $description, $frequency, $disabled, $params); if ($newtask) { } else UI::exitError(getMLText("admin_tools"),getMLText("error_occured")); diff --git a/op/op.Settings.php b/op/op.Settings.php index c5165ccd5..9aecb6e6d 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -187,6 +187,9 @@ if ($action == "saveSettings") // SETTINGS - ADVANCED - AUTHENTICATION $settings->_guestID = intval($_POST["guestID"]); $settings->_adminIP = $_POST["adminIP"]; + $settings->_apiKey = strval($_POST["apiKey"]); + $settings->_apiUserId = intval($_POST["apiUserId"]); + $settings->_apiOrigin = strval($_POST["apiOrigin"]); // SETTINGS - ADVANCED - EDITION $settings->_versioningFileName = $_POST["versioningFileName"]; diff --git a/out/out.ApprovalSummary.php b/out/out.ApprovalSummary.php index 70b4e413c..e2c54d878 100644 --- a/out/out.ApprovalSummary.php +++ b/out/out.ApprovalSummary.php @@ -44,7 +44,7 @@ if($view) { $view->setParam('showtree', showtree()); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('accessobject', $accessop); $view->setParam('xsendfile', $settings->_enableXsendfile); diff --git a/out/out.DocumentChooser.php b/out/out.DocumentChooser.php index ff498d6c1..5a5fcba92 100644 --- a/out/out.DocumentChooser.php +++ b/out/out.DocumentChooser.php @@ -54,9 +54,9 @@ if(isset($_GET['action']) && $_GET['action'] == 'subtree') { $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); if($view) { + $view->setParam('orderby', $settings->_sortFoldersDefault); if(isset($_GET['action']) && $_GET['action'] == 'subtree') { $view->setParam('node', $node); - $view->setParam('orderby', $settings->_sortFoldersDefault); } else { $view->setParam('folder', $folder); $view->setParam('form', $form); diff --git a/out/out.DocumentVersionDetail.php b/out/out.DocumentVersionDetail.php index ef0372644..b578456ae 100644 --- a/out/out.DocumentVersionDetail.php +++ b/out/out.DocumentVersionDetail.php @@ -76,7 +76,7 @@ if($view) { $view->setParam('viewonlinefiletypes', $settings->_viewOnlineFileTypes); $view->setParam('enableversionmodification', $settings->_enableVersionModification); $view->setParam('previewWidthDetail', $settings->_previewWidthDetail); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('showFullPreview', $settings->_showFullPreview); $view->setParam('convertToPdf', $settings->_convertToPdf); $view->setParam('cachedir', $settings->_cacheDir); diff --git a/out/out.ManageNotify.php b/out/out.ManageNotify.php index d38ac4f4d..dfc4935e2 100644 --- a/out/out.ManageNotify.php +++ b/out/out.ManageNotify.php @@ -38,7 +38,7 @@ if ($user->isGuest()) { if($view) { $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('accessobject', $accessop); $view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax diff --git a/out/out.MyDocuments.php b/out/out.MyDocuments.php index e053511e4..7c1d1f4d2 100644 --- a/out/out.MyDocuments.php +++ b/out/out.MyDocuments.php @@ -64,7 +64,7 @@ if($view) { $view->setParam('workflowmode', $settings->_workflowMode); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('accessobject', $accessop); $view->setParam('xsendfile', $settings->_enableXsendfile); diff --git a/out/out.ObjectCheck.php b/out/out.ObjectCheck.php index 873a3aa41..f4514164e 100644 --- a/out/out.ObjectCheck.php +++ b/out/out.ObjectCheck.php @@ -239,8 +239,6 @@ if($view) { $view->setParam('rootfolder', $rootfolder); $view->setParam('repairobjects', $repairobjects); $view->setParam('cachedir', $settings->_cacheDir); - $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('accessobject', $accessop); $view->setParam('previewWidthList', $settings->_previewWidthList); diff --git a/out/out.ReceiptSummary.php b/out/out.ReceiptSummary.php index 2d51e49e8..db3e4e26e 100644 --- a/out/out.ReceiptSummary.php +++ b/out/out.ReceiptSummary.php @@ -43,7 +43,7 @@ if($view) { $view->setParam('showtree', showtree()); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('accessobject', $accessop); $view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax diff --git a/out/out.ReviewSummary.php b/out/out.ReviewSummary.php index 70b4e413c..e2c54d878 100644 --- a/out/out.ReviewSummary.php +++ b/out/out.ReviewSummary.php @@ -44,7 +44,7 @@ if($view) { $view->setParam('showtree', showtree()); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('accessobject', $accessop); $view->setParam('xsendfile', $settings->_enableXsendfile); diff --git a/out/out.RevisionSummary.php b/out/out.RevisionSummary.php index 91140afd7..1ebffba34 100644 --- a/out/out.RevisionSummary.php +++ b/out/out.RevisionSummary.php @@ -44,7 +44,7 @@ if($view) { $view->setParam('showtree', showtree()); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('accessobject', $accessop); $view->setParam('xsendfile', $settings->_enableXsendfile); diff --git a/out/out.Search.php b/out/out.Search.php index 6c982d910..b9e892250 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -501,7 +501,7 @@ if($settings->_showSingleSearchHit && count($entries) == 1) { $view->setParam('workflowmode', $settings->_workflowMode); $view->setParam('enablefullsearch', $settings->_enableFullSearch); $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('xsendfile', $settings->_enableXsendfile); $view->setParam('reception', $reception); diff --git a/out/out.TransmittalMgr.php b/out/out.TransmittalMgr.php index 3ce4fd276..7d788635e 100644 --- a/out/out.TransmittalMgr.php +++ b/out/out.TransmittalMgr.php @@ -51,7 +51,7 @@ if($view) { $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('accessobject', $accessop); $view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax $view($_GET); diff --git a/out/out.WorkflowSummary.php b/out/out.WorkflowSummary.php index d1dc2ac32..062765122 100644 --- a/out/out.WorkflowSummary.php +++ b/out/out.WorkflowSummary.php @@ -44,7 +44,7 @@ if($view) { $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('workflowmode', $settings->_workflowMode); $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('previewconverters', $settings->_converters['preview']); + $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array()); $view->setParam('timeout', $settings->_cmdTimeout); $view->setParam('accessobject', $accessop); $view->setParam('xsendfile', $settings->_enableXsendfile); diff --git a/restapi/.htaccess b/restapi/.htaccess new file mode 100644 index 000000000..edeafcef4 --- /dev/null +++ b/restapi/.htaccess @@ -0,0 +1,10 @@ +RewriteEngine on +RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + + +Header set Access-Control-Allow-Origin "*" +Header set Access-Control-Allow-Methods "GET" +Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Accept, Origin, Authorization" + + diff --git a/restapi/index.php b/restapi/index.php index c437dd9cd..9293bd7c8 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -1,6 +1,4 @@ getUser($_SESSION['userid']); - elseif($settings->_enableGuestLogin) - $userobj = $dms->getUser($settings->_guestID); - else - exit; - $dms->setUser($userobj); -} else { - $headers = apache_request_headers(); - if(isset($headers['Authorization'])) { - if($apikey = $dms->getApiKeyByApiKey($headers['Authorization'])) { - if(!($userobj = $apikey->getUser())) { - http_response_code(403); - exit; - } - } else { - http_response_code(403); - exit; - } - } else { - require_once("../inc/inc.ClassSession.php"); - $session = new SeedDMS_Session($db); - if (isset($_COOKIE["mydms_session"])) { - $dms_session = $_COOKIE["mydms_session"]; - if(!$resArr = $session->load($dms_session)) { - /* Delete Cookie */ - setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot); - if($settings->_enableGuestLogin) - $userobj = $dms->getUser($settings->_guestID); - else - exit; - } - - /* Load user data */ - $userobj = $dms->getUser($resArr["userID"]); - if (!is_object($userobj)) { - /* Delete Cookie */ - setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot); - if($settings->_enableGuestLogin) - $userobj = $dms->getUser($settings->_guestID); - else - exit; - } - if($userobj->isAdmin()) { - if($resArr["su"]) { - $userobj = $dms->getUser($resArr["su"]); - } - } - $dms->setUser($userobj); - } - } -} - require "vendor/autoload.php"; -function __getLatestVersionData($lc) { /* {{{ */ - $document = $lc->getDocument(); - $data = array( - 'type'=>'document', - 'id'=>(int)$document->getId(), - 'date'=>date('Y-m-d H:i:s', $document->getDate()), - 'name'=>$document->getName(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'version_comment'=>$lc->getComment(), - 'version_date'=>$lc->getDate(), - 'size'=>$lc->getFileSize(), - ); - $cats = $document->getCategories(); - if($cats) { - $c = array(); - foreach($cats as $cat) { - $c[] = array('id'=>(int)$cat->getID(), 'name'=>$cat->getName()); - } - $data['categories'] = $c; +use Psr\Container\ContainerInterface; + +class RestapiController { /* {{{ */ + protected $container; + + // constructor receives container instance + public function __construct(ContainerInterface $container) { + $this->container = $container; } - $attributes = $document->getAttributes(); - if($attributes) { - $attrvalues = array(); - foreach($attributes as $attrdefid=>$attribute) - $attrvalues[] = array('id'=>(int)$attrdefid, 'value'=>$attribute->getValue()); - $data['attributes'] = $attrvalues; - } - $attributes = $lc->getAttributes(); - if($attributes) { - $attrvalues = array(); - foreach($attributes as $attrdefid=>$attribute) - $attrvalues[] = array('id'=>(int)$attrdefid, 'value'=>$attribute->getValue()); - $data['version-attributes'] = $attrvalues; - } - return $data; -} /* }}} */ -function __getFolderData($folder) { /* {{{ */ - $data = array( - 'type'=>'folder', - 'id'=>(int)$folder->getID(), - 'name'=>$folder->getName(), - 'comment'=>$folder->getComment(), - 'date'=>date('Y-m-d H:i:s', $folder->getDate()), - ); - $attributes = $folder->getAttributes(); - if($attributes) { - $attrvalues = array(); - foreach($attributes as $attrdefid=>$attribute) - $attrvalues[] = array('id'=>(int)$attrdefid, 'value'=>$attribute->getValue()); - $data['attributes'] = $attrvalues; - } - return $data; -} /* }}} */ - -function __getGroupData($u) { /* {{{ */ - $data = array( - 'type'=>'group', - 'id'=>(int)$u->getID(), - 'name'=>$u->getName(), - 'comment'=>$u->getComment(), - ); - return $data; -} /* }}} */ - -function __getUserData($u) { /* {{{ */ - $data = array( - 'type'=>'user', - 'id'=>(int)$u->getID(), - 'name'=>$u->getFullName(), - 'comment'=>$u->getComment(), - 'login'=>$u->getLogin(), - 'email'=>$u->getEmail(), - 'language' => $u->getLanguage(), - 'theme' => $u->getTheme(), -// 'role' => $u->getRole() == SeedDMS_Core_User::role_admin ? 'admin' : ($u->getRole() == SeedDMS_Core_User::role_guest ? 'guest' : 'user'), - 'role' => array('id'=>$u->getRole()->getId(), 'name'=>$u->getRole()->getName()), - 'hidden'=>$u->isHidden() ? true : false, - 'disabled'=>$u->isDisabled() ? true : false, - 'isguest' => $u->isGuest() ? true : false, - 'isadmin' => $u->isAdmin() ? true : false, - ); - if($u->getHomeFolder()) - $data['homefolder'] = (int)$u->getHomeFolder(); - - $groups = $u->getGroups(); - if($groups) { - $tmp = []; - foreach($groups as $group) - $tmp[] = __getGroupData($group); - $data['groups'] = $tmp; - } - return $data; -} /* }}} */ - -function doLogin($request, $response) { /* {{{ */ - global $dms, $userobj, $session, $settings; - - $params = $request->getParsedBody(); - $username = $params['user']; - $password = $params['pass']; - - if($userobj) - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>__getUserData($userobj)), 200); - -// $userobj = $dms->getUserByLogin($username); - $userobj = null; - - /* Authenticate against LDAP server {{{ */ - if (!$userobj && isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) { - require_once("../inc/inc.ClassLdapAuthentication.php"); - $authobj = new SeedDMS_LdapAuthentication($dms, $settings); - $userobj = $authobj->authenticate($username, $password); + protected function __getDocumentData($document) { /* {{{ */ + $data = array( + 'type'=>'document', + 'id'=>(int)$document->getId(), + 'date'=>date('Y-m-d H:i:s', $document->getDate()), + 'name'=>$document->getName(), + 'comment'=>$document->getComment(), + 'keywords'=>$document->getKeywords() + ); + return $data; } /* }}} */ - /* Authenticate against SeedDMS database {{{ */ - if(!$userobj) { - require_once("../inc/inc.ClassDbAuthentication.php"); - $authobj = new SeedDMS_DbAuthentication($dms, $settings); - $userobj = $authobj->authenticate($username, $password); + protected function __getLatestVersionData($lc) { /* {{{ */ + $document = $lc->getDocument(); + $data = array( + 'type'=>'document', + 'id'=>(int)$document->getId(), + 'date'=>date('Y-m-d H:i:s', $document->getDate()), + 'name'=>$document->getName(), + 'comment'=>$document->getComment(), + 'keywords'=>$document->getKeywords(), + 'ownerid'=>(int) $document->getOwner()->getID(), + 'islocked'=>$document->isLocked(), + 'sequence'=>$document->getSequence(), + 'expires'=>$document->getExpires() ? date('Y-m-d H:i:s', $document->getExpires()) : "", + 'mimetype'=>$lc->getMimeType(), + 'version'=>$lc->getVersion(), + 'version_comment'=>$lc->getComment(), + 'version_date'=>date('Y-m-d H:i:s', $lc->getDate()), + 'size'=>(int) $lc->getFileSize(), + ); + $cats = $document->getCategories(); + if($cats) { + $c = array(); + foreach($cats as $cat) { + $c[] = array('id'=>(int)$cat->getID(), 'name'=>$cat->getName()); + } + $data['categories'] = $c; + } + $attributes = $document->getAttributes(); + if($attributes) { + $attrvalues = array(); + foreach($attributes as $attrdefid=>$attribute) + $attrvalues[] = array('id'=>(int)$attrdefid, 'value'=>$attribute->getValue()); + $data['attributes'] = $attrvalues; + } + $attributes = $lc->getAttributes(); + if($attributes) { + $attrvalues = array(); + foreach($attributes as $attrdefid=>$attribute) + $attrvalues[] = array('id'=>(int)$attrdefid, 'value'=>$attribute->getValue()); + $data['version-attributes'] = $attrvalues; + } + return $data; } /* }}} */ - if(!$userobj) { - if(USE_PHP_SESSION) { - unset($_SESSION['userid']); - } else { - setcookie("mydms_session", $session->getId(), time()-3600, $settings->_httpRoot); + protected function __getDocumentVersionData($lc) { /* {{{ */ + $data = array( + 'id'=>(int) $lc->getId(), + 'version'=>$lc->getVersion(), + 'date'=>date('Y-m-d H:i:s', $lc->getDate()), + 'mimetype'=>$lc->getMimeType(), + 'filetype'=>$lc->getFileType(), + 'origfilename'=>$lc->getOriginalFileName(), + 'size'=>(int) $lc->getFileSize(), + 'comment'=>$lc->getComment(), + ); + return $data; + } /* }}} */ + + protected function __getDocumentFileData($file) { /* {{{ */ + $data = array( + 'id'=>(int)$file->getId(), + 'name'=>$file->getName(), + 'date'=>$file->getDate(), + 'mimetype'=>$file->getMimeType(), + 'comment'=>$file->getComment(), + ); + return $data; + } /* }}} */ + + protected function __getDocumentLinkData($link) { /* {{{ */ + $data = array( + 'id'=>(int)$link->getId(), + 'target'=>$this->__getDocumentData($link->getTarget()), + 'public'=>(boolean)$link->isPublic(), + ); + return $data; + } /* }}} */ + + protected function __getFolderData($folder) { /* {{{ */ + $data = array( + 'type'=>'folder', + 'id'=>(int)$folder->getID(), + 'name'=>$folder->getName(), + 'comment'=>$folder->getComment(), + 'date'=>date('Y-m-d H:i:s', $folder->getDate()), + ); + $attributes = $folder->getAttributes(); + if($attributes) { + $attrvalues = array(); + foreach($attributes as $attrdefid=>$attribute) + $attrvalues[] = array('id'=>(int)$attrdefid, 'value'=>$attribute->getValue()); + $data['attributes'] = $attrvalues; } - return $response->withJson(array('success'=>false, 'message'=>'Login failed', 'data'=>''), 403); - } else { - if(USE_PHP_SESSION) { - $_SESSION['userid'] = $userobj->getId(); + return $data; + } /* }}} */ + + protected function __getGroupData($u) { /* {{{ */ + $data = array( + 'type'=>'group', + 'id'=>(int)$u->getID(), + 'name'=>$u->getName(), + 'comment'=>$u->getComment(), + ); + return $data; + } /* }}} */ + + protected function __getUserData($u) { /* {{{ */ + $data = array( + 'type'=>'user', + 'id'=>(int)$u->getID(), + 'name'=>$u->getFullName(), + 'comment'=>$u->getComment(), + 'login'=>$u->getLogin(), + 'email'=>$u->getEmail(), + 'language' => $u->getLanguage(), + 'theme' => $u->getTheme(), + 'role' => array('id'=>$u->getRole()->getId(), 'name'=>$u->getRole()->getName()), + 'hidden'=>$u->isHidden() ? true : false, + 'disabled'=>$u->isDisabled() ? true : false, + 'isguest' => $u->isGuest() ? true : false, + 'isadmin' => $u->isAdmin() ? true : false, + ); + if($u->getHomeFolder()) + $data['homefolder'] = (int)$u->getHomeFolder(); + + $groups = $u->getGroups(); + if($groups) { + $tmp = []; + foreach($groups as $group) + $tmp[] = $this->__getGroupData($group); + $data['groups'] = $tmp; + } + return $data; + } /* }}} */ + + protected function __getAttributeDefinitionData($attrdef) { /* {{{ */ + $data = [ + 'id' => (int)$attrdef->getId(), + 'name' => $attrdef->getName(), + 'type'=>(int)$attrdef->getType(), + 'objtype'=>(int)$attrdef->getObjType(), + 'min'=>(int)$attrdef->getMinValues(), + 'max'=>(int)$attrdef->getMaxValues(), + 'multiple'=>$attrdef->getMultipleValues()?true:false, + 'valueset'=>$attrdef->getValueSetAsArray(), + 'regex'=>$attrdef->getRegex() + ]; + return $data; + } /* }}} */ + + protected function __getCategoryData($category) { /* {{{ */ + $data = [ + 'id'=>(int)$category->getId(), + 'name'=>$category->getName() + ]; + return $data; + } /* }}} */ + + function doLogin($request, $response) { /* {{{ */ + global $session; + + $dms = $this->container->dms; + $settings = $this->container->config; + + $params = $request->getParsedBody(); + if(empty($params['user']) || empty($params['pass'])) + return $response->withJson(array('success'=>false, 'message'=>'No user or password given', 'data'=>''), 400); + $username = $params['user']; + $password = $params['pass']; + + // $userobj = $dms->getUserByLogin($username); + $userobj = null; + + /* Authenticate against LDAP server {{{ */ + if (!$userobj && isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) { + require_once("../inc/inc.ClassLdapAuthentication.php"); + $authobj = new SeedDMS_LdapAuthentication($dms, $settings); + $userobj = $authobj->authenticate($username, $password); + } /* }}} */ + + /* Authenticate against SeedDMS database {{{ */ + if(!$userobj) { + require_once("../inc/inc.ClassDbAuthentication.php"); + $authobj = new SeedDMS_DbAuthentication($dms, $settings); + $userobj = $authobj->authenticate($username, $password); + } /* }}} */ + + if(!$userobj) { + setcookie("mydms_session", '', time()-3600, $settings->_httpRoot); + return $response->withJson(array('success'=>false, 'message'=>'Login failed', 'data'=>''), 403); } else { + require_once("../inc/inc.ClassSession.php"); + $session = new SeedDMS_Session($dms->getDb()); if(!$id = $session->create(array('userid'=>$userobj->getId(), 'theme'=>$userobj->getTheme(), 'lang'=>$userobj->getLanguage()))) { exit; } @@ -214,1916 +235,2151 @@ function doLogin($request, $response) { /* {{{ */ $lifetime = 0; setcookie("mydms_session", $id, $lifetime, $settings->_httpRoot); $dms->setUser($userobj); + + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getUserData($userobj)), 200); } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>__getUserData($userobj)), 200); - } -} /* }}} */ + } /* }}} */ -function doLogout($request, $response) { /* {{{ */ - global $dms, $userobj, $session, $settings; + function doLogout($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + $settings = $this->container->config; - if(USE_PHP_SESSION) { - unset($_SESSION['userid']); - } else { - setcookie("mydms_session", $session->getId(), time()-3600, $settings->_httpRoot); - } - $userobj = null; - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); -} /* }}} */ + setcookie("mydms_session", '', time()-3600, $settings->_httpRoot); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + } /* }}} */ -function setFullName($request, $response) { /* {{{ */ - global $dms, $userobj; + function setFullName($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - return; - } - - $params = $request->getParsedBody(); - $userobj->setFullName($params['fullname']); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$userobj->getFullName()), 200); -} /* }}} */ - -function setEmail($request, $response) { /* {{{ */ - global $dms, $userobj; - - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - return; - } - - $params = $request->getParsedBody(); - $userobj->setEmail($params['email']); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$userid), 200); -} /* }}} */ - -function getLockedDocuments($request, $response) { /* {{{ */ - global $dms, $userobj; - - if(false !== ($documents = $dms->getDocumentsLockedByUser($userobj))) { - $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); - $recs = array(); - foreach($documents as $document) { - $lc = $document->getLatestContent(); - if($lc) { - $recs[] = __getLatestVersionData($lc); - } + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + return; } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); - } -} /* }}} */ -function getFolder($request, $response, $args) { /* {{{ */ - global $dms, $userobj, $settings; - $params = $request->getQueryParams(); - $forcebyname = isset($params['forcebyname']) ? $params['forcebyname'] : 0; - $parent = isset($params['parentid']) ? $dms->getFolder($params['parentid']) : null; + $params = $request->getParsedBody(); + $userobj->setFullName($params['fullname']); + $data = $this->__getUserData($userobj); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } /* }}} */ - if (!isset($args['id'])) - $folder = $dms->getFolder($settings->_rootFolderID); - elseif(ctype_digit($args['id']) && empty($forcebyname)) - $folder = $dms->getFolder($args['id']); - else { - $folder = $dms->getFolderByName($args['id'], $parent); - } - if($folder) { - if($folder->getAccessMode($userobj) >= M_READ) { - $data = __getFolderData($folder); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); - } else { - return $response->withStatus(404); + function setEmail($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + return; } - } else { - return $response->withStatus(404); - } -} /* }}} */ -function getFolderParent($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - if($id == 0) { - return $response->withJson(array('success'=>true, 'message'=>'id is 0', 'data'=>''), 200); - } - $root = $dms->getRootFolder(); - if($root->getId() == $id) { - return $response->withJson(array('success'=>true, 'message'=>'id is root folder', 'data'=>''), 200); - } - $folder = $dms->getFolder($id); - $parent = $folder->getParent(); - if($parent) { - $rec = __getFolderData($parent); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$rec), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); - } -} /* }}} */ + $params = $request->getParsedBody(); + $userobj->setEmail($params['email']); + $data = $this->__getUserData($userobj); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } /* }}} */ -function getFolderPath($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - if(empty($args['id'])) { - return $response->withJson(array('success'=>true, 'message'=>'id is 0', 'data'=>''), 200); - } - $folder = $dms->getFolder($args['id']); + function getLockedDocuments($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - $path = $folder->getPath(); - $data = array(); - foreach($path as $element) { - $data[] = array('id'=>$element->getId(), 'name'=>$element->getName()); - } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); -} /* }}} */ - -function getFolderAttributes($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $folder = $dms->getFolder($args['id']); - - if($folder) { - if ($folder->getAccessMode($userobj) >= M_READ) { + if(false !== ($documents = $dms->getDocumentsLockedByUser($userobj))) { + $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); $recs = array(); - $attributes = $folder->getAttributes(); - foreach($attributes as $attribute) { - $recs[] = array( - 'id'=>(int)$attribute->getId(), - 'value'=>$attribute->getValue(), - 'name'=>$attribute->getAttributeDefinition()->getName(), - ); + foreach($documents as $document) { + $lc = $document->getLatestContent(); + if($lc) { + $recs[] = $this->__getLatestVersionData($lc); + } } return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); } else { - return $response->withStatus(404); + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); } - } -} /* }}} */ + } /* }}} */ -function getFolderChildren($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - if(empty($args['id'])) { - $folder = $dms->getRootFolder(); - $recs = array(__getFolderData($folder)); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); - } else { + function getFolder($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + $settings = $this->container->config; + + $params = $request->getQueryParams(); + $forcebyname = isset($params['forcebyname']) ? $params['forcebyname'] : 0; + $parent = isset($params['parentid']) ? $dms->getFolder($params['parentid']) : null; + + if (!isset($args['id']) || !$args['id']) + $folder = $dms->getFolder($settings->_rootFolderID); + elseif(ctype_digit($args['id']) && empty($forcebyname)) + $folder = $dms->getFolder($args['id']); + else { + $folder = $dms->getFolderByName($args['id'], $parent); + } + if($folder) { + if($folder->getAccessMode($userobj) >= M_READ) { + $data = $this->__getFolderData($folder); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404); + } + } /* }}} */ + + function getFolderParent($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if($id == 0) { + return $response->withJson(array('success'=>true, 'message'=>'id is 0', 'data'=>''), 200); + } + $root = $dms->getRootFolder(); + if($root->getId() == $id) { + return $response->withJson(array('success'=>true, 'message'=>'id is root folder', 'data'=>''), 200); + } + $folder = $dms->getFolder($id); + if($folder) { + $parent = $folder->getParent(); + if($parent) { + if($parent->getAccessMode($userobj) >= M_READ) { + $rec = $this->__getFolderData($parent); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$rec), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404); + } + } /* }}} */ + + function getFolderPath($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(empty($args['id'])) { + return $response->withJson(array('success'=>true, 'message'=>'id is 0', 'data'=>''), 200); + } $folder = $dms->getFolder($args['id']); if($folder) { if($folder->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $subfolders = $folder->getSubFolders(); - $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $userobj, M_READ); - foreach($subfolders as $subfolder) { - $recs[] = __getFolderData($subfolder); + $path = $folder->getPath(); + $data = array(); + foreach($path as $element) { + $data[] = array('id'=>$element->getId(), 'name'=>$element->getName()); } - $documents = $folder->getDocuments(); - $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); - foreach($documents as $document) { - $lc = $document->getLatestContent(); - if($lc) { - $recs[] = __getLatestVersionData($lc); - } + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404); + } + } /* }}} */ + + function getFolderAttributes($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $folder = $dms->getFolder($args['id']); + if($folder) { + if ($folder->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $attributes = $folder->getAttributes(); + foreach($attributes as $attribute) { + $recs[] = array( + 'id'=>(int)$attribute->getId(), + 'value'=>$attribute->getValue(), + 'name'=>$attribute->getAttributeDefinition()->getName(), + ); } return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); } else { return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); } } else { - return $response->withStatus(404); + return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404); } - } -} /* }}} */ + } /* }}} */ -function createFolder($request, $response, $args) { /* {{{ */ - global $dms, $userobj, $settings; + function getFolderChildren($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } + if(empty($args['id'])) { + $folder = $dms->getRootFolder(); + $recs = array($this->$this->__getFolderData($folder)); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); + } else { + $folder = $dms->getFolder($args['id']); + if($folder) { + if($folder->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $subfolders = $folder->getSubFolders(); + $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $userobj, M_READ); + foreach($subfolders as $subfolder) { + $recs[] = $this->__getFolderData($subfolder); + } + $documents = $folder->getDocuments(); + $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); + foreach($documents as $document) { + $lc = $document->getLatestContent(); + if($lc) { + $recs[] = $this->__getLatestVersionData($lc); + } + } + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + return $response->withStatus(404); + } + } + } /* }}} */ - if(!ctype_digit($args['id']) || $args['id'] == 0) { - return $response->withJson(array('success'=>false, 'message'=>'No parent folder given', 'data'=>''), 400); - return; - } - $parent = $dms->getFolder($args['id']); - if($parent) { - if($parent->getAccessMode($userobj, 'addFolder') >= M_READWRITE) { - $params = $request->getParsedBody(); - if(!empty($params['name'])) { + function createFolder($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + } + + if(!ctype_digit($args['id']) || $args['id'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No parent folder given', 'data'=>''), 400); + return; + } + $parent = $dms->getFolder($args['id']); + if($parent) { + if($parent->getAccessMode($userobj, 'addFolder') >= M_READWRITE) { + $params = $request->getParsedBody(); + if(!empty($params['name'])) { + $comment = isset($params['comment']) ? $params['comment'] : ''; + if(isset($params['sequence'])) { + $sequence = str_replace(',', '.', $params["sequence"]); + if (!is_numeric($sequence)) + return $response->withJson(array('success'=>false, 'message'=>getMLText("invalid_sequence"), 'data'=>''), 400); + } else { + $dd = $parent->getSubFolders('s'); + if(count($dd) > 1) + $sequence = $dd[count($dd)-1]->getSequence() + 1; + else + $sequence = 1.0; + } + $newattrs = array(); + if(!empty($params['attributes'])) { + foreach($params['attributes'] as $attrname=>$attrvalue) { + $attrdef = $dms->getAttributeDefinitionByName($attrname); + if($attrdef) { + $newattrs[$attrdef->getID()] = $attrvalue; + } + } + } + /* Check if name already exists in the folder */ + if(!$settings->_enableDuplicateSubFolderNames) { + if($parent->hasSubFolderByName($params['name'])) { + return $response->withJson(array('success'=>false, 'message'=>getMLText("subfolder_duplicate_name"), 'data'=>''), 409); + } + } + if($folder = $parent->addSubFolder($params['name'], $comment, $userobj, $sequence, $newattrs)) { + + $rec = $this->__getFolderData($folder); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$rec), 201); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Could not create folder', 'data'=>''), 500); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'Missing folder name', 'data'=>''), 400); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''), 403); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'Could not find parent folder', 'data'=>''), 404); + } + } /* }}} */ + + function moveFolder($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + } + + if(!ctype_digit($args['id']) || $args['id'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No source folder given', 'data'=>''), 400); + } + + if(!ctype_digit($args['folderid']) || $args['folderid'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No destination folder given', 'data'=>''), 400); + } + + $mfolder = $dms->getFolder($args['id']); + if($mfolder) { + if ($mfolder->getAccessMode($userobj, 'moveFolder') >= M_READ) { + if($folder = $dms->getFolder($args['folderid'])) { + if($folder->getAccessMode($userobj, 'moveFolder') >= M_READWRITE) { + if($mfolder->setParent($folder)) { + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Error moving folder', 'data'=>''), 500); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''), 403); + } + } else { + if($folder === null) + $status = 404; + else + $status = 500; + return $response->withJson(array('success'=>false, 'message'=>'No destination folder', 'data'=>''), $status); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($mfolder === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status); + } + } /* }}} */ + + function deleteFolder($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + } + + if(!ctype_digit($args['id']) || $args['id'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'id is 0', 'data'=>''), 400); + } + $mfolder = $dms->getFolder($args['id']); + if($mfolder) { + if ($mfolder->getAccessMode($userobj, 'removeFolder') >= M_READWRITE) { + if($mfolder->remove()) { + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Error deleting folder', 'data'=>''), 500); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($mfolder === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status); + } + } /* }}} */ + + function uploadDocument($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + } + + if(!ctype_digit($args['id']) || $args['id'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No parent folder id given', 'data'=>''), 400); + } + + $mfolder = $dms->getFolder($args['id']); + if($mfolder) { + $uploadedFiles = $request->getUploadedFiles(); + if ($mfolder->getAccessMode($userobj, 'addDocument') >= M_READWRITE) { + $params = $request->getParsedBody(); + $docname = isset($params['name']) ? $params['name'] : ''; + $keywords = isset($params['keywords']) ? $params['keywords'] : ''; $comment = isset($params['comment']) ? $params['comment'] : ''; if(isset($params['sequence'])) { $sequence = str_replace(',', '.', $params["sequence"]); if (!is_numeric($sequence)) return $response->withJson(array('success'=>false, 'message'=>getMLText("invalid_sequence"), 'data'=>''), 400); } else { - $dd = $parent->getSubFolders('s'); + $dd = $mfolder->getDocuments('s'); if(count($dd) > 1) $sequence = $dd[count($dd)-1]->getSequence() + 1; else $sequence = 1.0; } - $newattrs = array(); - if(!empty($params['attributes'])) { - foreach($params['attributes'] as $attrname=>$attrvalue) { - $attrdef = $dms->getAttributeDefinitionByName($attrname); - if($attrdef) { - $newattrs[$attrdef->getID()] = $attrvalue; + if(isset($params['expdate'])) { + $tmp = explode('-', $params["expdate"]); + if(count($tmp) != 3) + return $response->withJson(array('success'=>false, 'message'=>getMLText('malformed_expiration_date'), 'data'=>''), 400); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + } else + $expires = 0; + $version_comment = isset($params['version_comment']) ? $params['version_comment'] : ''; + $reqversion = (isset($params['reqversion']) && (int) $params['reqversion'] > 1) ? (int) $params['reqversion'] : 1; + $origfilename = isset($params['origfilename']) ? $params['origfilename'] : null; + $categories = isset($params["categories"]) ? $params["categories"] : array(); + $cats = array(); + foreach($categories as $catid) { + if($cat = $dms->getDocumentCategory($catid)) + $cats[] = $cat; + } + $attributes = isset($params["attributes"]) ? $params["attributes"] : array(); + foreach($attributes as $attrdefid=>$attribute) { + if($attrdef = $dms->getAttributeDefinition($attrdefid)) { + if($attribute) { + if(!$attrdef->validate($attribute)) { + return $response->withJson(array('success'=>false, 'message'=>getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute), 'data'=>''), 400); + } + } elseif($attrdef->getMinValues() > 0) { + return $response->withJson(array('success'=>false, 'message'=>getMLText("attr_min_values", array("attrname"=>$attrdef->getName())), 'data'=>''), 400); } } } + if (count($uploadedFiles) == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No file detected', 'data'=>''), 400); + } + $file_info = array_pop($uploadedFiles); + if ($origfilename == null) + $origfilename = $file_info->getClientFilename(); + if (trim($docname) == '') + $docname = $origfilename; /* Check if name already exists in the folder */ - if(!$settings->_enableDuplicateSubFolderNames) { - if($parent->hasSubFolderByName($params['name'])) { - return $response->withJson(array('success'=>false, 'message'=>getMLText("subfolder_duplicate_name"), 'data'=>''), 400); + if(!$settings->_enableDuplicateDocNames) { + if($mfolder->hasDocumentByName($docname)) { + return $response->withJson(array('success'=>false, 'message'=>getMLText("document_duplicate_name"), 'data'=>''), 409); } } - if($folder = $parent->addSubFolder($params['name'], $comment, $userobj, $sequence, $newattrs)) { + $temp = $file_info->file; + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $userfiletype = finfo_file($finfo, $temp); + $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); + finfo_close($finfo); + $res = $mfolder->addDocument($docname, $comment, $expires, $userobj, $keywords, $cats, $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, $sequence, array(), array(), $reqversion, $version_comment, $attributes); + // addDocumentCategories($res, $categories); + // setDocumentAttributes($res, $attributes); - $rec = __getFolderData($folder); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$rec), 201); + unlink($temp); + if($res) { + $doc = $res[0]; + // $rec = array('id'=>(int)$doc->getId(), 'name'=>$doc->getName(), 'version'=>$doc->getLatestContent()->getVersion()); + return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$this->__getLatestVersionData($doc->getLatestContent())), 201); } else { - return $response->withJson(array('success'=>false, 'message'=>'Could not create folder', 'data'=>''), 500); + return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500); } - } else { - return $response->withJson(array('success'=>false, 'message'=>'Missing folder name', 'data'=>''), 400); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''), 403); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'Could not find parent folder', 'data'=>''), 500); - } -} /* }}} */ - -function moveFolder($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } - - if(!ctype_digit($args['id']) || $args['id'] == 0) { - return $response->withJson(array('success'=>true, 'message'=>'No source folder given', 'data'=>''), 400); - } - - if(!ctype_digit($args['folderid']) || $args['folderid'] == 0) { - return $response->withJson(array('success'=>true, 'message'=>'No destination folder given', 'data'=>''), 400); - } - - $mfolder = $dms->getFolder($args['id']); - if($mfolder) { - if ($mfolder->getAccessMode($userobj, 'moveFolder') >= M_READ) { - if($folder = $dms->getFolder($args['folderid'])) { - if($folder->getAccessMode($userobj, 'moveFolder') >= M_READWRITE) { - if($mfolder->setParent($folder)) { - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'Error moving folder', 'data'=>''), 500); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''), 403); - } - } else { - if($folder === null) - $status = 400; - else - $status = 500; - return $response->withJson(array('success'=>false, 'message'=>'No destination folder', 'data'=>''), $status); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($mfolder === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status); - } -} /* }}} */ - -function deleteFolder($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } - - if(!ctype_digit($args['id']) || $args['id'] == 0) { - return $response->withJson(array('success'=>true, 'message'=>'id is 0', 'data'=>''), 400); - } - $mfolder = $dms->getFolder($args['id']); - if($mfolder) { - if ($mfolder->getAccessMode($userobj, 'removeFolder') >= M_READWRITE) { - if($mfolder->remove()) { - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'Error deleting folder', 'data'=>''), 500); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($mfolder === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status); - } -} /* }}} */ - -function uploadDocument($request, $response, $args) { /* {{{ */ - global $dms, $userobj, $settings; - - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } - - if(!ctype_digit($args['id']) || $args['id'] == 0) { - return $response->withJson(array('success'=>false, 'message'=>'No parent folder id given', 'data'=>''), 400); - } - - $mfolder = $dms->getFolder($args['id']); - if($mfolder) { - $uploadedFiles = $request->getUploadedFiles(); - if ($mfolder->getAccessMode($userobj, 'addDocument') >= M_READWRITE) { - $params = $request->getParsedBody(); - $docname = isset($params['name']) ? $params['name'] : ''; - $keywords = isset($params['keywords']) ? $params['keywords'] : ''; - $comment = isset($params['comment']) ? $params['comment'] : ''; - if(isset($params['sequence'])) { - $sequence = str_replace(',', '.', $params["sequence"]); - if (!is_numeric($sequence)) - return $response->withJson(array('success'=>false, 'message'=>getMLText("invalid_sequence"), 'data'=>''), 400); - } else { - $dd = $mfolder->getDocuments('s'); - if(count($dd) > 1) - $sequence = $dd[count($dd)-1]->getSequence() + 1; - else - $sequence = 1.0; - } - if(isset($params['expdate'])) { - $tmp = explode('-', $params["expdate"]); - if(count($tmp) != 3) - return $response->withJson(array('success'=>false, 'message'=>getMLText('malformed_expiration_date'), 'data'=>''), 400); - $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); - } else - $expires = 0; - $version_comment = isset($params['version_comment']) ? $params['version_comment'] : ''; - $reqversion = (isset($params['reqversion']) && (int) $params['reqversion'] > 1) ? (int) $params['reqversion'] : 1; - $origfilename = isset($params['origfilename']) ? $params['origfilename'] : null; - $categories = isset($params["categories"]) ? $params["categories"] : array(); - $cats = array(); - foreach($categories as $catid) { - if($cat = $dms->getDocumentCategory($catid)) - $cats[] = $cat; - } - $attributes = isset($params["attributes"]) ? $params["attributes"] : array(); - foreach($attributes as $attrdefid=>$attribute) { - if($attrdef = $dms->getAttributeDefinition($attrdefid)) { - if($attribute) { - if(!$attrdef->validate($attribute)) { - return $response->withJson(array('success'=>false, 'message'=>getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute), 'data'=>''), 400); - } - } elseif($attrdef->getMinValues() > 0) { - return $response->withJson(array('success'=>false, 'message'=>getMLText("attr_min_values", array("attrname"=>$attrdef->getName())), 'data'=>''), 400); - } - } - } - if (count($uploadedFiles) == 0) { - return $response->withJson(array('success'=>false, 'message'=>'No file detected', 'data'=>''), 400); - } - $file_info = array_pop($uploadedFiles); - if ($origfilename == null) - $origfilename = $file_info->getClientFilename(); - if (trim($docname) == '') - $docname = $origfilename; - /* Check if name already exists in the folder */ - if(!$settings->_enableDuplicateDocNames) { - if($mfolder->hasDocumentByName($docname)) { - return $response->withJson(array('success'=>false, 'message'=>getMLText("document_duplicate_name"), 'data'=>''), 400); - } - } - $temp = $file_info->file; - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $userfiletype = finfo_file($finfo, $temp); - $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); - finfo_close($finfo); - $res = $mfolder->addDocument($docname, $comment, $expires, $userobj, $keywords, $cats, $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, $sequence, array(), array(), $reqversion, $version_comment, $attributes); -// addDocumentCategories($res, $categories); -// setDocumentAttributes($res, $attributes); - - unlink($temp); - if($res) { - $doc = $res[0]; - $rec = array('id'=>(int)$doc->getId(), 'name'=>$doc->getName(), 'version'=>$doc->getLatestContent()->getVersion()); - return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($mfolder === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status); - } -} /* }}} */ - -function updateDocument($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } - - if(!ctype_digit($args['id']) || $args['id'] == 0) { - return $response->withJson(array('success'=>false, 'message'=>'No document id given', 'data'=>''), 400); - } - - $document = $dms->getDocument($args['id']); - if($document) { - if ($document->getAccessMode($userobj, 'updateDocument') >= M_READWRITE) { - $params = $request->getParsedBody(); - $origfilename = isset($params['origfilename']) ? $params['origfilename'] : null; - $comment = isset($params['comment']) ? $params['comment'] : null; - $attributes = isset($params["attributes"]) ? $params["attributes"] : array(); - foreach($attributes as $attrdefid=>$attribute) { - if($attrdef = $dms->getAttributeDefinition($attrdefid)) { - if($attribute) { - if(!$attrdef->validate($attribute)) { - return $response->withJson(array('success'=>false, 'message'=>getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute), 'data'=>''), 400); - } - } elseif($attrdef->getMinValues() > 0) { - return $response->withJson(array('success'=>false, 'message'=>getMLText("attr_min_values", array("attrname"=>$attrdef->getName())), 'data'=>''), 400); - } - } - } - $uploadedFiles = $request->getUploadedFiles(); - if (count($uploadedFiles) == 0) { - return $response->withJson(array('success'=>false, 'message'=>'No file detected', 'data'=>''), 400); - } - $file_info = array_pop($uploadedFiles); - if ($origfilename == null) - $origfilename = $file_info->getClientFilename(); - $temp = $file_info->file; - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $userfiletype = finfo_file($finfo, $temp); - $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); - finfo_close($finfo); - $res=$document->addContent($comment, $userobj, $temp, $origfilename, $fileType, $userfiletype, array(), array(), 0, $attributes); - - unlink($temp); - if($res) { - $rec = array('id'=>(int)$document->getId(), 'name'=>$document->getName(), 'version'=>$document->getLatestContent()->getVersion()); - return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), 400); - } -} /* }}} */ - -/** - * Old upload method which uses put instead of post - */ -function uploadDocumentPut($request, $response, $args) { /* {{{ */ - global $dms, $userobj, $settings; - - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } - - if(!ctype_digit($args['id']) || $args['id'] == 0) { - return $response->withJson(array('success'=>false, 'message'=>'No document id given', 'data'=>''), 400); - } - $mfolder = $dms->getFolder($args['id']); - if($mfolder) { - if ($mfolder->getAccessMode($userobj, 'addDocument') >= M_READWRITE) { - $params = $request->getQueryParams(); - $docname = isset($params['name']) ? $params['name'] : ''; - $keywords = isset($params['keywords']) ? $params['keywords'] : ''; - $origfilename = isset($params['origfilename']) ? $params['origfilename'] : null; - $content = $request->getBody(); - $temp = tempnam('/tmp', 'lajflk'); - $handle = fopen($temp, "w"); - fwrite($handle, $content); - fclose($handle); - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $userfiletype = finfo_file($finfo, $temp); - $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); - finfo_close($finfo); - /* Check if name already exists in the folder */ - if(!$settings->_enableDuplicateDocNames) { - if($mfolder->hasDocumentByName($docname)) { - return $response->withJson(array('success'=>false, 'message'=>getMLText("document_duplicate_name"), 'data'=>''), 400); - } - } - $res = $mfolder->addDocument($docname, '', 0, $userobj, '', array(), $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, 0); - unlink($temp); - if($res) { - $doc = $res[0]; - $rec = array('id'=>(int)$doc->getId(), 'name'=>$doc->getName()); - return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($mfolder === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status); - } -} /* }}} */ - -function uploadDocumentFile($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } - - if(!ctype_digit($args['id']) || $args['id'] == 0) { - return $response->withJson(array('success'=>false, 'message'=>'No document id given', 'data'=>''), 400); - } - $document = $dms->getDocument($args['id']); - if($document) { - if ($document->getAccessMode($userobj, 'addDocumentFile') >= M_READWRITE) { - $uploadedFiles = $request->getUploadedFiles(); - $params = $request->getParsedBody(); - $docname = $params['name']; - $keywords = isset($params['keywords']) ? $params['keywords'] : ''; - $origfilename = $params['origfilename']; - $comment = isset($params['comment']) ? $params['comment'] : ''; - $version = empty($params['version']) ? 0 : $params['version']; - $public = empty($params['public']) ? 'false' : $params['public']; - if (count($uploadedFiles) == 0) { - return $response->withJson(array('success'=>false, 'message'=>'No file detected', 'data'=>''), 400); - } - $file_info = array_pop($uploadedFiles); - if ($origfilename == null) - $origfilename = $file_info->getClientFilename(); - if (trim($docname) == '') - $docname = $origfilename; - $temp = $file_info->file; - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $userfiletype = finfo_file($finfo, $temp); - $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); - finfo_close($finfo); - $res = $document->addDocumentFile($docname, $comment, $userobj, $temp, - $origfilename ? $origfilename : utf8_basename($temp), - $fileType, $userfiletype, $version, $public); - unlink($temp); - if($res) { - return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$res), 201); - } else { - return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), $status); - } -} /* }}} */ - -function addDocumentLink($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } - - if(!ctype_digit($args['id']) || $args['id'] == 0) { - return $response->withJson(array('success'=>false, 'message'=>'No source document given', 'data'=>''), 400); - return; - } - $sourcedoc = $dms->getDocument($args['id']); - $targetdoc = $dms->getDocument($args['documentid']); - if($sourcedoc && $targetdoc) { - if($sourcedoc->getAccessMode($userobj, 'addDocumentLink') >= M_READ) { - $params = $request->getParsedBody(); - $public = !isset($params['public']) ? true : false; - if ($sourcedoc->addDocumentLink($targetdoc->getId(), $userobj->getID(), $public)){ - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 201); - } else { - return $response->withJson(array('success'=>false, 'message'=>'Could not create document link', 'data'=>''), 500); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access on source document', 'data'=>''), 403); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'Could not find source or target document', 'data'=>''), 500); - } -} /* }}} */ - -function getDocument($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $lc = $document->getLatestContent(); - if($lc) { - $data = __getLatestVersionData($lc); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); } else { return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); } } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + if($mfolder === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status); } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ + } /* }}} */ -function deleteDocument($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - if($document) { - if ($document->getAccessMode($userobj, 'deleteDocument') >= M_READWRITE) { - if($document->remove()) { - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + function updateDocument($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + } + + if(!ctype_digit($args['id']) || $args['id'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No document id given', 'data'=>''), 400); + } + + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj, 'updateDocument') >= M_READWRITE) { + $params = $request->getParsedBody(); + $origfilename = isset($params['origfilename']) ? $params['origfilename'] : null; + $comment = isset($params['comment']) ? $params['comment'] : null; + $attributes = isset($params["attributes"]) ? $params["attributes"] : array(); + foreach($attributes as $attrdefid=>$attribute) { + if($attrdef = $dms->getAttributeDefinition($attrdefid)) { + if($attribute) { + if(!$attrdef->validate($attribute)) { + return $response->withJson(array('success'=>false, 'message'=>getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute), 'data'=>''), 400); + } + } elseif($attrdef->getMinValues() > 0) { + return $response->withJson(array('success'=>false, 'message'=>getMLText("attr_min_values", array("attrname"=>$attrdef->getName())), 'data'=>''), 400); + } + } + } + $uploadedFiles = $request->getUploadedFiles(); + if (count($uploadedFiles) == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No file detected', 'data'=>''), 400); + } + $file_info = array_pop($uploadedFiles); + if ($origfilename == null) + $origfilename = $file_info->getClientFilename(); + $temp = $file_info->file; + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $userfiletype = finfo_file($finfo, $temp); + $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); + finfo_close($finfo); + $res=$document->addContent($comment, $userobj, $temp, $origfilename, $fileType, $userfiletype, array(), array(), 0, $attributes); + + unlink($temp); + if($res) { + $rec = array('id'=>(int)$document->getId(), 'name'=>$document->getName(), 'version'=>$document->getLatestContent()->getVersion()); + return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500); + } } else { - return $response->withJson(array('success'=>false, 'message'=>'Error removing document', 'data'=>''), 500); + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); } } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), 404); } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ + } /* }}} */ -function moveDocument($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - if($document) { - if ($document->getAccessMode($userobj, 'moveDocument') >= M_READ) { - if($folder = $dms->getFolder($args['folderid'])) { - if($folder->getAccessMode($userobj, 'moveDocument') >= M_READWRITE) { - if($document->setFolder($folder)) { - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + /** + * Old upload method which uses put instead of post + */ + function uploadDocumentPut($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + } + + if(!ctype_digit($args['id']) || $args['id'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No document id given', 'data'=>''), 400); + } + $mfolder = $dms->getFolder($args['id']); + if($mfolder) { + if ($mfolder->getAccessMode($userobj, 'addDocument') >= M_READWRITE) { + $params = $request->getQueryParams(); + $docname = isset($params['name']) ? $params['name'] : ''; + $keywords = isset($params['keywords']) ? $params['keywords'] : ''; + $origfilename = isset($params['origfilename']) ? $params['origfilename'] : null; + $content = $request->getBody(); + $temp = tempnam('/tmp', 'lajflk'); + $handle = fopen($temp, "w"); + fwrite($handle, $content); + fclose($handle); + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $userfiletype = finfo_file($finfo, $temp); + $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); + finfo_close($finfo); + /* Check if name already exists in the folder */ + if(!$settings->_enableDuplicateDocNames) { + if($mfolder->hasDocumentByName($docname)) { + return $response->withJson(array('success'=>false, 'message'=>getMLText("document_duplicate_name"), 'data'=>''), 409); + } + } + $res = $mfolder->addDocument($docname, '', 0, $userobj, '', array(), $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, 0); + unlink($temp); + if($res) { + $doc = $res[0]; + $rec = array('id'=>(int)$doc->getId(), 'name'=>$doc->getName()); + return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($mfolder === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status); + } + } /* }}} */ + + function uploadDocumentFile($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + } + + if(!ctype_digit($args['id']) || $args['id'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No document id given', 'data'=>''), 400); + } + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj, 'addDocumentFile') >= M_READWRITE) { + $uploadedFiles = $request->getUploadedFiles(); + $params = $request->getParsedBody(); + $docname = $params['name']; + $keywords = isset($params['keywords']) ? $params['keywords'] : ''; + $origfilename = $params['origfilename']; + $comment = isset($params['comment']) ? $params['comment'] : ''; + $version = empty($params['version']) ? 0 : $params['version']; + $public = empty($params['public']) ? 'false' : $params['public']; + if (count($uploadedFiles) == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No file detected', 'data'=>''), 400); + } + $file_info = array_pop($uploadedFiles); + if ($origfilename == null) + $origfilename = $file_info->getClientFilename(); + if (trim($docname) == '') + $docname = $origfilename; + $temp = $file_info->file; + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $userfiletype = finfo_file($finfo, $temp); + $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); + finfo_close($finfo); + $res = $document->addDocumentFile($docname, $comment, $userobj, $temp, + $origfilename ? $origfilename : utf8_basename($temp), + $fileType, $userfiletype, $version, $public); + unlink($temp); + if($res) { + return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$res), 201); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), $status); + } + } /* }}} */ + + function addDocumentLink($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + } + + if(!ctype_digit($args['id']) || $args['id'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No source document given', 'data'=>''), 400); + return; + } + if(!ctype_digit($args['documentid']) || $args['documentid'] == 0) { + return $response->withJson(array('success'=>false, 'message'=>'No target document given', 'data'=>''), 400); + return; + } + $sourcedoc = $dms->getDocument($args['id']); + $targetdoc = $dms->getDocument($args['documentid']); + if($sourcedoc && $targetdoc) { + if($sourcedoc->getAccessMode($userobj, 'addDocumentLink') >= M_READ) { + $params = $request->getParsedBody(); + $public = !isset($params['public']) ? true : false; + if ($sourcedoc->addDocumentLink($targetdoc->getId(), $userobj->getID(), $public)){ + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 201); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Could not create document link', 'data'=>''), 500); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access on source document', 'data'=>''), 403); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'Could not find source or target document', 'data'=>''), 500); + } + } /* }}} */ + + function getDocument($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $lc = $document->getLatestContent(); + if($lc) { + $data = $this->__getLatestVersionData($lc); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + } /* }}} */ + + function deleteDocument($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!ctype_digit($args['id'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); + } + + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj, 'deleteDocument') >= M_READWRITE) { + if($document->remove()) { + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Error removing document', 'data'=>''), 500); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + } /* }}} */ + + function moveDocument($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj, 'moveDocument') >= M_READ) { + if($folder = $dms->getFolder($args['folderid'])) { + if($folder->getAccessMode($userobj, 'moveDocument') >= M_READWRITE) { + if($document->setFolder($folder)) { + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Error moving document', 'data'=>''), 500); + } } else { - return $response->withJson(array('success'=>false, 'message'=>'Error moving document', 'data'=>''), 500); + return $response->withJson(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''), 403); } } else { - return $response->withJson(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''), 403); + if($folder === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No destination folder', 'data'=>''), $status); } } else { - if($folder === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No destination folder', 'data'=>''), $status); + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); } } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ + } /* }}} */ -function getDocumentContent($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); + function getDocumentContent($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $lc = $document->getLatestContent(); - if($lc) { - if (pathinfo($document->getName(), PATHINFO_EXTENSION) == $lc->getFileType()) - $filename = $document->getName(); + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $lc = $document->getLatestContent(); + if($lc) { + if (pathinfo($document->getName(), PATHINFO_EXTENSION) == $lc->getFileType()) + $filename = $document->getName(); + else + $filename = $document->getName().$lc->getFileType(); + + $file = $dms->contentDir . $lc->getPath(); + if(!($fh = @fopen($file, 'rb'))) { + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); + } + $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body + + return $response->withHeader('Content-Type', $lc->getMimeType()) + ->withHeader('Content-Description', 'File Transfer') + ->withHeader('Content-Transfer-Encoding', 'binary') + ->withHeader('Content-Disposition', 'attachment; filename="' . $filename . '"') + ->withHeader('Content-Length', filesize($dms->contentDir . $lc->getPath())) + ->withHeader('Expires', '0') + ->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') + ->withHeader('Pragma', 'no-cache') + ->withBody($stream); + + sendFile($dms->contentDir . $lc->getPath()); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + + } /* }}} */ + + function getDocumentVersions($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $lcs = $document->getContent(); + foreach($lcs as $lc) { + $recs[] = $this->__getDocumentVersionData($lc); + } + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + } /* }}} */ + + function getDocumentVersion($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!ctype_digit($args['id']) || !ctype_digit($args['version'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); + } + + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $lc = $document->getContentByVersion($args['version']); + if($lc) { + if (pathinfo($document->getName(), PATHINFO_EXTENSION) == $lc->getFileType()) + $filename = $document->getName(); + else + $filename = $document->getName().$lc->getFileType(); + + $file = $dms->contentDir . $lc->getPath(); + if(!($fh = @fopen($file, 'rb'))) { + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); + } + $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body + + return $response->withHeader('Content-Type', $lc->getMimeType()) + ->withHeader('Content-Description', 'File Transfer') + ->withHeader('Content-Transfer-Encoding', 'binary') + ->withHeader('Content-Disposition', 'attachment; filename="' . $filename . '"') + ->withHeader('Content-Length', filesize($dms->contentDir . $lc->getPath())) + ->withHeader('Expires', '0') + ->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') + ->withHeader('Pragma', 'no-cache') + ->withBody($stream); + + sendFile($dms->contentDir . $lc->getPath()); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No such version', 'data'=>''), 404); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + } /* }}} */ + + function updateDocumentVersion($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $lc = $document->getContentByVersion($args['version']); + if($lc) { + $params = $request->getParsedBody(); + if (isset($params['comment'])) { + $lc->setComment($params['comment']); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No such version', 'data'=>''), 404); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + } /* }}} */ + + function getDocumentFiles($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!ctype_digit($args['id'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); + } + + $document = $dms->getDocument($args['id']); + + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $files = $document->getDocumentFiles(); + foreach($files as $file) { + $recs[] = $this->__getDocumentFileData($file); + } + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + } /* }}} */ + + function getDocumentFile($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!ctype_digit($args['id']) || !ctype_digit($args['fileid'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); + } + + $document = $dms->getDocument($args['id']); + + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $lc = $document->getDocumentFile($args['fileid']); + if($lc) { + $file = $dms->contentDir . $lc->getPath(); + if(!($fh = @fopen($file, 'rb'))) { + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); + } + $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body + + return $response->withHeader('Content-Type', $lc->getMimeType()) + ->withHeader('Content-Description', 'File Transfer') + ->withHeader('Content-Transfer-Encoding', 'binary') + ->withHeader('Content-Disposition', 'attachment; filename="' . $document->getName() . $lc->getFileType() . '"') + ->withHeader('Content-Length', filesize($dms->contentDir . $lc->getPath())) + ->withHeader('Expires', '0') + ->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') + ->withHeader('Pragma', 'no-cache') + ->withBody($stream); + + sendFile($dms->contentDir . $lc->getPath()); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No document file', 'data'=>''), 404); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + } /* }}} */ + + function getDocumentLinks($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!ctype_digit($args['id'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); + } + + $document = $dms->getDocument($args['id']); + + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $links = $document->getDocumentLinks(); + foreach($links as $link) { + $recs[] = $this->__getDocumentLinkData($link); + } + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + } /* }}} */ + + function getDocumentAttributes($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $document = $dms->getDocument($args['id']); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $attributes = $document->getAttributes(); + foreach($attributes as $attribute) { + $recs[] = array( + 'id'=>(int)$attribute->getId(), + 'value'=>$attribute->getValue(), + 'name'=>$attribute->getAttributeDefinition()->getName(), + ); + } + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); + } + } /* }}} */ + + function getDocumentPreview($request, $response, $args) { /* {{{ */ + require_once "SeedDMS/Preview.php"; + + $dms = $this->container->dms; + $userobj = $this->container->userobj; + $settings = $this->container->config; + + if(!ctype_digit($args['id'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); + } + + $document = $dms->getDocument($args['id']); + + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + if($args['version']) + $object = $document->getContentByVersion($args['version']); else - $filename = $document->getName().$lc->getFileType(); + $object = $document->getLatestContent(); + if(!$object) + exit; - $file = $dms->contentDir . $lc->getPath(); + if(!empty($args['width'])) + $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $args['width']); + else + $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir); + if(!$previewer->hasPreview($object)) + $previewer->createPreview($object); + + $file = $previewer->getFileName($object, $args['width']).".png"; if(!($fh = @fopen($file, 'rb'))) { - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); } $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body - return $response->withHeader('Content-Type', $lc->getMimeType()) - ->withHeader('Content-Description', 'File Transfer') - ->withHeader('Content-Transfer-Encoding', 'binary') - ->withHeader('Content-Disposition', 'attachment; filename="' . $filename . '"') - ->withHeader('Content-Length', filesize($dms->contentDir . $lc->getPath())) - ->withHeader('Expires', '0') - ->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') - ->withHeader('Pragma', 'no-cache') - ->withBody($stream); - - sendFile($dms->contentDir . $lc->getPath()); + return $response->withHeader('Content-Type', 'image/png') + ->withHeader('Content-Description', 'File Transfer') + ->withHeader('Content-Transfer-Encoding', 'binary') + ->withHeader('Content-Disposition', 'attachment; filename=preview-"' . $document->getID() . "-" . $object->getVersion() . "-" . $width . ".png" . '"') + ->withHeader('Content-Length', $previewer->getFilesize($object)) + ->withBody($stream); } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); } } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + if($document === null) + $status=404; + else + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } + } /* }}} */ -} /* }}} */ + function removeDocumentCategory($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; -function getDocumentVersions($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $lcs = $document->getContent(); - foreach($lcs as $lc) { - $recs[] = array( - 'version'=>$lc->getVersion(), - 'date'=>$lc->getDate(), - 'mimetype'=>$lc->getMimeType(), - 'size'=>$lc->getFileSize(), - 'comment'=>$lc->getComment(), - ); - } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + if(!ctype_digit($args['id']) || !ctype_digit($args['catid'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ -function getDocumentVersion($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); + $document = $dms->getDocument($args['id']); + $category = $dms->getDocumentCategory($args['catid']); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $lc = $document->getContentByVersion($args['version']); - if($lc) { - if (pathinfo($document->getName(), PATHINFO_EXTENSION) == $lc->getFileType()) - $filename = $document->getName(); + if($document && $category) { + if ($document->getAccessMode($userobj, 'removeDocumentCategory') >= M_READWRITE) { + $ret = $document->removeCategories(array($category)); + if ($ret) + return $response->withJson(array('success'=>true, 'message'=>'Deleted category successfully.', 'data'=>''), 200); else - $filename = $document->getName().$lc->getFileType(); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + } + } else { + if(!$document) + return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), 404); + if(!$category) + return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404); + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); + } + } /* }}} */ - $file = $dms->contentDir . $lc->getPath(); - if(!($fh = @fopen($file, 'rb'))) { + function removeDocumentCategories($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!ctype_digit($args['id'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); + } + + $document = $dms->getDocument($args['id']); + + if($document) { + if ($document->getAccessMode($userobj, 'removeDocumentCategory') >= M_READWRITE) { + if($document->setCategories(array())) + return $response->withJson(array('success'=>true, 'message'=>'Deleted categories successfully.', 'data'=>''), 200); + else return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); - } - $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body - - return $response->withHeader('Content-Type', $lc->getMimeType()) - ->withHeader('Content-Description', 'File Transfer') - ->withHeader('Content-Transfer-Encoding', 'binary') - ->withHeader('Content-Disposition', 'attachment; filename="' . $filename . '"') - ->withHeader('Content-Length', filesize($dms->contentDir . $lc->getPath())) - ->withHeader('Expires', '0') - ->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') - ->withHeader('Pragma', 'no-cache') - ->withBody($stream); - - sendFile($dms->contentDir . $lc->getPath()); } else { - return $response->withJson(array('success'=>false, 'message'=>'No such version', 'data'=>''), 400); + return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); } } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ - -function updateDocumentVersion($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $lc = $document->getContentByVersion($args['version']); - if($lc) { - $params = $request->getParsedBody(); - if (isset($params['comment'])) { - $lc->setComment($params['comment']); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No such version', 'data'=>''), 400); - } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ - -function getDocumentFiles($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $files = $document->getDocumentFiles(); - foreach($files as $file) { - $recs[] = array( - 'id'=>(int)$file->getId(), - 'name'=>$file->getName(), - 'date'=>$file->getDate(), - 'mimetype'=>$file->getMimeType(), - 'comment'=>$file->getComment(), - ); - } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ - -function getDocumentFile($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $lc = $document->getDocumentFile($args['fileid']); - - $file = $dms->contentDir . $lc->getPath(); - if(!($fh = @fopen($file, 'rb'))) { - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); - } - $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body - - return $response->withHeader('Content-Type', $lc->getMimeType()) - ->withHeader('Content-Description', 'File Transfer') - ->withHeader('Content-Transfer-Encoding', 'binary') - ->withHeader('Content-Disposition', 'attachment; filename="' . $document->getName() . $lc->getFileType() . '"') - ->withHeader('Content-Length', filesize($dms->contentDir . $lc->getPath())) - ->withHeader('Expires', '0') - ->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') - ->withHeader('Pragma', 'no-cache') - ->withBody($stream); - - sendFile($dms->contentDir . $lc->getPath()); - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ - -function getDocumentLinks($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $links = $document->getDocumentLinks(); - foreach($links as $link) { - $recs[] = array( - 'id'=>(int)$link->getId(), - 'target'=>$link->getTarget(), - 'public'=>$link->isPublic(), - ); - } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ - -function getDocumentAttributes($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $attributes = $document->getAttributes(); - foreach($attributes as $attribute) { - $recs[] = array( - 'id'=>(int)$attribute->getId(), - 'value'=>$attribute->getValue(), - 'name'=>$attribute->getAttributeDefinition()->getName(), - ); - } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ - -function getDocumentPreview($request, $response, $args) { /* {{{ */ - global $dms, $userobj, $settings; - require_once "SeedDMS/Preview.php"; - $document = $dms->getDocument($args['id']); - - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - if($args['version']) - $object = $document->getContentByVersion($args['version']); + if($document === null) + $status=404; else - $object = $document->getLatestContent(); - if(!$object) - exit; + $status=500; + return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), $status); + } + } /* }}} */ - if(!empty($args['width'])) - $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $args['width']); - else - $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir); - if(!$previewer->hasPreview($object)) - $previewer->createPreview($object); + function getAccount($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - $file = $previewer->getFileName($object, $args['width']).".png"; - if(!($fh = @fopen($file, 'rb'))) { - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); - } - $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body - - return $response->withHeader('Content-Type', 'image/png') - ->withHeader('Content-Description', 'File Transfer') - ->withHeader('Content-Transfer-Encoding', 'binary') - ->withHeader('Content-Disposition', 'attachment; filename=preview-"' . $document->getID() . "-" . $object->getVersion() . "-" . $width . ".png" . '"') - ->withHeader('Content-Length', $previewer->getFilesize($object)) - ->withBody($stream); + if($userobj) { + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getUserData($userobj)), 200); } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status); - } -} /* }}} */ + } /* }}} */ -function removeDocumentCategory($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - $category = $dms->getDocumentCategory($args['categoryId']); + /** + * Search for documents in the database + * + * If the request parameter 'mode' is set to 'typeahead', it will + * return a list of words only. + */ + function doSearch($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - if($document && $category) { - if ($document->getAccessMode($userobj, 'removeDocumentCategory') >= M_READWRITE) { - $ret = $document->removeCategories(array($category)); - if ($ret) - return $response->withJson(array('success'=>true, 'message'=>'Deleted category successfully.', 'data'=>''), 200); - else - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); + $params = $request->getQueryParams(); + $querystr = $params['query']; + $mode = isset($params['mode']) ? $params['mode'] : ''; + if(!isset($params['limit']) || !$limit = $params['limit']) + $limit = 5; + if(!isset($params['offset']) || !$offset = $params['offset']) + $offset = 0; + if(!isset($params['searchin']) || !$searchin = explode(",",$params['searchin'])) + $searchin = array(); + if(!isset($params['objects']) || !$objects = $params['objects']) + $objects = 0x3; + $resArr = $dms->search($querystr, $limit, $offset, 'AND', $searchin, null, null, array(), array(), array(), array(), array(), array(), array(), $objects); + if($resArr === false) { + return $response->withJson(array(), 200); } - } else { - if(!$document) - return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), 400); - if(!$category) - return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 400); - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500); - } -} /* }}} */ - -function removeDocumentCategories($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $document = $dms->getDocument($args['id']); - - if($document) { - if ($document->getAccessMode($userobj, 'removeDocumentCategory') >= M_READWRITE) { - if($document->setCategories(array())) - return $response->withJson(array('success'=>true, 'message'=>'Deleted categories successfully.', 'data'=>''), 200); - else - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403); - } - } else { - if($document === null) - $status=400; - else - $status=500; - return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), $status); - } -} /* }}} */ - -function getAccount($request, $response) { /* {{{ */ - global $dms, $userobj; - if($userobj) { - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>__getUserData($userobj)), 200); - } else { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } -} /* }}} */ - -/** - * Search for documents in the database - * - * If the request parameter 'mode' is set to 'typeahead', it will - * return a list of words only. - */ -function doSearch($request, $response) { /* {{{ */ - global $dms, $userobj; - - $params = $request->getQueryParams(); - $querystr = $params['query']; - $mode = isset($params['mode']) ? $params['mode'] : ''; - if(!isset($params['limit']) || !$limit = $params['limit']) - $limit = 5; - if(!isset($params['offset']) || !$offset = $params['offset']) - $offset = 0; - if(!isset($params['searchin']) || !$searchin = explode(",",$params['searchin'])) - $searchin = array(); - if(!isset($params['objects']) || !$objects = $params['objects']) - $objects = 0x3; - $resArr = $dms->search($querystr, $limit, $offset, 'AND', $searchin, null, null, array(), array(), array(), array(), array(), array(), array(), $objects); - if($resArr === false) { - return $response->withJson(array(), 200); - } - $entries = array(); - $count = 0; - if($resArr['folders']) { - foreach ($resArr['folders'] as $entry) { - if ($entry->getAccessMode($userobj) >= M_READ) { - $entries[] = $entry; - $count++; - } - if($count >= $limit) - break; - } - } - $count = 0; - if($resArr['docs']) { - foreach ($resArr['docs'] as $entry) { - $lc = $entry->getLatestContent(); - if ($entry->getAccessMode($userobj) >= M_READ && $lc) { - $entries[] = $entry; - $count++; - } - if($count >= $limit) - break; - } - } - - switch($mode) { - case 'typeahead'; - $recs = array(); - foreach ($entries as $entry) { - /* Passing anything back but a string does not work, because - * the process function of bootstrap.typeahead needs an array of - * strings. - * - * As a quick solution to distingish folders from documents, the - * name will be preceeded by a 'F' or 'D' - - $tmp = array(); - if(get_class($entry) == 'SeedDMS_Core_Document') { - $tmp['type'] = 'folder'; - } else { - $tmp['type'] = 'document'; - } - $tmp['id'] = $entry->getID(); - $tmp['name'] = $entry->getName(); - $tmp['comment'] = $entry->getComment(); - */ - if(get_class($entry) == 'SeedDMS_Core_Document') { - $recs[] = 'D'.$entry->getName(); - } else { - $recs[] = 'F'.$entry->getName(); - } - } - if($recs) -// array_unshift($recs, array('type'=>'', 'id'=>0, 'name'=>$querystr, 'comment'=>'')); - array_unshift($recs, ' '.$querystr); - return $response->withJson($recs, 200); - break; - default: - $recs = array(); - foreach ($entries as $entry) { - if(get_class($entry) == 'SeedDMS_Core_Document') { - $document = $entry; - $lc = $document->getLatestContent(); - if($lc) { - $recs[] = __getLatestVersionData($lc); - } - } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { - $folder = $entry; - $recs[] = __getFolderData($folder); - } - } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs)); - break; - } -} /* }}} */ - -/** - * Search for documents/folders with a given attribute=value - * - */ -function doSearchByAttr($request, $response) { /* {{{ */ - global $dms, $userobj; - - $params = $request->getQueryParams(); - $attrname = $params['name']; - $query = $params['value']; - if(empty($params['limit']) || !$limit = $params['limit']) - $limit = 50; - $attrdef = $dms->getAttributeDefinitionByName($attrname); - $entries = array(); - if($attrdef) { - $resArr = $attrdef->getObjects($query, $limit); + $entries = array(); + $count = 0; if($resArr['folders']) { foreach ($resArr['folders'] as $entry) { if ($entry->getAccessMode($userobj) >= M_READ) { $entries[] = $entry; + $count++; } + if($count >= $limit) + break; } } + $count = 0; if($resArr['docs']) { foreach ($resArr['docs'] as $entry) { - if ($entry->getAccessMode($userobj) >= M_READ) { + $lc = $entry->getLatestContent(); + if ($entry->getAccessMode($userobj) >= M_READ && $lc) { $entries[] = $entry; + $count++; + } + if($count >= $limit) + break; + } + } + + switch($mode) { + case 'typeahead'; + $recs = array(); + foreach ($entries as $entry) { + /* Passing anything back but a string does not work, because + * the process function of bootstrap.typeahead needs an array of + * strings. + * + * As a quick solution to distingish folders from documents, the + * name will be preceeded by a 'F' or 'D' + + $tmp = array(); + if(get_class($entry) == 'SeedDMS_Core_Document') { + $tmp['type'] = 'folder'; + } else { + $tmp['type'] = 'document'; + } + $tmp['id'] = $entry->getID(); + $tmp['name'] = $entry->getName(); + $tmp['comment'] = $entry->getComment(); + */ + if(get_class($entry) == 'SeedDMS_Core_Document') { + $recs[] = 'D'.$entry->getName(); + } else { + $recs[] = 'F'.$entry->getName(); + } + } + if($recs) + // array_unshift($recs, array('type'=>'', 'id'=>0, 'name'=>$querystr, 'comment'=>'')); + array_unshift($recs, ' '.$querystr); + return $response->withJson($recs, 200); + break; + default: + $recs = array(); + foreach ($entries as $entry) { + if(get_class($entry) == 'SeedDMS_Core_Document') { + $document = $entry; + $lc = $document->getLatestContent(); + if($lc) { + $recs[] = $this->__getLatestVersionData($lc); + } + } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { + $folder = $entry; + $recs[] = $this->__getFolderData($folder); + } + } + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs)); + break; + } + } /* }}} */ + + /** + * Search for documents/folders with a given attribute=value + * + */ + function doSearchByAttr($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $params = $request->getQueryParams(); + $attrname = $params['name']; + $query = $params['value']; + if(empty($params['limit']) || !$limit = $params['limit']) + $limit = 50; + $attrdef = $dms->getAttributeDefinitionByName($attrname); + $entries = array(); + if($attrdef) { + $resArr = $attrdef->getObjects($query, $limit); + if($resArr['folders']) { + foreach ($resArr['folders'] as $entry) { + if ($entry->getAccessMode($userobj) >= M_READ) { + $entries[] = $entry; + } + } + } + if($resArr['docs']) { + foreach ($resArr['docs'] as $entry) { + if ($entry->getAccessMode($userobj) >= M_READ) { + $entries[] = $entry; + } } } } - } - $recs = array(); - foreach ($entries as $entry) { - if(get_class($entry) == 'SeedDMS_Core_Document') { - $document = $entry; - $lc = $document->getLatestContent(); - if($lc) { - $recs[] = __getLatestVersionData($lc); + $recs = array(); + foreach ($entries as $entry) { + if(get_class($entry) == 'SeedDMS_Core_Document') { + $document = $entry; + $lc = $document->getLatestContent(); + if($lc) { + $recs[] = $this->__getLatestVersionData($lc); + } + } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { + $folder = $entry; + $recs[] = $this->__getFolderData($folder); } - } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { - $folder = $entry; - $recs[] = __getFolderData($folder); } - } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); -} /* }}} */ + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200); + } /* }}} */ -function checkIfAdmin($request, $response) { /* {{{ */ - global $dms, $userobj; + function checkIfAdmin($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - if(!$userobj) { - return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); - } - if(!$userobj->isAdmin()) { - return $response->withJson(array('success'=>false, 'message'=>'You must be logged in with an administrator account to access this resource', 'data'=>''), 403); - } + if(!$userobj) { + return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403); + } + if(!$userobj->isAdmin()) { + return $response->withJson(array('success'=>false, 'message'=>'You must be logged in with an administrator account to access this resource', 'data'=>''), 403); + } - return true; -} /* }}} */ + return true; + } /* }}} */ -function getUsers($request, $response) { /* {{{ */ - global $dms, $userobj; + function getUsers($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; + $users = $dms->getAllUsers(); + $data = []; + foreach($users as $u) + $data[] = $this->__getUserData($u); - $users = $dms->getAllUsers(); - $data = []; - foreach($users as $u) - $data[] = __getUserData($u); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } /* }}} */ - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); -} /* }}} */ + function createUser($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; -function createUser($request, $response) { /* {{{ */ - global $dms, $userobj; + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; + $params = $request->getParsedBody(); + if(empty(trim($params['user']))) { + return $response->withJson(array('success'=>false, 'message'=>'Missing user login', 'data'=>''), 400); + } + $userName = $params['user']; + $password = isset($params['pass']) ? $params['pass'] : ''; + if(empty(trim($params['name']))) { + return $response->withJson(array('success'=>false, 'message'=>'Missing full user name', 'data'=>''), 400); + } + $fullname = $params['name']; + $email = isset($params['email']) ? $params['email'] : ''; + $language = isset($params['language']) ? $params['language'] : null;; + $theme = isset($params['theme']) ? $params['theme'] : null; + $comment = isset($params['comment']) ? $params['comment'] : null; + $role = isset($params['role']) ? $params['role'] : null; + $roleid = $role == 'admin' ? SeedDMS_Core_User::role_admin : ($role == 'guest' ? SeedDMS_Core_User::role_guest : SeedDMS_Core_User::role_user); - $params = $request->getParsedBody(); - if(empty(trim($params['user']))) { - return $response->withJson(array('success'=>false, 'message'=>'Missing user login', 'data'=>''), 500); - } - $userName = $params['user']; - $password = isset($params['pass']) ? $params['pass'] : ''; - if(empty(trim($params['name']))) { - return $response->withJson(array('success'=>false, 'message'=>'Missing full user name', 'data'=>''), 500); - } - $fullname = $params['name']; - $email = isset($params['email']) ? $params['email'] : ''; - $language = isset($params['language']) ? $params['language'] : null;; - $theme = isset($params['theme']) ? $params['theme'] : null; - $comment = isset($params['comment']) ? $params['comment'] : null; - if(isset($params['role']) && $params['role']) - $role = SeedDMS_Core_Role::getInstance($params['role'], $dms, ctype_digit($params['role']) ? '' : 'name'); - else - $role = SeedDMS_Core_Role::getInstance('user', $dms, 'name'); + $newAccount = $dms->addUser($userName, $password, $fullname, $email, $language, $theme, $comment, $roleid); + if ($newAccount === false) { + return $response->withJson(array('success'=>false, 'message'=>'Account could not be created, maybe it already exists', 'data'=>''), 500); + } - $newAccount = $dms->addUser($userName, $password, $fullname, $email, $language, $theme, $comment, $role); - if ($newAccount === false) { - return $response->withJson(array('success'=>false, 'message'=>'Account could not be created, maybe it already exists', 'data'=>''), 500); - } + $result = $this->__getUserData($newAccount); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$result), 201); + } /* }}} */ - $result = __getUserData($newAccount); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$result), 201); -} /* }}} */ + function deleteUser($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; -function deleteUser($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; - if($user = $dms->getUser($args['id'])) { - if($result = $user->remove($userobj, $userobj)) { - return $response->withJson(array('success'=>$result, 'message'=>'', 'data'=>''), 200); + if($user = $dms->getUser($args['id'])) { + if($result = $user->remove($userobj, $userobj)) { + return $response->withJson(array('success'=>$result, 'message'=>'', 'data'=>''), 200); + } else { + return $response->withJson(array('success'=>$result, 'message'=>'Could not delete user', 'data'=>''), 500); + } } else { - return $response->withJson(array('success'=>$result, 'message'=>'Could not delete user', 'data'=>''), 500); + return $response->withJson(array('success'=>false, 'message'=>'No such user', 'data'=>''), 404); } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No such user', 'data'=>''), 404); - } -} /* }}} */ - -/** - * Updates the password of an existing Account, the password must be PUT as a md5 string - * - * @param $id The user name or numerical identifier - */ -function changeUserPassword($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; - - $params = $request->getParsedBody(); - if ($params['password'] == null) { - return $response->withJson(array('success'=>false, 'message'=>'You must supply a new password', 'data'=>''), 200); - } - - $newPassword = $params['password']; - - if(ctype_digit($args['id'])) - $account = $dms->getUser($args['id']); - else { - $account = $dms->getUserByLogin($args['id']); - } + } /* }}} */ /** - * User not found + * Updates the password of an existing Account, the password must be PUT as a md5 string + * + * @param $id The user name or numerical identifier */ - if (!$account) { - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'User not found.'), 404); - return; - } + function changeUserPassword($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - $operation = $account->setPwd($newPassword); + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; - if (!$operation){ - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'Could not change password.'), 404); - } + $params = $request->getParsedBody(); + if ($params['password'] == null) { + return $response->withJson(array('success'=>false, 'message'=>'You must supply a new password', 'data'=>''), 400); + } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); -} /* }}} */ + $newPassword = $params['password']; + + if(ctype_digit($args['id'])) + $account = $dms->getUser($args['id']); + else { + $account = $dms->getUserByLogin($args['id']); + } + + /** + * User not found + */ + if (!$account) { + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'User not found.'), 404); + return; + } + + $operation = $account->setPwd($newPassword); + + if (!$operation){ + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'Could not change password.'), 404); + } + + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + } /* }}} */ + + function getUserById($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + if(ctype_digit($args['id'])) + $account = $dms->getUser($args['id']); + else { + $account = $dms->getUserByLogin($args['id']); + } + if($account) { + $data = $this->__getUserData($account); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No such user', 'data'=>''), 404); + } + } /* }}} */ + + function setDisabledUser($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + $params = $request->getParsedBody(); + if (!isset($params['disable'])) { + return $response->withJson(array('success'=>false, 'message'=>'You must supply a disabled state', 'data'=>''), 400); + } + + $isDisabled = false; + $status = $params['disable']; + if ($status == 'true' || $status == '1') { + $isDisabled = true; + } + + if(ctype_digit($args['id'])) + $account = $dms->getUser($args['id']); + else { + $account = $dms->getUserByLogin($args['id']); + } + + if($account) { + $account->setDisabled($isDisabled); + $data = $this->__getUserData($account); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No such user', 'data'=>''), 404); + } + } /* }}} */ + + function getGroups($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + + $groups = $dms->getAllGroups(); + $data = []; + foreach($groups as $u) + $data[] = $this->__getGroupData($u); -function getUserById($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; - if(ctype_digit($args['id'])) - $account = $dms->getUser($args['id']); - else { - $account = $dms->getUserByLogin($args['id']); - } - if($account) { - $data = __getUserData($account); return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); - } else { - return $response->withStatus(404); - } -} /* }}} */ + } /* }}} */ -function setDisabledUser($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; - $params = $request->getParsedBody(); - if (!isset($params['disable'])) { - return $response->withJson(array('success'=>false, 'message'=>'You must supply a disabled state', 'data'=>''), 400); - } + function createGroup($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - $isDisabled = false; - $status = $params['disable']; - if ($status == 'true' || $status == '1') { - $isDisabled = true; - } + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + $params = $request->getParsedBody(); + if (empty($params['name'])) { + return $response->withJson(array('success'=>false, 'message'=>'Need a category.', 'data'=>''), 400); + } - if(ctype_digit($args['id'])) - $account = $dms->getUser($args['id']); - else { - $account = $dms->getUserByLogin($args['id']); - } + $groupName = $params['name']; + $comment = isset($params['comment']) ? $params['comment'] : ''; - if($account) { - $account->setDisabled($isDisabled); - $data = __getUserData($account); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); - } else { - return $response->withStatus(404); - } -} /* }}} */ + $newGroup = $dms->addGroup($groupName, $comment); + if ($newGroup === false) { + return $response->withJson(array('success'=>false, 'message'=>'Group could not be created, maybe it already exists', 'data'=>''), 500); + } -function getGroups($request, $response) { /* {{{ */ - global $dms, $userobj; + // $result = array('id'=>(int)$newGroup->getID()); + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getGroupData($newGroup)), 201); + } /* }}} */ - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; + function getGroup($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - $groups = $dms->getAllGroups(); - $data = []; - foreach($groups as $u) - $data[] = __getGroupData($u); + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + if(ctype_digit($args['id'])) + $group = $dms->getGroup($args['id']); + else { + $group = $dms->getGroupByName($args['id']); + } + if($group) { + $data = $this->__getGroupData($group); + $data['users'] = array(); + foreach ($group->getUsers() as $user) { + $data['users'][] = array('id' => (int)$user->getID(), 'login' => $user->getLogin()); + } + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } else { + return $response->withStatus(404); + } + } /* }}} */ - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); -} /* }}} */ + function changeGroupMembership($request, $response, $args, $operationType) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; -function createGroup($request, $response) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; - $params = $request->getParsedBody(); - $groupName = $params['name']; - $comment = $params['comment']; + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; - $newGroup = $dms->addGroup($groupName, $comment); - if ($newGroup === false) { - return $response->withJson(array('success'=>false, 'message'=>'Group could not be created, maybe it already exists', 'data'=>''), 500); - } + if(ctype_digit($args['id'])) + $group = $dms->getGroup($args['id']); + else { + $group = $dms->getGroupByName($args['id']); + } - $result = array('id'=>(int)$newGroup->getID()); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$result), 201); -} /* }}} */ + $params = $request->getParsedBody(); + if (empty($params['userid'])) { + return $response->withJson(array('success'=>false, 'message'=>'Missing userid', 'data'=>''), 200); + } + $userId = $params['userid']; + if(ctype_digit($userId)) + $user = $dms->getUser($userId); + else { + $user = $dms->getUserByLogin($userId); + } -function getGroup($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; - if(ctype_digit($args['id'])) - $group = $dms->getGroup($args['id']); - else { - $group = $dms->getGroupByName($args['id']); - } - if($group) { - $data = __getGroupData($group); + if (!($group && $user)) { + return $response->withStatus(404); + } + + $operationResult = false; + + if ($operationType == 'add') + { + $operationResult = $group->addUser($user); + } + if ($operationType == 'remove') + { + $operationResult = $group->removeUser($user); + } + + if ($operationResult === false) + { + $message = 'Could not add user to the group.'; + if ($operationType == 'remove') + { + $message = 'Could not remove user from group.'; + } + return $response->withJson(array('success'=>false, 'message'=>'Something went wrong. ' . $message, 'data'=>''), 500); + } + + $data = $this->__getGroupData($group); $data['users'] = array(); - foreach ($group->getUsers() as $user) { - $data['users'][] = array('id' => (int)$user->getID(), 'login' => $user->getLogin()); + foreach ($group->getUsers() as $userObj) { + $data['users'][] = array('id' => (int)$userObj->getID(), 'login' => $userObj->getLogin()); } return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); - } else { - return $response->withStatus(404); - } -} /* }}} */ + } /* }}} */ -function changeGroupMembership($request, $response, $args, $operationType) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; + function addUserToGroup($request, $response, $args) { /* {{{ */ + return changeGroupMembership($request, $response, $args, 'add'); + } /* }}} */ - if(ctype_digit($args['id'])) - $group = $dms->getGroup($args['id']); - else { - $group = $dms->getGroupByName($args['id']); - } + function removeUserFromGroup($request, $response, $args) { /* {{{ */ + return changeGroupMembership($request, $response, $args, 'remove'); + } /* }}} */ - $params = $request->getParsedBody(); - if (empty($params['userid'])) { - return $response->withJson(array('success'=>false, 'message'=>'Missing userid', 'data'=>''), 200); - } - $userId = $params['userid']; - if(ctype_digit($userId)) - $user = $dms->getUser($userId); - else { - $user = $dms->getUserByLogin($userId); - } + function setFolderInheritsAccess($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - if (!($group && $user)) { - return $response->withStatus(404); - } - - $operationResult = false; - - if ($operationType == 'add') - { - $operationResult = $group->addUser($user); - } - if ($operationType == 'remove') - { - $operationResult = $group->removeUser($user); - } - - if ($operationResult === false) - { - $message = 'Could not add user to the group.'; - if ($operationType == 'remove') + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + $params = $request->getParsedBody(); + if (empty($params['enable'])) { - $message = 'Could not remove user from group.'; - } - return $response->withJson(array('success'=>false, 'message'=>'Something went wrong. ' . $message, 'data'=>''), 500); - } - - $data = __getGroupData($group); - $data['users'] = array(); - foreach ($group->getUsers() as $userObj) { - $data['users'][] = array('id' => (int)$userObj->getID(), 'login' => $userObj->getLogin()); - } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); -} /* }}} */ - -function addUserToGroup($request, $response, $args) { /* {{{ */ - return changeGroupMembership($request, $response, $args, 'add'); -} /* }}} */ - -function removeUserFromGroup($request, $response, $args) { /* {{{ */ - return changeGroupMembership($request, $response, $args, 'remove'); -} /* }}} */ - -function setFolderInheritsAccess($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; - $params = $request->getParsedBody(); - if (empty($params['enable'])) - { - return $response->withJson(array('success'=>false, 'message'=>'You must supply an "enable" value', 'data'=>''), 200); - } - - $inherit = false; - $status = $params['enable']; - if ($status == 'true' || $status == '1') - { - $inherit = true; - } - - if(ctype_digit($args['id'])) - $folder = $dms->getFolder($args['id']); - else { - $folder = $dms->getFolderByName($args['id']); - } - - if($folder) { - $folder->setInheritAccess($inherit); - $folderId = $folder->getId(); - $folder = null; - // reread from db - $folder = $dms->getFolder($folderId); - $success = ($folder->inheritsAccess() == $inherit); - return $response->withJson(array('success'=>$success, 'message'=>'', 'data'=>$data), 200); - } else { - return $response->withStatus(404); - } -} /* }}} */ - -function addUserAccessToFolder($request, $response, $args) { /* {{{ */ - return changeFolderAccess($request, $response, $args, 'add', 'user'); -} /* }}} */ - -function addGroupAccessToFolder($request, $response, $args) { /* {{{ */ - return changeFolderAccess($request, $response, $args, 'add', 'group'); -} /* }}} */ - -function removeUserAccessFromFolder($request, $response, $args) { /* {{{ */ - return changeFolderAccess($request, $response, $args, 'remove', 'user'); -} /* }}} */ - -function removeGroupAccessFromFolder($request, $response, $args) { /* {{{ */ - return changeFolderAccess($request, $response, $args, 'remove', 'group'); -} /* }}} */ - -function changeFolderAccess($request, $response, $args, $operationType, $userOrGroup) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; - - if(ctype_digit($args['id'])) - $folder = $dms->getfolder($args['id']); - else { - $folder = $dms->getfolderByName($args['id']); - } - if (!$folder) { - return $response->withStatus(404); - } - - $params = $request->getParsedBody(); - $userOrGroupIdInput = $params['id']; - if ($operationType == 'add') - { - if ($params['id'] == null) - { - return $response->withJson(array('success'=>false, 'message'=>'Please PUT the user or group Id', 'data'=>''), 200); + return $response->withJson(array('success'=>false, 'message'=>'You must supply an "enable" value', 'data'=>''), 200); } - if ($params['mode'] == null) + $inherit = false; + $status = $params['enable']; + if ($status == 'true' || $status == '1') { - return $response->withJson(array('success'=>false, 'message'=>'Please PUT the access mode', 'data'=>''), 200); + $inherit = true; } - $modeInput = $params['mode']; - - $mode = M_NONE; - if ($modeInput == 'read') - { - $mode = M_READ; + if(ctype_digit($args['id'])) + $folder = $dms->getFolder($args['id']); + else { + $folder = $dms->getFolderByName($args['id']); } - if ($modeInput == 'readwrite') - { - $mode = M_READWRITE; + + if($folder) { + $folder->setInheritAccess($inherit); + $folderId = $folder->getId(); + $folder = null; + // reread from db + $folder = $dms->getFolder($folderId); + $success = ($folder->inheritsAccess() == $inherit); + return $response->withJson(array('success'=>$success, 'message'=>'', 'data'=>$data), 200); + } else { + return $response->withStatus(404); } - if ($modeInput == 'all') - { - $mode = M_ALL; + } /* }}} */ + + function addUserAccessToFolder($request, $response, $args) { /* {{{ */ + return changeFolderAccess($request, $response, $args, 'add', 'user'); + } /* }}} */ + + function addGroupAccessToFolder($request, $response, $args) { /* {{{ */ + return changeFolderAccess($request, $response, $args, 'add', 'group'); + } /* }}} */ + + function removeUserAccessFromFolder($request, $response, $args) { /* {{{ */ + return changeFolderAccess($request, $response, $args, 'remove', 'user'); + } /* }}} */ + + function removeGroupAccessFromFolder($request, $response, $args) { /* {{{ */ + return changeFolderAccess($request, $response, $args, 'remove', 'group'); + } /* }}} */ + + function changeFolderAccess($request, $response, $args, $operationType, $userOrGroup) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + + if(ctype_digit($args['id'])) + $folder = $dms->getfolder($args['id']); + else { + $folder = $dms->getfolderByName($args['id']); } - } - - - $userOrGroupId = $userOrGroupIdInput; - if(!ctype_digit($userOrGroupIdInput) && $userOrGroup == 'user') - { - $userOrGroupObj = $dms->getUserByLogin($userOrGroupIdInput); - } - if(!ctype_digit($userOrGroupIdInput) && $userOrGroup == 'group') - { - $userOrGroupObj = $dms->getGroupByName($userOrGroupIdInput); - } - if(ctype_digit($userOrGroupIdInput) && $userOrGroup == 'user') - { - $userOrGroupObj = $dms->getUser($userOrGroupIdInput); - } - if(ctype_digit($userOrGroupIdInput) && $userOrGroup == 'group') - { - $userOrGroupObj = $dms->getGroup($userOrGroupIdInput); - } - if (!$userOrGroupObj) { - return $response->withStatus(404); - } - $userOrGroupId = $userOrGroupObj->getId(); - - $operationResult = false; - - if ($operationType == 'add' && $userOrGroup == 'user') - { - $operationResult = $folder->addAccess($mode, $userOrGroupId, true); - } - if ($operationType == 'remove' && $userOrGroup == 'user') - { - $operationResult = $folder->removeAccess($userOrGroupId, true); - } - - if ($operationType == 'add' && $userOrGroup == 'group') - { - $operationResult = $folder->addAccess($mode, $userOrGroupId, false); - } - if ($operationType == 'remove' && $userOrGroup == 'group') - { - $operationResult = $folder->removeAccess($userOrGroupId, false); - } - - if ($operationResult === false) - { - $message = 'Could not add user/group access to this folder.'; - if ($operationType == 'remove') - { - $message = 'Could not remove user/group access from this folder.'; + if (!$folder) { + return $response->withStatus(404); } - return $response->withJson(array('success'=>false, 'message'=>'Something went wrong. ' . $message, 'data'=>''), 500); - } - $data = array(); - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); -} /* }}} */ + $params = $request->getParsedBody(); + $userOrGroupIdInput = $params['id']; + if ($operationType == 'add') + { + if ($params['id'] == null) + { + return $response->withJson(array('success'=>false, 'message'=>'Please PUT the user or group Id', 'data'=>''), 200); + } -function getCategories($request, $response) { /* {{{ */ - global $dms, $userobj; + if ($params['mode'] == null) + { + return $response->withJson(array('success'=>false, 'message'=>'Please PUT the access mode', 'data'=>''), 200); + } - if(false === ($categories = $dms->getDocumentCategories())) { - return $response->withJson(array('success'=>false, 'message'=>'Could not get categories', 'data'=>null), 500); - } - $data = []; - foreach($categories as $category) - $data[] = ['id' => (int)$category->getId(), 'name' => $category->getName()]; + $modeInput = $params['mode']; - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); -} /* }}} */ + $mode = M_NONE; + if ($modeInput == 'read') + { + $mode = M_READ; + } + if ($modeInput == 'readwrite') + { + $mode = M_READWRITE; + } + if ($modeInput == 'all') + { + $mode = M_ALL; + } + } -function getCategory($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - if(!ctype_digit($args['id'])) { - return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 400); - } + $userOrGroupId = $userOrGroupIdInput; + if(!ctype_digit($userOrGroupIdInput) && $userOrGroup == 'user') + { + $userOrGroupObj = $dms->getUserByLogin($userOrGroupIdInput); + } + if(!ctype_digit($userOrGroupIdInput) && $userOrGroup == 'group') + { + $userOrGroupObj = $dms->getGroupByName($userOrGroupIdInput); + } + if(ctype_digit($userOrGroupIdInput) && $userOrGroup == 'user') + { + $userOrGroupObj = $dms->getUser($userOrGroupIdInput); + } + if(ctype_digit($userOrGroupIdInput) && $userOrGroup == 'group') + { + $userOrGroupObj = $dms->getGroup($userOrGroupIdInput); + } + if (!$userOrGroupObj) { + return $response->withStatus(404); + } + $userOrGroupId = $userOrGroupObj->getId(); + + $operationResult = false; + + if ($operationType == 'add' && $userOrGroup == 'user') + { + $operationResult = $folder->addAccess($mode, $userOrGroupId, true); + } + if ($operationType == 'remove' && $userOrGroup == 'user') + { + $operationResult = $folder->removeAccess($userOrGroupId, true); + } + + if ($operationType == 'add' && $userOrGroup == 'group') + { + $operationResult = $folder->addAccess($mode, $userOrGroupId, false); + } + if ($operationType == 'remove' && $userOrGroup == 'group') + { + $operationResult = $folder->removeAccess($userOrGroupId, false); + } + + if ($operationResult === false) + { + $message = 'Could not add user/group access to this folder.'; + if ($operationType == 'remove') + { + $message = 'Could not remove user/group access from this folder.'; + } + return $response->withJson(array('success'=>false, 'message'=>'Something went wrong. ' . $message, 'data'=>''), 500); + } - $category = $dms->getDocumentCategory($args['id']); - if($category) { $data = array(); - $data['id'] = (int)$category->getId(); - $data['name'] = $category->getName(); return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); - } else { - return $response->withStatus(404); - } -} /* }}} */ + } /* }}} */ -function createCategory($request, $response) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; + function getCategories($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - $params = $request->getParsedBody(); - if (empty($params['category'])) { - return $response->withJson(array('success'=>false, 'message'=>'Need a category.', 'data'=>''), 400); - } - - $catobj = $dms->getDocumentCategoryByName($params['category']); - if($catobj) { - return $response->withJson(array('success'=>false, 'message'=>'Category already exists', 'data'=>''), 409); - } else { - if($data = $dms->addDocumentCategory($params['category'])) { - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>array('id'=>(int)$data->getID())), 201); - } else { - return $response->withJson(array('success'=>false, 'message'=>'Could not add category', 'data'=>''), 500); + if(false === ($categories = $dms->getDocumentCategories())) { + return $response->withJson(array('success'=>false, 'message'=>'Could not get categories', 'data'=>null), 500); } - } -} /* }}} */ + $data = []; + foreach($categories as $category) + $data[] = $this->__getCategoryData($category); -function deleteCategory($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } /* }}} */ - if($category = $dms->getDocumentCategory($args['id'])) { - if($result = $category->remove()) { - return $response->withJson(array('success'=>$result, 'message'=>'', 'data'=>''), 200); - } else { - return $response->withJson(array('success'=>$result, 'message'=>'Could not delete category', 'data'=>''), 500); + function getCategory($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + if(!ctype_digit($args['id'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); } - } else { - return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404); - } -} /* }}} */ -/** - * Updates the name of an existing category - * - * @param $id The user name or numerical identifier - */ -function changeCategoryName($request, $response, $args) { /* {{{ */ - global $dms, $userobj; + $category = $dms->getDocumentCategory($args['id']); + if($category) { + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getCategoryData($category)), 200); + } else { + return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404); + } + } /* }}} */ - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; + function createCategory($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - $params = $request->getParsedBody(); - if (empty($params['name'])) - { - return $response->withJson(array('success'=>false, 'message'=>'You must supply a new name', 'data'=>''), 200); - } + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; - $newname = $params['name']; + $params = $request->getParsedBody(); + if (empty($params['name'])) { + return $response->withJson(array('success'=>false, 'message'=>'Need a category.', 'data'=>''), 400); + } + + $catobj = $dms->getDocumentCategoryByName($params['name']); + if($catobj) { + return $response->withJson(array('success'=>false, 'message'=>'Category already exists', 'data'=>''), 409); + } else { + if($data = $dms->addDocumentCategory($params['name'])) { + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getCategoryData($data)), 201); + } else { + return $response->withJson(array('success'=>false, 'message'=>'Could not add category', 'data'=>''), 500); + } + } + } /* }}} */ + + function deleteCategory($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + + if($category = $dms->getDocumentCategory($args['id'])) { + if($result = $category->remove()) { + return $response->withJson(array('success'=>$result, 'message'=>'', 'data'=>''), 200); + } else { + return $response->withJson(array('success'=>$result, 'message'=>'Could not delete category', 'data'=>''), 500); + } + } else { + return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404); + } + } /* }}} */ + + /** + * Updates the name of an existing category + * + * @param $id The user name or numerical identifier + */ + function changeCategoryName($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + + if(!ctype_digit($args['id'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); + } + + $params = $request->getParsedBody(); + if (empty($params['name'])) + { + return $response->withJson(array('success'=>false, 'message'=>'You must supply a new name', 'data'=>''), 400); + } + + $newname = $params['name']; - $category = null; - if(ctype_digit($args['id'])) $category = $dms->getDocumentCategory($args['id']); + /** + * Category not found + */ + if (!$category) { + return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404); + } + + if (!$category->setName($newname)) { + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'Could not change name.'), 400); + } + + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getCategoryData($category)), 200); + } /* }}} */ + + function getAttributeDefinitions($request, $response) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $attrdefs = $dms->getAllAttributeDefinitions(); + $data = []; + foreach($attrdefs as $attrdef) + $data[] = $this->__getAttributeDefinitionData($attrdef); + + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); + } /* }}} */ + /** - * Category not found + * Updates the name of an existing attribute definition + * + * @param $id The user name or numerical identifier */ - if (!$category) { - return $response->withStatus(404); - } + function changeAttributeDefinitionName($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; - if (!$category->setName($newname)) { - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'Could not change name.'), 200); - } + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); -} /* }}} */ + if(!ctype_digit($args['id'])) { + return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400); + } -function getAttributeDefinitions($request, $response) { /* {{{ */ - global $dms, $userobj; + $params = $request->getParsedBody(); + if ($params['name'] == null) { + return $response->withJson(array('success'=>false, 'message'=>'You must supply a new name', 'data'=>''), 400); + } - $attrdefs = $dms->getAllAttributeDefinitions(); - $data = []; - foreach($attrdefs as $attrdef) - $data[] = ['id' => (int)$attrdef->getId(), 'name' => $attrdef->getName(), 'type'=>(int)$attrdef->getType(), 'objtype'=>(int)$attrdef->getObjType(), 'min'=>(int)$attrdef->getMinValues(), 'max'=>(int)$attrdef->getMaxValues(), 'multiple'=>$attrdef->getMultipleValues()?true:false, 'valueset'=>$attrdef->getValueSetAsArray()]; + $newname = $params['name']; - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200); -} /* }}} */ - -/** - * Updates the name of an existing attribute definition - * - * @param $id The user name or numerical identifier - */ -function changeAttributeDefinitionName($request, $response, $args) { /* {{{ */ - global $dms, $userobj; - - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; - - $params = $request->getParsedBody(); - if ($params['name'] == null) { - return $response->withJson(array('success'=>false, 'message'=>'You must supply a new name', 'data'=>''), 200); - } - - $newname = $params['name']; - - $attrdef = null; - if(ctype_digit($args['id'])) $attrdef = $dms->getAttributeDefinition($args['id']); - /** - * Category not found - */ - if (!$attrdef) { - return $response->withStatus(404); - } + /** + * Attribute definition not found + */ + if (!$attrdef) { + return $response->withJson(array('success'=>false, 'message'=>'No such attribute defintion', 'data'=>''), 404); + } - if (!$attrdef->setName($newname)) { - return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'Could not change name.'), 200); - return; - } + if (!$attrdef->setName($newname)) { + return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'Could not change name.'), 400); + return; + } + + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getAttributeDefinitionData($attrdef)), 200); + } /* }}} */ + + function clearFolderAccessList($request, $response, $args) { /* {{{ */ + $dms = $this->container->dms; + $userobj = $this->container->userobj; + + $check = $this->checkIfAdmin($request, $response); + if($check !== true) + return $check; + + if(ctype_digit($args['id'])) + $folder = $dms->getFolder($args['id']); + else { + $folder = $dms->getFolderByName($args['id']); + } + if (!$folder) { + return $response->withStatus(404); + } + if (!$folder->clearAccessList()) { + return $response->withJson(array('success'=>false, 'message'=>'Something went wrong. Could not clear access list for this folder.', 'data'=>''), 500); + } + return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); + } /* }}} */ - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); } /* }}} */ -function clearFolderAccessList($request, $response, $args) { /* {{{ */ - global $dms, $userobj; +class TestController { /* {{{ */ + protected $container; - $check = checkIfAdmin($request, $response); - if($check !== true) - return $check; + // constructor receives container instance + public function __construct(ContainerInterface $container) { + $this->container = $container; + } - if(ctype_digit($args['id'])) - $folder = $dms->getFolder($args['id']); - else { - $folder = $dms->getFolderByName($args['id']); - } - if (!$folder) { - return $response->withStatus(404); - } - if (!$folder->clearAccessList()) { - return $response->withJson(array('success'=>false, 'message'=>'Something went wrong. Could not clear access list for this folder.', 'data'=>''), 500); - } - return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200); -} /* }}} */ - -function echoData($request, $response) { /* {{{ */ - echo $request->getBody(); + public function echoData($request, $response) { /* {{{ */ + return $response->withJson(array('success'=>true, 'message'=>'This is the result of the echo call.', 'data'=>''), 200); + } /* }}} */ } /* }}} */ //$app = new Slim(array('mode'=>'development', '_session.handler'=>null)); $app = new \Slim\App(); +/* Middleware for authentication */ +class Auth { /* {{{ */ + + private $container; + + public function __construct($container) { + $this->container = $container; + } + + /** + * Example middleware invokable class + * + * @param \Psr\Http\Message\ServerRequestInterface $request PSR7 request + * @param \Psr\Http\Message\ResponseInterface $response PSR7 response + * @param callable $next Next middleware + * + * @return \Psr\Http\Message\ResponseInterface + */ + public function __invoke($request, $response, $next) + { + // $this->container has the DI + $dms = $this->container->dms; + $settings = $this->container->config; + if($settings->_apiOrigin && isset($this->container->environment['HTTP_ORIGIN'])) { + $origins = explode(',', $settings->_apiOrigin); + if(!in_array($this->container->environment['HTTP_ORIGIN'], $origins)) { + return $response->withStatus(403); + } + } + /* The preflight options request doesn't have authorization in the header. So + * don't even try to authorize. + */ + if($request->getMethod() == 'OPTIONS') { + } elseif(!in_array($request->getUri()->getPath(), array('echo', 'login'))) { + $userobj = null; + if(!empty($this->container->environment['HTTP_AUTHORIZATION']) && !empty($settings->_apiKey) && !empty($settings->_apiUserId)) { + if($settings->_apiKey == $this->container->environment['HTTP_AUTHORIZATION']) { + if(!($userobj = $dms->getUser($settings->_apiUserId))) { + return $response->withStatus(403); + } + } else { + return $response->withStatus(403); + } + } else { + require_once("../inc/inc.ClassSession.php"); + $session = new SeedDMS_Session($dms->getDb()); + if (isset($_COOKIE["mydms_session"])) { + $dms_session = $_COOKIE["mydms_session"]; + if(!$resArr = $session->load($dms_session)) { + /* Delete Cookie */ + setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot); + if($settings->_enableGuestLogin) + $userobj = $dms->getUser($settings->_guestID); + else + return $response->withStatus(403); + } + + /* Load user data */ + $userobj = $dms->getUser($resArr["userID"]); + if (!is_object($userobj)) { + /* Delete Cookie */ + setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot); + if($settings->_enableGuestLogin) { + if(!($userobj = $dms->getUser($settings->_guestID))) + return $response->withStatus(403); + } else + return $response->withStatus(403); + } + if($userobj->isAdmin()) { + if($resArr["su"]) { + if(!($userobj = $dms->getUser($resArr["su"]))) + return $response->withStatus(403); + } + } + $dms->setUser($userobj); + } else { + return $response->withStatus(403); + } + } + $this->container['userobj'] = $userobj; + } + $response = $next($request, $response); + return $response; + } +} /* }}} */ + +$container = $app->getContainer(); +$container['dms'] = $dms; +$container['config'] = $settings; +$app->add(new Auth($container)); + +// Make CORS preflighted request possible +$app->options('/{routes:.+}', function ($request, $response, $args) { + return $response; +}); +$app->add(function ($req, $res, $next) { + $response = $next($req, $res); + return $response + ->withHeader('Access-Control-Allow-Origin', $req->getHeader('Origin') ? $req->getHeader('Origin') : '*') + ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization') + ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS'); +}); // use post for create operation // use get for retrieval operation // use put for update operation // use delete for delete operation -$app->post('/login', 'doLogin'); -$app->get('/logout', 'doLogout'); -$app->get('/account', 'getAccount'); -$app->get('/search', 'doSearch'); -$app->get('/searchbyattr', 'doSearchByAttr'); -$app->get('/folder/', 'getFolder'); -$app->get('/folder/{id}', 'getFolder'); -$app->post('/folder/{id}/move/{folderid}', 'moveFolder'); -$app->delete('/folder/{id}', 'deleteFolder'); -$app->get('/folder/{id}/children', 'getFolderChildren'); -$app->get('/folder/{id}/parent', 'getFolderParent'); -$app->get('/folder/{id}/path', 'getFolderPath'); -$app->get('/folder/{id}/attributes', 'getFolderAttributes'); -$app->post('/folder/{id}/createfolder', 'createFolder'); -$app->put('/folder/{id}/document', 'uploadDocumentPut'); -$app->post('/folder/{id}/document', 'uploadDocument'); -$app->get('/document/{id}', 'getDocument'); -$app->post('/document/{id}/attachment', 'uploadDocumentFile'); -$app->post('/document/{id}/update', 'updateDocument'); -$app->delete('/document/{id}', 'deleteDocument'); -$app->post('/document/{id}/move/{folderid}', 'moveDocument'); -$app->get('/document/{id}/content', 'getDocumentContent'); -$app->get('/document/{id}/versions', 'getDocumentVersions'); -$app->get('/document/{id}/version/{version}', 'getDocumentVersion'); -$app->put('/document/{id}/version/{version}', 'updateDocumentVersion'); -$app->get('/document/{id}/files', 'getDocumentFiles'); -$app->get('/document/{id}/file/{fileid}', 'getDocumentFile'); -$app->get('/document/{id}/links', 'getDocumentLinks'); -$app->post('/document/{id}/link/{documentid}', 'addDocumentLink'); -$app->get('/document/{id}/attributes', 'getDocumentAttributes'); -$app->get('/document/{id}/preview/{version}/{width}', 'getDocumentPreview'); -$app->delete('/document/{id}/categories', 'removeDocumentCategories'); -$app->delete('/document/{id}/category/{categoryId}', 'removeDocumentCategory'); -$app->put('/account/fullname', 'setFullName'); -$app->put('/account/email', 'setEmail'); -$app->get('/account/documents/locked', 'getLockedDocuments'); -$app->get('/users', 'getUsers'); -$app->delete('/users/{id}', 'deleteUser'); -$app->post('/users', 'createUser'); -$app->get('/users/{id}', 'getUserById'); -$app->put('/users/{id}/disable', 'setDisabledUser'); -$app->put('/users/{id}/password', 'changeUserPassword'); -$app->post('/groups', 'createGroup'); -$app->get('/groups', 'getGroups'); -$app->get('/groups/{id}', 'getGroup'); -$app->put('/groups/{id}/addUser', 'addUserToGroup'); -$app->put('/groups/{id}/removeUser', 'removeUserFromGroup'); -$app->put('/folder/{id}/setInherit', 'setFolderInheritsAccess'); -$app->put('/folder/{id}/access/group/add', 'addGroupAccessToFolder'); // -$app->put('/folder/{id}/access/user/add', 'addUserAccessToFolder'); // -$app->put('/folder/{id}/access/group/remove', 'removeGroupAccessFromFolder'); -$app->put('/folder/{id}/access/user/remove', 'removeUserAccessFromFolder'); -$app->put('/folder/{id}/access/clear', 'clearFolderAccessList'); -$app->get('/categories', 'getCategories'); -$app->get('/categories/{id}', 'getCategory'); -$app->delete('/categories/{id}', 'deleteCategory'); -$app->post('/categories', 'createCategory'); -$app->put('/categories/{id}/name', 'changeCategoryName'); -$app->get('/attributedefinitions', 'getAttributeDefinitions'); -$app->put('/attributedefinitions/{id}/name', 'changeAttributeDefinitionName'); -$app->any('/echo', 'echoData'); +$app->post('/login', \RestapiController::class.':doLogin'); +$app->get('/logout', \RestapiController::class.':doLogout'); +$app->get('/account', \RestapiController::class.':getAccount'); +$app->get('/search', \RestapiController::class.':doSearch'); +$app->get('/searchbyattr', \RestapiController::class.':doSearchByAttr'); +$app->get('/folder/', \RestapiController::class.':getFolder'); +$app->get('/folder/{id}', \RestapiController::class.':getFolder'); +$app->post('/folder/{id}/move/{folderid}', \RestapiController::class.':moveFolder'); +$app->delete('/folder/{id}', \RestapiController::class.':deleteFolder'); +$app->get('/folder/{id}/children', \RestapiController::class.':getFolderChildren'); +$app->get('/folder/{id}/parent', \RestapiController::class.':getFolderParent'); +$app->get('/folder/{id}/path', \RestapiController::class.':getFolderPath'); +$app->get('/folder/{id}/attributes', \RestapiController::class.':getFolderAttributes'); +$app->post('/folder/{id}/folder', \RestapiController::class.':createFolder'); +$app->put('/folder/{id}/document', \RestapiController::class.':uploadDocumentPut'); +$app->post('/folder/{id}/document', \RestapiController::class.':uploadDocument'); +$app->get('/document/{id}', \RestapiController::class.':getDocument'); +$app->post('/document/{id}/attachment', \RestapiController::class.':uploadDocumentFile'); +$app->post('/document/{id}/update', \RestapiController::class.':updateDocument'); +$app->delete('/document/{id}', \RestapiController::class.':deleteDocument'); +$app->post('/document/{id}/move/{folderid}', \RestapiController::class.':moveDocument'); +$app->get('/document/{id}/content', \RestapiController::class.':getDocumentContent'); +$app->get('/document/{id}/versions', \RestapiController::class.':getDocumentVersions'); +$app->get('/document/{id}/version/{version}', \RestapiController::class.':getDocumentVersion'); +$app->put('/document/{id}/version/{version}', \RestapiController::class.':updateDocumentVersion'); +$app->get('/document/{id}/files', \RestapiController::class.':getDocumentFiles'); +$app->get('/document/{id}/file/{fileid}', \RestapiController::class.':getDocumentFile'); +$app->get('/document/{id}/links', \RestapiController::class.':getDocumentLinks'); +$app->post('/document/{id}/link/{documentid}', \RestapiController::class.':addDocumentLink'); +$app->get('/document/{id}/attributes', \RestapiController::class.':getDocumentAttributes'); +$app->get('/document/{id}/preview/{version}/{width}', \RestapiController::class.':getDocumentPreview'); +$app->delete('/document/{id}/categories', \RestapiController::class.':removeDocumentCategories'); +$app->delete('/document/{id}/category/{catid}', \RestapiController::class.':removeDocumentCategory'); +$app->put('/account/fullname', \RestapiController::class.':setFullName'); +$app->put('/account/email', \RestapiController::class.':setEmail'); +$app->get('/account/documents/locked', \RestapiController::class.':getLockedDocuments'); +$app->get('/users', \RestapiController::class.':getUsers'); +$app->delete('/users/{id}', \RestapiController::class.':deleteUser'); +$app->post('/users', \RestapiController::class.':createUser'); +$app->get('/users/{id}', \RestapiController::class.':getUserById'); +$app->put('/users/{id}/disable', \RestapiController::class.':setDisabledUser'); +$app->put('/users/{id}/password', \RestapiController::class.':changeUserPassword'); +$app->post('/groups', \RestapiController::class.':createGroup'); +$app->get('/groups', \RestapiController::class.':getGroups'); +$app->get('/groups/{id}', \RestapiController::class.':getGroup'); +$app->put('/groups/{id}/addUser', \RestapiController::class.':addUserToGroup'); +$app->put('/groups/{id}/removeUser', \RestapiController::class.':removeUserFromGroup'); +$app->put('/folder/{id}/setInherit', \RestapiController::class.':setFolderInheritsAccess'); +$app->put('/folder/{id}/access/group/add', \RestapiController::class.':addGroupAccessToFolder'); // +$app->put('/folder/{id}/access/user/add', \RestapiController::class.':addUserAccessToFolder'); // +$app->put('/folder/{id}/access/group/remove', \RestapiController::class.':removeGroupAccessFromFolder'); +$app->put('/folder/{id}/access/user/remove', \RestapiController::class.':removeUserAccessFromFolder'); +$app->put('/folder/{id}/access/clear', \RestapiController::class.':clearFolderAccessList'); +$app->get('/categories', \RestapiController::class.':getCategories'); +$app->get('/categories/{id}', \RestapiController::class.':getCategory'); +$app->delete('/categories/{id}', \RestapiController::class.':deleteCategory'); +$app->post('/categories', \RestapiController::class.':createCategory'); +$app->put('/categories/{id}/name', \RestapiController::class.':changeCategoryName'); +$app->get('/attributedefinitions', \RestapiController::class.':getAttributeDefinitions'); +$app->put('/attributedefinitions/{id}/name', \RestapiController::class.':changeAttributeDefinitionName'); +$app->get('/echo', \TestController::class.':echoData'); $app->run(); ?> diff --git a/restapi/swagger.yaml b/restapi/swagger.yaml new file mode 100644 index 000000000..1e453c2a0 --- /dev/null +++ b/restapi/swagger.yaml @@ -0,0 +1,1915 @@ + +swagger: "2.0" +info: + description: "This is the rest api of SeedDMS." + version: "1.0.0" + title: "Swagger SeedDMS" + termsOfService: "https://www.seeddms.org/terms/" + contact: + email: "info@seeddms.org" + license: + name: "Apache 2.0" + url: "http://www.apache.org/licenses/LICENSE-2.0.html" +host: "" +basePath: "_httpRoot; ?>restapi/index.php" +tags: +- name: "user" + description: "Operations about user" + externalDocs: + description: "Find out more about our store" + url: "https://www.seeddms.org" +schemes: +- "https" +paths: + /login: + post: + tags: + - "account" + summary: "Log in" + description: "Log in by providing a username and password" + operationId: "login" + produces: + - "application/json" + consumes: + - application/x-www-form-urlencoded + parameters: + - name: "user" + in: "formData" + type: "string" + description: "Name of user" + required: true + - name: "pass" + in: "formData" + type: "string" + description: "Password of user" + required: true + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseUser" + "403": + description: "Login failed" + schema: + $ref: "#/definitions/ApiResponse" + "400": + description: "Invalid parameter" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /logout: + get: + tags: + - "account" + summary: "Log out" + description: "Log out" + operationId: "Kills the session and removes the cookie" + produces: + - "application/json" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /account: + get: + tags: + - "account" + summary: "Get account data" + description: "Returns account data of logged in user" + operationId: "getAccount" + produces: + - "application/json" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseUser" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /account/fullname: + put: + tags: + - "account" + summary: "Set full name of account" + description: "Sets the full name of the currently logged in user" + operationId: "setAccountFullname" + produces: + - "application/json" + consumes: + - application/x-www-form-urlencoded + parameters: + - in: formData + name: email + type: string + description: "New full name" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseUser" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /account/email: + put: + tags: + - "account" + summary: "Set email of account" + description: "Sets the email of the currently logged in user" + operationId: "setAccountEmail" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - in: formData + name: email + type: string + description: "New email" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseUser" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /account/documents/locked: + get: + tags: + - "account" + summary: "Get locked documents by myself" + description: "Returns locked documents of logged in user" + operationId: "getLockedDocuments" + produces: + - "application/json" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseDocuments" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /users: + get: + tags: + - "user" + summary: "Finds all users" + description: "Multiple status values can be provided with comma separated strings" + operationId: "getUsers" + produces: + - "application/json" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseUsers" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + post: + tags: + - "user" + summary: "Create user" + description: "This can only be done by the logged in user." + operationId: "createUser" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - in: "formData" + name: "user" + description: "Login of user" + type: "string" + required: true + - in: "formData" + name: "pass" + description: "Password of user" + type: "string" + required: true + - in: "formData" + name: "name" + description: "Full name of user" + type: "string" + required: true + - in: "formData" + name: "email" + description: "Email of user" + type: "string" + required: false + - in: "formData" + name: "language" + description: "Language of user" + type: "string" + required: false + - in: "formData" + name: "theme" + description: "Theme of user" + type: "string" + required: false + - in: "formData" + name: "comment" + description: "Comment of user" + type: "string" + required: false + - in: "formData" + name: "role" + description: "Role of user (admin, user, guest)" + type: "string" + enum: + - admin + - user + - guest + required: false + responses: + "201": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseUser" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "409": + description: "User already exists" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Error creating user" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /users/{id}: + get: + tags: + - "user" + summary: "Find user by ID" + description: "Returns a single user" + operationId: "getUserById" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of user to return" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseUser" + "404": + description: "User not found" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + delete: + tags: + - "user" + summary: "Delete user by ID" + description: "Delete a single user" + operationId: "deleteUserById" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of user to delete" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Error deleting user" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "User not found" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /users/{id}/disable: + put: + tags: + - "user" + summary: "Disable user by ID" + description: "Disable a single user" + operationId: "setDisabledUser" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of user to disable" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseUser" + "404": + description: "User not found" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /users/{id}/password: + put: + tags: + - "user" + summary: "Change password of user by ID" + description: "Change the password of a single user" + operationId: "changeUserPassword" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - name: "id" + in: "path" + description: "ID of user" + required: true + type: "integer" + format: "int64" + - in: "formData" + name: "password" + type: "string" + description: "New password" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "400": + description: "Invalid parameter" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "User not found" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /groups: + get: + tags: + - "group" + summary: "Finds all groups" + description: "Return a list of all groups" + operationId: "getGroups" + produces: + - "application/json" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseGroups" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + post: + tags: + - "group" + summary: "Create group" + description: "This can only be done by the logged in user." + operationId: "createGroup" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - in: "formData" + name: "name" + type: "string" + description: "Name of new group" + required: true + - in: "formData" + name: "comment" + type: "string" + description: "Comment of new group" + required: false + responses: + "201": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseGroup" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "409": + description: "Group already exists" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Error creating user" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}: + get: + tags: + - "document" + summary: "Find document by ID" + description: "Returns a single document" + operationId: "getDocument" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of document to return" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseDocument" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + delete: + tags: + - "document" + summary: "Delete document by ID" + description: "Delete a single document" + operationId: "deleteDocument" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of document to delete" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Error deleting user" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "User not found" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/preview/{version}/{width}: + get: + tags: + - "document" + summary: "Return preview of document" + description: "Returns the preview image of a given version of a document" + operationId: "getDocumentPreview" + parameters: + - name: "id" + in: "path" + description: "ID of document to return" + required: true + type: "integer" + format: "int64" + - name: "version" + in: "path" + description: "Version number of document" + required: true + type: "integer" + format: "int64" + - name: "width" + in: "path" + description: "Width of preview image" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "preview image file" + schema: + type: "file" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/content: + get: + tags: + - "document" + summary: "Return latest content of document" + description: "Returns the most current version of a document" + operationId: "getDocumentContent" + parameters: + - name: "id" + in: "path" + description: "ID of document to return" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "content file" + schema: + type: "file" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/file/{fileid}: + get: + tags: + - "document" + summary: "Return certain attached file of document" + description: "Returns the attached file of a document" + operationId: "getDocumentFile" + parameters: + - name: "id" + in: "path" + description: "ID of document" + required: true + type: "integer" + format: "int64" + - name: "fileid" + in: "path" + description: "Id of file to return" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "attached file" + schema: + type: "file" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/version/{version}: + get: + tags: + - "document" + summary: "Return certain version of document" + description: "Returns the requested version of a document" + operationId: "getDocumentVersion" + parameters: + - name: "id" + in: "path" + description: "ID of document to return" + required: true + type: "integer" + format: "int64" + - name: "version" + in: "path" + description: "Version number of document to return" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "content file" + schema: + type: "file" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/attributes: + get: + tags: + - "document" + summary: "Return attributes of document by ID" + description: "Returns the attributes of a given document" + operationId: "getDocumentAttributes" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of document whose attributes to be returned." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseAttributes" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/files: + get: + tags: + - "document" + summary: "Return attached files of document by ID" + description: "Returns the attached files of a given document" + operationId: "getDocumentFiles" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of document whose files to be returned." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseDocumentFiles" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/links: + get: + tags: + - "document" + summary: "Return links of document by ID" + description: "Returns the links of a given document" + operationId: "getDocumentLinks" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of document whose links to be returned." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseDocumentLinks" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/link/{targetid}: + post: + tags: + - "document" + summary: "Add link between documents" + description: "Adds a link from a source document to a target document" + operationId: "addDocumentLink" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - name: "id" + in: "path" + description: "ID of source document." + type: "integer" + required: true + format: "int64" + - name: "targetid" + in: "path" + description: "ID of target document." + type: "integer" + required: true + format: "int64" + - in: "formData" + name: "public" + description: "Set to true if link shall be public" + type: "boolean" + required: false + responses: + "201": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/versions: + get: + tags: + - "document" + summary: "Return all versions of a document by ID" + description: "Returns the versions of a given document" + operationId: "getDocumentVersions" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of document whose versions to be returned." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseDocumentContents" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Document not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/categories: + delete: + tags: + - "document" + summary: "Delete all categories of a document" + description: "Delete all categories from a given document" + operationId: "deleteDocumentCategories" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of document" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Error deleting user" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "User not found" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /document/{id}/category/{catid}: + delete: + tags: + - "document" + summary: "Delete a single category of a document" + description: "Delete just one category with the given id from the given document" + operationId: "deleteDocumentCategory" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of document" + required: true + type: "integer" + format: "int64" + - name: "catid" + in: "path" + description: "ID of category to delete" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Error deleting user" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "User not found" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /folder/{id}: + get: + tags: + - "folder" + summary: "Find folder by ID" + description: "Returns a single folder" + operationId: "getFolder" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of folder to return. ID=0 returns root folder." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseFolder" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Folder not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + delete: + tags: + - "folder" + summary: "Delete folder by ID" + description: "Delete the folder with the given id" + operationId: "deleteFolder" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of folder to delete." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Folder not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /folder/{id}/parent: + get: + tags: + - "folder" + summary: "Find parent of folder by ID" + description: "Returns the parent folder of a given folder" + operationId: "getFolderParent" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of folder whose parent to be returned." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseFolder" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Folder not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /folder/{id}/children: + get: + tags: + - "folder" + summary: "Find children of folder by ID" + description: "Returns the children of a given folder" + operationId: "getFolderChildren" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of folder whose children to be returned." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseFolder" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Folder not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /folder/{id}/path: + get: + tags: + - "folder" + summary: "Return path of folder by ID" + description: "Returns the path of a given folder" + operationId: "getFolderPath" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of folder whose path to be returned." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseFolderPath" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Folder not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /folder/{id}/attributes: + get: + tags: + - "folder" + summary: "Return attributes of folder by ID" + description: "Returns the attributes of a given folder" + operationId: "getFolderAttributes" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of folder whose attributes to be returned." + type: "integer" + required: true + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseAttributes" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Folder not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /folder/{id}/folder: + post: + tags: + - "folder" + summary: "Create new subolder" + description: "Creates a new subfolder in the a given folder" + operationId: "createFolder" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - name: "id" + in: "path" + description: "ID of parent folder." + type: "integer" + required: true + format: "int64" + - in: "formData" + name: "name" + description: "Name of new folder" + type: "string" + required: true + - in: "formData" + name: "comment" + description: "Comment of new folder" + type: "string" + required: false + - in: "formData" + name: "sequence" + description: "Sequence of new folder" + type: "string" + required: false + responses: + "201": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseFolder" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Folder not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /folder/{id}/document: + post: + tags: + - "folder" + summary: "Create new document" + description: "Creates a new document in the a given folder" + operationId: "createDocument" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - name: "id" + in: "path" + description: "ID of parent folder." + type: "integer" + required: true + format: "int64" + - in: "formData" + name: "file" + type: "file" + description: "Content of new document" + required: true + - in: "formData" + name: "name" + description: "Name of new document" + type: "string" + required: true + - in: "formData" + name: "comment" + description: "Comment of new document" + type: "string" + required: false + - in: "formData" + name: "sequence" + description: "Sequence of new document" + type: "string" + required: false + responses: + "201": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseDocument" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Folder not found" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Internal error" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /categories: + get: + tags: + - "category" + summary: "Finds all categories" + operationId: "getCategories" + produces: + - "application/json" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseCategories" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + post: + tags: + - "category" + summary: "Create a new category" + operationId: "postCategories" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - in: "formData" + name: "name" + description: "Name of new category" + type: "string" + required: true + responses: + "201": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseCategories" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "409": + description: "Category already exists" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Error creating category" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /categories/{id}: + get: + tags: + - "category" + summary: "Find category by ID" + description: "Returns a single category" + operationId: "getCategory" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of category to return" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseCategory" + "404": + description: "Category not found" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + delete: + tags: + - "category" + summary: "Delete category by ID" + description: "Delete a single category" + operationId: "deleteCategory" + produces: + - "application/json" + parameters: + - name: "id" + in: "path" + description: "ID of category to delete" + required: true + type: "integer" + format: "int64" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "500": + description: "Error deleting user" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + "404": + description: "Category not found" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /categories/{id}/name: + put: + tags: + - "category" + summary: "Set name of category" + description: "Sets the name of the category" + operationId: "changeCategoryName" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - name: "id" + in: "path" + description: "ID of category" + required: true + type: "integer" + format: "int64" + - in: "formData" + name: "name" + type: "string" + description: "New name" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseCategory" + "400": + description: "Invalid parameter" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /attributedefinitions: + get: + tags: + - "attributedefinition" + summary: "Finds all attribute definitions" + operationId: "getAttributeDefinitions" + produces: + - "application/json" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseAttributeDefinitions" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /attributedefinitions/{id}/name: + put: + tags: + - "attributedefinition" + summary: "Set name of attribute definition" + description: "Sets the name of the attribute definition" + operationId: "changeAttributeDefinitionName" + produces: + - "application/json" + consumes: + - multipart/form-data + parameters: + - name: "id" + in: "path" + description: "ID of attribute definition" + required: true + type: "integer" + format: "int64" + - in: "formData" + name: "name" + type: "string" + description: "New name" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponseAttributeDefinition" + "400": + description: "Invalid parameter" + schema: + $ref: "#/definitions/ApiResponse" + "403": + description: "No access" + schema: + $ref: "#/definitions/ApiResponse" + security: + - api_key: [] + /echo: + get: + tags: + - "test" + summary: "Return what was send in the body" + description: "Just returns the body content" + operationId: "echoData" + produces: + - "application/json" + responses: + "200": + description: "successful operation" + schema: + $ref: "#/definitions/ApiResponse" + "400": + description: "Invalid status value" +securityDefinitions: + api_key: + type: "apiKey" + name: "Authorization" + in: "header" +definitions: + Role: + type: "object" + properties: + id: + type: "integer" + format: "int64" + name: + type: "string" + xml: + name: "Role" + Group: + type: "object" + properties: + type: + type: "string" + id: + type: "integer" + format: "int64" + name: + type: "string" + comment: + type: "string" + xml: + name: "Group" + User: + type: "object" + properties: + type: + type: "string" + enum: + - user + - group + id: + type: "integer" + format: "int64" + name: + type: "string" + comment: + type: "string" + login: + type: "string" + email: + type: "string" + language: + type: "string" + theme: + type: "string" + role: + $ref: "#/definitions/Role" + hidden: + type: "boolean" + disabled: + type: "boolean" + isguest: + type: "boolean" + isadmin: + type: "boolean" + xml: + name: "User" + Document: + type: "object" + properties: + type: + type: "string" + enum: + - document + id: + type: "integer" + format: "int64" + name: + type: "string" + date: + type: "string" + comment: + type: "string" + keywords: + type: "string" + ownerid: + type: "integer" + format: "int64" + islocked: + type: "boolean" + sequence: + type: "number" + expires: + type: "string" + mimetype: + type: "string" + version: + type: "integer" + format: "int64" + version_comment: + type: "string" + version_date: + type: "string" + size: + type: "integer" + format: "int64" + xml: + name: "Document" + DocumentContent: + type: "object" + properties: + id: + type: "integer" + format: "int64" + version: + type: "integer" + format: "int64" + date: + type: "string" + comment: + type: "string" + mimetype: + type: "string" + filetype: + type: "string" + origfilename: + type: "string" + size: + type: "integer" + format: "int64" + xml: + name: "DocumentContent" + DocumentFile: + type: "object" + properties: + id: + type: "integer" + format: "int64" + version: + type: "integer" + format: "int64" + date: + type: "string" + comment: + type: "string" + mimetype: + type: "string" + filetype: + type: "string" + origfilename: + type: "string" + public: + type: "boolean" + size: + type: "integer" + format: "int64" + xml: + name: "DocumentFile" + DocumentLink: + type: "object" + properties: + id: + type: "integer" + format: "int64" + target: + type: "integer" + format: "int64" + public: + type: "boolean" + xml: + name: "DocumentLink" + Folder: + type: "object" + properties: + type: + type: "string" + enum: + - folder + id: + type: "integer" + format: "int64" + name: + type: "string" + date: + type: "string" + comment: + type: "string" + xml: + name: "Folder" + Category: + type: "object" + properties: + id: + type: "integer" + format: "int64" + name: + type: "string" + xml: + name: "Category" + Attribute: + type: "object" + properties: + id: + type: "integer" + format: "int64" + name: + type: "string" + value: + type: "string" + xml: + name: "Attribute" + AttributeDefinition: + type: "object" + properties: + id: + type: "integer" + format: "int64" + name: + type: "string" + type: + type: "integer" + format: "int64" + objtype: + type: "integer" + format: "int64" + min: + type: "integer" + format: "int64" + max: + type: "integer" + format: "int64" + multiple: + type: "boolean" + valueset: + type: "array" + items: + type: "string" + regex: + type: "string" + xml: + name: "AttributeDefintion" + ApiResponse: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "string" + ApiResponseUser: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + $ref: "#/definitions/User" + ApiResponseUsers: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + $ref: "#/definitions/User" + ApiResponseGroup: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + $ref: "#/definitions/Group" + ApiResponseGroups: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + $ref: "#/definitions/Group" + ApiResponseDocument: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + $ref: "#/definitions/Document" + ApiResponseDocuments: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + $ref: "#/definitions/Document" + ApiResponseDocumentContents: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + $ref: "#/definitions/DocumentContent" + ApiResponseDocumentFiles: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + $ref: "#/definitions/DocumentFile" + ApiResponseDocumentLinks: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + $ref: "#/definitions/DocumentLink" + ApiResponseFolder: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + $ref: "#/definitions/Folder" + ApiResponseFolderPath: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + type: "object" + properties: + id: + type: "integer" + name: + type: "string" + format: "int64" + ApiResponseCategory: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + $ref: "#/definitions/Category" + ApiResponseCategories: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + $ref: "#/definitions/Category" + ApiResponseAttributes: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + $ref: "#/definitions/Attribute" + ApiResponseAttributeDefinition: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + $ref: "#/definitions/AttributeDefinition" + ApiResponseAttributeDefinitions: + type: "object" + properties: + success: + type: "boolean" + message: + type: "string" + data: + type: "array" + items: + $ref: "#/definitions/AttributeDefinition" +externalDocs: + description: "Find out more about SeedDMS" + url: "https://www.seeddms.org" diff --git a/utils/indexer.php b/utils/indexer.php index c2a825dc8..172dabb0c 100644 --- a/utils/indexer.php +++ b/utils/indexer.php @@ -112,7 +112,7 @@ function tree($dms, $index, $indexconf, $folder, $indent='') { /* {{{ */ $created = 0; } $content = $document->getLatestContent(); - if($created > $content->getDate()) { + if($created >= $content->getDate()) { echo $themes->italic(" (Document unchanged)").PHP_EOL; } else { $index->delete($hit->id); diff --git a/utils/schedulercli.php b/utils/schedulercli.php index ee7838851..d609909d9 100644 --- a/utils/schedulercli.php +++ b/utils/schedulercli.php @@ -63,32 +63,33 @@ include($myincpath."/inc/inc.Language.php"); include($myincpath."/inc/inc.Extension.php"); include($myincpath."/inc/inc.DBInit.php"); include($myincpath."/inc/inc.Scheduler.php"); +include($myincpath."/inc/inc.ClassController.php"); + +if(!($user = $dms->getUserByLogin('cli_scheduler'))) { + add_log_line("Execution of tasks failed because of missing user 'cli_scheduler'. Will exit now.", PEAR_LOG_ERR); + exit; +} $scheduler = new SeedDMS_Scheduler($db); $tasks = $scheduler->getTasks(); foreach($tasks as $task) { - if(isset($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()]) && is_object($taskobj = $GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()])) { + if(isset($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()]) && is_object($taskobj = resolveTask($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()]))) { switch($mode) { case "run": case "dryrun": if(method_exists($taskobj, 'execute')) { if(!$task->getDisabled() && $task->isDue()) { - if($user = $dms->getUserByLogin('cli_scheduler')) { - if($mode == 'run') { - if($taskobj->execute($task, $dms, $user, $settings)) { - add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." successful."); - $task->updateLastNextRun(); - } else { - add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." failed, task has been disabled.", PEAR_LOG_ERR); - $task->setDisabled(1); - } - } elseif($mode == 'dryrun') { - echo "Running ".$task->getExtension()."::".$task->getTask()."\n"; + if($mode == 'run') { + if($taskobj->execute($task)) { + add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." successful."); + $task->updateLastNextRun(); + } else { + add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." failed, task has been disabled.", PEAR_LOG_ERR); + $task->setDisabled(1); } - } else { - add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." failed because of missing user 'cli_scheduler'. Task has been disabled.", PEAR_LOG_ERR); - $task->setDisabled(1); + } elseif($mode == 'dryrun') { + echo "Running ".$task->getExtension()."::".$task->getTask()."\n"; } } } @@ -117,7 +118,8 @@ foreach($tasks as $task) { echo "\n"; if($params = $task->getParameter()) { foreach($params as $key=>$value) { - echo " ".$key.": ".$value."\n"; + $p = $taskobj->getAdditionalParamByName($key); + echo " ".$key.": ".($p['type'] == 'password' ? '********' : $value)."\n"; } } break; diff --git a/views/bootstrap/class.AddDocument.php b/views/bootstrap/class.AddDocument.php index cae6d1c3b..0f053247c 100644 --- a/views/bootstrap/class.AddDocument.php +++ b/views/bootstrap/class.AddDocument.php @@ -341,6 +341,8 @@ $(document).ready(function() { foreach($arrs as $arr) { $this->formField($arr[0], $arr[1]); } + } elseif(is_string($arrs)) { + echo $arrs; } $this->contentSubHeading(getMLText("version_info")); @@ -411,6 +413,8 @@ $(document).ready(function() { foreach($arrs as $arr) { $this->formField($arr[0], $arr[1]); } + } elseif(is_string($arrs)) { + echo $arrs; } if($workflowmode == 'advanced') { diff --git a/views/bootstrap/class.AddSubFolder.php b/views/bootstrap/class.AddSubFolder.php index 52048d3cd..158644a91 100644 --- a/views/bootstrap/class.AddSubFolder.php +++ b/views/bootstrap/class.AddSubFolder.php @@ -119,6 +119,15 @@ $(document).ready( function() { } } } + $arrs = $this->callHook('addFolderAttributes', $folder); + if(is_array($arrs)) { + foreach($arrs as $arr) { + $this->formField($arr[0], $arr[1]); + } + } elseif(is_string($arrs)) { + echo $arrs; + } + $this->formSubmit(" ".getMLText('add_subfolder')); ?> diff --git a/views/bootstrap/class.ApprovalSummary.php b/views/bootstrap/class.ApprovalSummary.php index 436632d32..c297aa3ea 100644 --- a/views/bootstrap/class.ApprovalSummary.php +++ b/views/bootstrap/class.ApprovalSummary.php @@ -49,7 +49,7 @@ class SeedDMS_View_ApprovalSummary extends SeedDMS_Bootstrap_Style { $user = $this->params['user']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; diff --git a/views/bootstrap/class.Categories.php b/views/bootstrap/class.Categories.php index d6553ba45..d9bb247a9 100644 --- a/views/bootstrap/class.Categories.php +++ b/views/bootstrap/class.Categories.php @@ -44,6 +44,7 @@ class SeedDMS_View_Categories extends SeedDMS_Bootstrap_Style { $(document).ready( function() { $( "#selector" ).change(function() { $('div.ajax').trigger('update', {categoryid: $(this).val()}); + window.history.pushState({"html":"","pageTitle":""},"", '../out/out.Categories.php?categoryid=' + $(this).val()); }); }); params['folder']; $form = $this->params['form']; + $orderby = $this->params['orderby']; $partialtree = $this->params['partialtree']; header('Content-Type: application/javascript'); - $this->printNewTreeNavigationJs($folder->getID(), M_READ, 1, $form, 0, 'n', $partialtree); + $this->printNewTreeNavigationJs($folder->getID(), M_READ, 1, $form, 0, $orderby, $partialtree); } /* }}} */ function show() { /* {{{ */ @@ -54,11 +55,12 @@ class SeedDMS_View_DocumentChooser extends SeedDMS_Bootstrap_Style { $folder = $this->params['folder']; $form = $this->params['form']; $partialtree = $this->params['partialtree']; + $orderby = $this->params['orderby']; // $this->htmlStartPage(getMLText("choose_target_document")); // $this->contentContainerStart(); // $this->printNewTreeNavigationHtml($folder->getID(), M_READ, 1, $form); - $this->printNewTreeNavigationHtml($folder->getID(), M_READ, 1, $form, 0, '', $partialtree); + $this->printNewTreeNavigationHtml($folder->getID(), M_READ, 1, $form, 0, $orderby); echo ''."\n"; // $this->contentContainerEnd(); // $this->htmlEndPage(true); diff --git a/views/bootstrap/class.DocumentVersionDetail.php b/views/bootstrap/class.DocumentVersionDetail.php index 77d809219..bba75e6a1 100644 --- a/views/bootstrap/class.DocumentVersionDetail.php +++ b/views/bootstrap/class.DocumentVersionDetail.php @@ -96,7 +96,7 @@ class SeedDMS_View_DocumentVersionDetail extends SeedDMS_Bootstrap_Style { $enableversionmodification = $this->params['enableversionmodification']; $cachedir = $this->params['cachedir']; $previewwidthdetail = $this->params['previewWidthDetail']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; diff --git a/views/bootstrap/class.EditAttributes.php b/views/bootstrap/class.EditAttributes.php index 58451225a..9930e1d67 100644 --- a/views/bootstrap/class.EditAttributes.php +++ b/views/bootstrap/class.EditAttributes.php @@ -114,8 +114,8 @@ class SeedDMS_View_EditAttributes extends SeedDMS_Bootstrap_Style { foreach($arrs as $arr) { $this->formField($arr[0], $arr[1]); } - } elseif(is_string($arr)) { - echo $arr; + } elseif(is_string($arrs)) { + echo $arrs; } $this->formSubmit(" ".getMLText('save')); ?> diff --git a/views/bootstrap/class.EditDocument.php b/views/bootstrap/class.EditDocument.php index 8ba496559..fa60d710e 100644 --- a/views/bootstrap/class.EditDocument.php +++ b/views/bootstrap/class.EditDocument.php @@ -285,8 +285,8 @@ $(document).ready( function() { foreach($arrs as $arr) { $this->formField($arr[0], $arr[1]); } - } elseif(is_string($arr)) { - echo $arr; + } elseif(is_string($arrs)) { + echo $arrs; } $this->formSubmit(" ".getMLText('save')); ?> diff --git a/views/bootstrap/class.EditFolder.php b/views/bootstrap/class.EditFolder.php index 2c2683073..2c7c874f0 100644 --- a/views/bootstrap/class.EditFolder.php +++ b/views/bootstrap/class.EditFolder.php @@ -189,7 +189,7 @@ $(document).ready(function() { $this->formField($arr[0], $arr[1]); } } elseif(is_string($arrs)) { - echo $arr; + echo $arrs; } $this->formSubmit(" ".getMLText('save')); ?> diff --git a/views/bootstrap/class.FolderChooser.php b/views/bootstrap/class.FolderChooser.php index ded83b32c..213a54162 100644 --- a/views/bootstrap/class.FolderChooser.php +++ b/views/bootstrap/class.FolderChooser.php @@ -43,9 +43,10 @@ class SeedDMS_View_FolderChooser extends SeedDMS_Bootstrap_Style { $rootfolderid = $this->params['rootfolderid']; $form = $this->params['form']; $mode = $this->params['mode']; + $orderby = $this->params['orderby']; header('Content-Type: application/javascript'); - $this->printNewTreeNavigationJs($rootfolderid, $mode, 0, $form); + $this->printNewTreeNavigationJs($rootfolderid, $mode, 0, $form, '', $orderby); } /* }}} */ function show() { /* {{{ */ diff --git a/views/bootstrap/class.ImportUsers.php b/views/bootstrap/class.ImportUsers.php index 4496ccd5d..aa61596b5 100644 --- a/views/bootstrap/class.ImportUsers.php +++ b/views/bootstrap/class.ImportUsers.php @@ -40,6 +40,7 @@ class SeedDMS_View_ImportUsers extends SeedDMS_Bootstrap_Style { function show() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; + $log = $this->params['log']; $this->htmlStartPage(getMLText("import_users")); $this->globalNavigation(); @@ -48,6 +49,8 @@ class SeedDMS_View_ImportUsers extends SeedDMS_Bootstrap_Style { $this->contentHeading(getMLText("import_users")); + echo "
\n"; + echo "
\n"; $this->contentContainerStart(); print "
"; $this->formField( @@ -63,10 +66,33 @@ class SeedDMS_View_ImportUsers extends SeedDMS_Bootstrap_Style { 'value'=>'1' ) ); + $this->formField( + getMLText("import_users_addnew"), + array( + 'element'=>'input', + 'type'=>'checkbox', + 'name'=>'addnew', + 'value'=>'1' + ) + ); $this->formSubmit(" ".getMLText('import')); print "
\n"; $this->contentContainerEnd(); + echo "
\n"; + echo "
\n"; + if($log) { + echo "\n"; + echo "\n"; + echo "\n"; + foreach($log as $item) { + $class = $item['type'] == 'success' ? 'success' : 'error'; + echo "\n"; + } + echo "
".getMLText('id')."".getMLText('message')."
".$item['id']."".$item['msg']."
"; + } + echo "
\n"; + echo "
\n"; $this->contentEnd(); $this->htmlEndPage(); } /* }}} */ diff --git a/views/bootstrap/class.Info.php b/views/bootstrap/class.Info.php index 66b9659ba..a733fef90 100644 --- a/views/bootstrap/class.Info.php +++ b/views/bootstrap/class.Info.php @@ -114,12 +114,6 @@ class SeedDMS_View_Info extends SeedDMS_Bootstrap_Style { contentContainerStart(); - echo $version->banner(); - $this->contentContainerEnd(); -// $this->contentContainerStart(); -// phpinfo(); -// $this->contentContainerEnd(); $this->contentEnd(); $this->htmlEndPage(); } /* }}} */ diff --git a/views/bootstrap/class.ManageNotify.php b/views/bootstrap/class.ManageNotify.php index 5ffa237ae..a38901f71 100644 --- a/views/bootstrap/class.ManageNotify.php +++ b/views/bootstrap/class.ManageNotify.php @@ -145,7 +145,7 @@ class SeedDMS_View_ManageNotify extends SeedDMS_Bootstrap_Style { $this->user = $this->params['user']; $this->cachedir = $this->params['cachedir']; $this->previewwidth = $this->params['previewWidthList']; - $this->previewconverters = $this->params['previewconverters']; + $this->previewconverters = $this->params['previewConverters']; $this->db = $this->dms->getDB(); $this->timeout = $this->params['timeout']; $this->xsendfile = $this->params['xsendfile']; diff --git a/views/bootstrap/class.MyDocuments.php b/views/bootstrap/class.MyDocuments.php index 1bd5a13b9..64e610b31 100644 --- a/views/bootstrap/class.MyDocuments.php +++ b/views/bootstrap/class.MyDocuments.php @@ -113,7 +113,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -145,7 +145,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -175,7 +175,7 @@ $(document).ready( function() { $workflowmode = $this->params['workflowmode']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -225,7 +225,7 @@ $(document).ready( function() { $cachedir = $this->params['cachedir']; $showtree = $this->params['showtree']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -256,7 +256,7 @@ $(document).ready( function() { $cachedir = $this->params['cachedir']; $showtree = $this->params['showtree']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -287,7 +287,7 @@ $(document).ready( function() { $cachedir = $this->params['cachedir']; $showtree = $this->params['showtree']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -317,7 +317,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -419,7 +419,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -452,7 +452,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -483,7 +483,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -516,7 +516,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -547,7 +547,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -578,7 +578,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -609,7 +609,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -640,7 +640,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -671,7 +671,7 @@ $(document).ready( function() { $orderdir = $this->params['orderdir']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; @@ -703,7 +703,7 @@ $(document).ready( function() { $cachedir = $this->params['cachedir']; $workflowmode = $this->params['workflowmode']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; diff --git a/views/bootstrap/class.ObjectCheck.php b/views/bootstrap/class.ObjectCheck.php index ce86b23c5..0ab02b195 100644 --- a/views/bootstrap/class.ObjectCheck.php +++ b/views/bootstrap/class.ObjectCheck.php @@ -382,7 +382,7 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style { $docsinrevision = $this->params['docsinrevision']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidth, $timeout); @@ -402,7 +402,7 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style { $docsinreception = $this->params['docsinreception']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidth, $timeout); @@ -422,7 +422,7 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style { $processwithoutusergroup = $this->params['processwithoutusergroup']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $repair = $this->params['repair']; diff --git a/views/bootstrap/class.ReceiptSummary.php b/views/bootstrap/class.ReceiptSummary.php index 5d8fc68ab..4876c9342 100644 --- a/views/bootstrap/class.ReceiptSummary.php +++ b/views/bootstrap/class.ReceiptSummary.php @@ -49,7 +49,7 @@ class SeedDMS_View_ReceiptSummary extends SeedDMS_Bootstrap_Style { $user = $this->params['user']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidth, $timeout); diff --git a/views/bootstrap/class.ReviewSummary.php b/views/bootstrap/class.ReviewSummary.php index 6c87569cc..fa003d596 100644 --- a/views/bootstrap/class.ReviewSummary.php +++ b/views/bootstrap/class.ReviewSummary.php @@ -49,7 +49,7 @@ class SeedDMS_View_ReviewSummary extends SeedDMS_Bootstrap_Style { $user = $this->params['user']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; diff --git a/views/bootstrap/class.RevisionSummary.php b/views/bootstrap/class.RevisionSummary.php index 30557151f..adfc54b55 100644 --- a/views/bootstrap/class.RevisionSummary.php +++ b/views/bootstrap/class.RevisionSummary.php @@ -49,7 +49,7 @@ class SeedDMS_View_RevisionSummary extends SeedDMS_Bootstrap_Style { $user = $this->params['user']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; diff --git a/views/bootstrap/class.SchedulerTaskMgr.php b/views/bootstrap/class.SchedulerTaskMgr.php index 1c5cec700..8e7c51802 100644 --- a/views/bootstrap/class.SchedulerTaskMgr.php +++ b/views/bootstrap/class.SchedulerTaskMgr.php @@ -99,8 +99,7 @@ $(document).ready( function() { $user = $this->params['user']; $extname = $this->params['extname']; $taskname = $this->params['taskname']; - if($extname && $taskname) { - $taskobj = $GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$extname][$taskname]; + if($extname && $taskname && is_object($taskobj = resolveTask($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$extname][$taskname]))) { if(method_exists($taskobj, 'getAdditionalParams')) $additionalparams = $taskobj->getAdditionalParams(); else @@ -135,6 +134,13 @@ $(document).ready( function() { +
+
+ +
+
formField( + getMLText('task_'.$extname."_".$taskname."_".$param['name']), + array( + 'element'=>'input', + 'type'=>'password', + 'id'=>'params_'.$param['name'], + 'name'=>'params['.$param['name'].']', + 'required'=>false + ) + ); + break; + case 'select': + $this->formField( + getMLText('task_'.$extname."_".$taskname."_".$param['name']), + array( + 'element'=>'select', + 'class'=>'chzn-select', + 'name'=>'params['.$param['name'].']', + 'multiple'=>false, + 'attributes'=>array(array('data-placeholder', getMLText('select_value'), array('data-no_results_text', getMLText('unknown_value')))), + 'options'=>$param['options'], + ) + ); + break; default: -?> -
- -
- -
-
-formField( + getMLText('task_'.$extname."_".$taskname."_".$param['name']), + array( + 'element'=>'input', + 'type'=>'text', + 'id'=>'params_'.$param['name'], + 'name'=>'params['.$param['name'].']', + 'required'=>false + ) + ); + break; } } } @@ -169,7 +202,7 @@ $(document).ready( function() {
- +
@@ -190,6 +223,11 @@ $(document).ready( function() { } $taskobj = $GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()]; + $taskobj = resolveTask($taskobj); + if(!is_object($taskobj)) { + $this->errorMsg(getMLText('task_class_not_callable')); + return; + } ?>
@@ -245,16 +283,32 @@ $(document).ready( function() { ) ); break; + case 'password': + $this->formField( + getMLText("task_".$task->getExtension()."_".$task->getTask()."_".$param['name']), + array( + 'element'=>'input', + 'type'=>'password', + 'id'=>'params_'.$param['name'], + 'name'=>'params['.$param['name'].']', + 'value'=>$task->getParameter()[$param['name']], + 'required'=>false + ) + ); + break; default: -?> -
- -
- -
-
-formField( + getMLText("task_".$task->getExtension()."_".$task->getTask()."_".$param['name']), + array( + 'element'=>'input', + 'type'=>'text', + 'id'=>'params_'.$param['name'], + 'name'=>'params['.$param['name'].']', + 'value'=>$task->getParameter()[$param['name']], + 'required'=>false + ) + ); + break; } } } @@ -262,7 +316,7 @@ $(document).ready( function() {
- +
@@ -282,7 +336,7 @@ $(document).ready( function() { $tasks = $scheduler->getTasks(); if(!$tasks) return; - + $this->contentHeading(getMLText("scheduler_class_tasks")); echo "\n"; print "\n\n"; @@ -293,8 +347,8 @@ $(document).ready( function() { print "\n"; print "\n"; print "\n"; - foreach($tasks as $task) { - if(!isset($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()])) + foreach($tasks as $task) { + if(!isset($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()]) || !is_object(resolveTask($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()]))) $class = 'error'; else $class = 'success'; @@ -357,6 +411,9 @@ $(document).ready( function() { $errmsgs = array(); foreach($GLOBALS['SEEDDMS_SCHEDULER']['tasks'] as $extname=>$tasks) { foreach($tasks as $taskname=>$task) { + $task = resolveTask($task); + if(!is_object($task)) + continue; echo ""; echo "
".getMLText('task_last_run')."
"; echo $extname."::".$taskname; diff --git a/views/bootstrap/class.Search.php b/views/bootstrap/class.Search.php index 5f1c1c47a..447331641 100644 --- a/views/bootstrap/class.Search.php +++ b/views/bootstrap/class.Search.php @@ -152,7 +152,7 @@ $(document).ready( function() { $searchin = $this->params['searchin']; $cachedir = $this->params['cachedir']; $previewwidth = $this->params['previewWidthList']; - $previewconverters = $this->params['previewconverters']; + $previewconverters = $this->params['previewConverters']; $timeout = $this->params['timeout']; $xsendfile = $this->params['xsendfile']; $reception = $this->params['reception']; diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index f77816af3..31a3693b4 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -432,6 +432,9 @@ $this->showStartPaneContent('site', (!$currenttab || $currenttab == 'site')); showConfigHeadline('settings_Authentication'); ?> showConfigText('settings_guestID', 'guestID'); ?> showConfigText('settings_adminIP', 'adminIP'); ?> +showConfigText('settings_apiKey', 'apiKey'); ?> +showConfigText('settings_apiUserId', 'apiUserId'); ?> +showConfigText('settings_apiOrigin', 'apiOrigin'); ?>