diff --git a/CHANGELOG b/CHANGELOG
index 503ed5fa1..bb1be36a5 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,8 +1,28 @@
+--------------------------------------------------------------------------------
+ Changes in version 6.0.33
+--------------------------------------------------------------------------------
+- merge changes up to 5.1.40
+
+--------------------------------------------------------------------------------
+ Changes in version 6.0.32
+--------------------------------------------------------------------------------
+- merge changes up to 5.1.39
+- fix setting attributes (user, group, document, folder) when checking in
+ a new document version
+- validate setting revision date
+
+--------------------------------------------------------------------------------
+ Changes in version 6.0.31
+--------------------------------------------------------------------------------
+- merge changes up to 5.1.38
+- fix various restapi endpoints which hadn't been updated to slim4
+
--------------------------------------------------------------------------------
Changes in version 6.0.30
--------------------------------------------------------------------------------
- merge changes up to 5.1.37
- receipt comment can be disabled
+- send request receipt notification only when document is released
--------------------------------------------------------------------------------
Changes in version 6.0.29
@@ -301,9 +321,52 @@
- add document list which can be exported as an archive
- search results can be exported
+--------------------------------------------------------------------------------
+ Changes in version 5.1.40
+--------------------------------------------------------------------------------
+- fix saving user data when language selection is turned of (Closes: #568)
+- add much better support for new storage drivers
+- fix possible xss attacks
+- saver way to collect plugin configuration
+- fix update of postgres database
+- add hook displayPreviewThumb
+- add searching for mimetype in database
+- list of expired documents can be filtered by user
+- use quoted printable encoding instead of base64 for email subjects
+
+--------------------------------------------------------------------------------
+ Changes in version 5.1.39
+--------------------------------------------------------------------------------
+- show quota on chart page when listing total document size per user
+- turn off legend for chart sizepermonth
+- do not add group manager as mandatory approver/reviewer if logged in
+ user is the manager itself
+- fixed setting group approvers from previous document version
+- very experimental support of memcached for accelerating some database
+ operations (do not use in production)
+- prevent malicious manipulation of referer when setting language
+- fix setting attributes of type user, group, document, folder when updating
+ a document
+- objects can be removed from clipboard
+- call hooks for document/folder list in attribute manager
+
+--------------------------------------------------------------------------------
+ Changes in version 5.1.38
+--------------------------------------------------------------------------------
+- require php 8.2
+- fix php error in out/out.ReviewSummary.php
+
--------------------------------------------------------------------------------
Changes in version 5.1.37
--------------------------------------------------------------------------------
+- do not show chart by category if there are no categories
+- documents in certain folders can be excluded from dashboard, could be useful
+ for folders containing archived documents
+- migrate from Slim 3 to Slim 4 (check for extension updates)
+- fix reloading more entries in list of folders/documents at end of page if
+ maxItemsPerPage is set
+- prevent xss attack
+- log level for rest api can be set separately
--------------------------------------------------------------------------------
Changes in version 5.1.36
diff --git a/build.xml b/build.xml
index af197c585..3c48c9c24 100644
--- a/build.xml
+++ b/build.xml
@@ -16,7 +16,7 @@
-
+
@@ -73,8 +73,13 @@
-
-
+
+
+
+
+
+
+
diff --git a/composer-dist.json b/composer-dist.json
index 648002029..d93dcba68 100644
--- a/composer-dist.json
+++ b/composer-dist.json
@@ -1,28 +1,32 @@
{
"config": {
"platform": {
- "php": "7.4"
+ "php": "8.2"
}
},
"require": {
"robthree/twofactorauth": "^1.5",
- "sabre/dav": "^4.",
- "sabre/xml": "*",
- "slim/slim": "^3.0",
+ "slim/slim": "^4.0",
+ "guzzlehttp/psr7": "*",
"erusev/parsedown": "*",
"erusev/parsedown-extra": "*",
"mibe/feedwriter": "^1.1",
"phpoffice/phpspreadsheet": "*",
+ "sabre/xml": "*",
+ "sabre/dav": "^4.",
"pear/log": "*",
"pear/mail": "*",
"pear/mail_mime": "*",
"pear/net_smtp": "*",
"pear/auth_sasl": "*",
"pear/db": "*",
+ "dragonmantank/cron-expression": "^3.1",
"alecrabbit/php-console-colour": "*",
"dragonmantank/cron-expression": "^3",
"zf1/zend-search-lucene": "*",
"symfony/http-foundation": "^5.4",
+ "php-di/php-di": "^6.4",
+ "slim/psr7": "^1.7",
"seeddms/core": "dev-master",
"seeddms/lucene": "dev-master",
"seeddms/preview": "dev-master",
@@ -69,5 +73,4 @@
}
}
]
-
}
diff --git a/controllers/class.Login.php b/controllers/class.Login.php
index 5b4899d44..5fecff96b 100644
--- a/controllers/class.Login.php
+++ b/controllers/class.Login.php
@@ -232,7 +232,8 @@ class SeedDMS_Controller_Login extends SeedDMS_Controller_Common {
}
}
- $user = $authenticator->authenticate($login, $pwd);
+ if(!is_object($user))
+ $user = $authenticator->authenticate($login, $pwd);
if(0) {
/* Authenticate against LDAP server {{{ */
diff --git a/controllers/class.UpdateDocument.php b/controllers/class.UpdateDocument.php
index dfceb755d..42f68cb67 100644
--- a/controllers/class.UpdateDocument.php
+++ b/controllers/class.UpdateDocument.php
@@ -59,7 +59,7 @@ class SeedDMS_Controller_UpdateDocument extends SeedDMS_Controller_Common {
$content = $this->callHook('updateDocument');
if($content === null) {
$filesize = SeedDMS_Core_File::fileSize($userfiletmp);
- if($contentResult=$document->addContent($comment, $user, $userfiletmp, utf8_basename($userfilename), $filetype, $userfiletype, $reviewers, $approvers, $version=0, $attributes, $workflow, $initialdocumentstatus)) {
+ if($contentResult=$document->addContent($comment, $user, $userfiletmp, utf8_basename($userfilename), $filetype, $userfiletype, $reviewers, $approvers, 0, $attributes, $workflow, $initialdocumentstatus)) {
if ($this->hasParam('expires')) {
if($document->setExpires($this->getParam('expires'))) {
diff --git a/doc/README.Converters b/doc/README.Converters
index dfa22f0c4..32a73f72f 100644
--- a/doc/README.Converters
+++ b/doc/README.Converters
@@ -18,6 +18,14 @@ Please note, that when ever a command outputs anything to stderr,
this will considered as a failure of the command. Most command line
programs have a parameter (.e.g. `-q`) to suppress such an output.
+If you run php-fpm you may encounter problems with charsets based on
+UTF-8. Programms like `catdoc` read LANG from the environment to
+set the correct encoding of the output. php-fpm often clears the
+environment and programms like `catdoc` will not longer output any
+UTF-8 chars. In such a case you may want to set `clear_env=no` in
+php-fpm's configuration. On Debian this is done in the file
+`/etc/php//fpm/pool.d/www.conf`. Search for `clear_env`.
+
Conversion to text for fulltext search
=======================================
@@ -41,6 +49,9 @@ application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/msword
catdoc %s
+application/vnd.oasis.opendocument.text
+ odt2txt %s
+
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx2csv -d tab %s
diff --git a/doc/README.Install.md b/doc/README.Install.md
index 7ffbe77ce..dcd0cb09e 100644
--- a/doc/README.Install.md
+++ b/doc/README.Install.md
@@ -8,13 +8,13 @@ SeedDMS is a web-based application written in PHP. It uses MySQL,
SQLite3 or PostgreSQL to manage the documents that were uploaded into
the application. Be aware that PostgreSQL is not very well tested.
-Make sure you have PHP >= 7.4 and MySQL 5 or higher installed. SeedDMS
+Make sure you have PHP >= 8.2 and MySQL 5 or higher installed. SeedDMS
will work with PHP running in CGI-mode as well as running as a module under
apache.
Here is a detailed list of requirements:
-1. A web server with at least php 7.4
+1. A web server with at least php 8.2
2. A mysql database, unless you use SQLite
3. The php installation must have support for `pdo_mysql`, `pdo_pgsql` or `pdo_sqlite`,
`php_gd2`, `php_mbstring`, `php_xml`
diff --git a/doc/README.Restapi.md b/doc/README.Restapi.md
new file mode 100644
index 000000000..d34aa07b2
--- /dev/null
+++ b/doc/README.Restapi.md
@@ -0,0 +1,55 @@
+# How to access the Rest API
+
+Below are various examples on how to access the Rest API. Some of them
+start by calling the `login` endpoint which creates a cookie based
+session which is stored in a local file named `cookies.txt`.
+The authentication is done with the user `admin`. You may use any other
+user as well.
+
+You may as well pass `-H Authorization: ` instead of `-b cookies.txt`
+to `curl` after setting the api key in the configuration of your SeedDMS.
+Of course, in that case you will not need the initial call of the `login`
+endpoint.
+
+The examples often use the `jq` programm for formating the returned
+json data.
+
+## Initial test
+
+The `echo` endpoint does not require any authentication.
+
+```
+#!/bin/sh
+BASEURL="https://your-domain/"
+
+curl --silent -X GET ${BASEURL}restapi/index.php/echo/test | jq '.'
+
+```
+
+## Getting list of users
+
+```
+#!/bin/sh
+BASEURL="https://your-domain/"
+
+curl --silent -F "user=admin" -F "pass=admin" -b cookies.txt -c cookies.txt ${BASEURL}restapi/index.php/login | jq
+
+curl --silent -b cookies.txt -X GET "${BASEURL}restapi/index.php/users" | jq '.'
+```
+
+## Getting meta data of a folder
+
+```
+#!/bin/sh
+BASEURL="https://your-domain/"
+
+curl --silent -H "Authorization: " -X GET "${BASEURL}restapi/index.php/folder/1" | jq '.'
+```
+## Notes
+
+Make sure to encode the data properly when using restapi functions which uses
+put. If you use curl with PHP, then encode the data as the following
+
+ curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
+
diff --git a/inc/inc.ClassAccessOperation.php b/inc/inc.ClassAccessOperation.php
index 4061f7533..06bd4e3a1 100644
--- a/inc/inc.ClassAccessOperation.php
+++ b/inc/inc.ClassAccessOperation.php
@@ -81,6 +81,7 @@ class SeedDMS_AccessOperation {
'CategoryChooser',
'ChangePassword',
'CheckInDocument',
+ 'CheckOutDocument',
'Clipboard',
'Dashboard',
'DocumentAccess',
diff --git a/inc/inc.ClassAuthenticationMiddleware.php b/inc/inc.ClassAuthenticationMiddleware.php
index fa8d0fdc7..97e74c55f 100644
--- a/inc/inc.ClassAuthenticationMiddleware.php
+++ b/inc/inc.ClassAuthenticationMiddleware.php
@@ -48,18 +48,18 @@ class SeedDMS_Auth_Middleware_Session { /* {{{ */
*
* @return \Psr\Http\Message\ResponseInterface
*/
- public function __invoke($request, $response, $next) {
+ public function __invoke($request, $handler) {
// $this->container has the DI
- $dms = $this->container->dms;
- $settings = $this->container->config;
- $logger = $this->container->logger;
+ $dms = $this->container->get('dms');
+ $settings = $this->container->get('config');
+ $logger = $this->container->get('logger');
$userobj = null;
if ($this->container->has('userobj')) {
- $userobj = $this->container->userobj;
+ $userobj = $this->container->get('userobj');
}
if ($userobj) {
- $response = $next($request, $response);
+ $response = $handler->handle($request);
return $response;
}
@@ -100,9 +100,9 @@ class SeedDMS_Auth_Middleware_Session { /* {{{ */
} else {
return $response->withStatus(403);
}
- $this->container['userobj'] = $userobj;
+ $this->container->set('userobj', $userobj);
- $response = $next($request, $response);
+ $response = $handler->handle($request);
return $response;
}
} /* }}} */
diff --git a/inc/inc.ClassCalendar.php b/inc/inc.ClassCalendar.php
index 63face820..f81bc0ba3 100644
--- a/inc/inc.ClassCalendar.php
+++ b/inc/inc.ClassCalendar.php
@@ -33,6 +33,11 @@ class SeedDMS_Calendar {
*/
protected $db;
+ /**
+ * Instanz of user
+ */
+ protected $user;
+
public function __construct($db, $user) { /* {{{ */
$this->db = $db;
$this->user = $user;
diff --git a/inc/inc.ClassControllerCommon.php b/inc/inc.ClassControllerCommon.php
index 2421ff061..f53946b02 100644
--- a/inc/inc.ClassControllerCommon.php
+++ b/inc/inc.ClassControllerCommon.php
@@ -75,7 +75,7 @@ class SeedDMS_Controller_Common {
if(method_exists($this, $action)) {
$refl = new ReflectionMethod($this, $action);
if($refl->isPublic())
- return $this->{$action}();
+ $ret = $this->{$action}();
else {
echo "Action '".$action."' not public";
return false;
@@ -85,11 +85,12 @@ class SeedDMS_Controller_Common {
return false;
}
} else
- return $this->run();
+ $ret = $this->run();
} else {
return false;
}
$this->callHook('postRun', get_class($this), $action ? $action : 'run');
+ return $ret;
}
public function setParams($params) {
diff --git a/inc/inc.ClassConversionServiceHtmlToText.php b/inc/inc.ClassConversionServiceHtmlToText.php
index c9342e564..6130777d5 100644
--- a/inc/inc.ClassConversionServiceHtmlToText.php
+++ b/inc/inc.ClassConversionServiceHtmlToText.php
@@ -35,7 +35,9 @@ class SeedDMS_ConversionServiceHtmlToText extends SeedDMS_ConversionServiceBase
public function convert($infile, $target = null, $params = array()) {
$d = new DOMDocument;
+ libxml_use_internal_errors(true);
$d->loadHTMLFile($infile);
+ libxml_clear_errors();
$body = $d->getElementsByTagName('body')->item(0);
$str = '';
foreach($body->childNodes as $childNode) {
diff --git a/inc/inc.ClassConversionServiceImageToImage.php b/inc/inc.ClassConversionServiceImageToImage.php
index ca2120c15..7f691e9b0 100644
--- a/inc/inc.ClassConversionServiceImageToImage.php
+++ b/inc/inc.ClassConversionServiceImageToImage.php
@@ -94,6 +94,12 @@ class SeedDMS_ConversionServiceImageToImage extends SeedDMS_ConversionServiceBas
case 'image/gif':
$im = @imagecreatefromgif($infile);
break;
+ case 'image/webp':
+ $im = @imagecreatefromwebp($infile);
+ break;
+ case 'image/avif':
+ $im = @imagecreatefromavif($infile);
+ break;
}
if($im) {
$width = imagesx($im);
diff --git a/inc/inc.ClassDownloadMgr.php b/inc/inc.ClassDownloadMgr.php
index 78d07d8cb..4e4f6dad0 100644
--- a/inc/inc.ClassDownloadMgr.php
+++ b/inc/inc.ClassDownloadMgr.php
@@ -39,12 +39,48 @@ class SeedDMS_Download_Mgr {
*/
protected $items;
+ /**
+ * @var array $folder_items list of folder content items
+ * @access protected
+ */
+ protected $folder_items;
+
/**
* @var array $extracols list of arrays with extra columns per item
* @access protected
*/
protected $extracols;
+ /**
+ * @var array $folder_extracols list of arrays with extra columns per folder item
+ * @access protected
+ */
+ protected $folder_extracols;
+
+ /**
+ * @var array $header list of entries in header (first line)
+ * @access protected
+ */
+ protected $header;
+
+ /**
+ * @var array $folder_header list of entries in header (first line)
+ * @access protected
+ */
+ protected $folder_header;
+
+ /**
+ * @var array $extraheader list of extra entries in header
+ * @access protected
+ */
+ protected $extraheader;
+
+ /**
+ * @var array $folder_extraheader list of extra entries in header
+ * @access protected
+ */
+ protected $folder_extraheader;
+
/**
* @var array $rawcontents list of content used instead of document content
* @access protected
@@ -55,21 +91,50 @@ class SeedDMS_Download_Mgr {
* @var array $filenames filename used in archive
* @access protected
*/
- protected $filnames;
+ protected $filenames;
+
+ /**
+ * @var boolean $skipdefaultcols skip default columns, will only export extracols
+ * @access protected
+ */
+ protected $skipdefaultcols;
function __construct($tmpdir = '') {
$this->tmpdir = $tmpdir;
$this->items = array();
- $this->header = array(getMLText('download_header_document_no'), getMLText('download_header_document_name'), getMLText('download_header_filename'), getMLText('download_header_state'), getMLText('download_header_internal_version'), getMLText('download_header_reviewer'), getMLText('download_header_review_date'), getMLText('download_header_review_comment'), getMLText('download_header_review_state'), getMLText('download_header_approver'), getMLText('download_header_approval_date'), getMLText('download_header_approval_comment'), getMLText('download_header_approval_state'));
+ $this->folder_items = array();
+ $this->header = array(getMLText('download_header_document_no'), getMLText('download_header_document_name'), getMLText('download_header_filename'), getMLText('download_header_state'), getMLText('download_header_internal_version'));
+ $this->header[] = getMLText('download_header_reviewer');
+ $this->header[] = getMLText('download_header_review_date');
+ $this->header[] = getMLText('download_header_review_comment');
+ $this->header[] = getMLText('download_header_review_state');
+ $this->header[] = getMLText('download_header_approver');
+ $this->header[] = getMLText('download_header_approval_date');
+ $this->header[] = getMLText('download_header_approval_comment');
+ $this->header[] = getMLText('download_header_approval_state');
+ $this->folder_header = array(getMLText('download_header_folder_no'), getMLText('download_header_folder_name'));
$this->extracols = array();
+ $this->folder_extracols = array();
$this->rawcontents = array();
$this->extraheader = array();
+ $this->folder_extraheader = array();
+ $this->filenames = array();
+ $this->includereviewers = false;
+ $this->includeapprovers = false;
}
+ public function skipDefaultCols($v) { /* {{{ */
+ $this->skipdefaultcols = (bool) $v;
+ } /* }}} */
+
public function addHeader($extraheader) { /* {{{ */
$this->extraheader = $extraheader;
} /* }}} */
+ public function addFolderHeader($extraheader) { /* {{{ */
+ $this->folder_extraheader = $extraheader;
+ } /* }}} */
+
public function addItem($item, $extracols=array(), $rawcontent='', $filename='') { /* {{{ */
$this->items[$item->getID()] = $item;
$this->extracols[$item->getID()] = $extracols;
@@ -77,34 +142,44 @@ class SeedDMS_Download_Mgr {
$this->filenames[$item->getID()] = $filename;
} /* }}} */
+ public function addFolderItem($item, $extracols=array()) { /* {{{ */
+ $this->folder_items[$item->getID()] = $item;
+ $this->folder_extracols[$item->getID()] = $extracols;
+ } /* }}} */
+
public function createToc($file) { /* {{{ */
- $items = $this->items;
$objPHPExcel = new PhpOffice\PhpSpreadsheet\Spreadsheet();
+ $objPHPExcel->setValueBinder(new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder());
$objPHPExcel->getProperties()->setCreator("SeedDMS")->setTitle("Metadata");
+ if($items = $this->items) {
$sheet = $objPHPExcel->setActiveSheetIndex(0);
+ $sheet->setTitle(getMLText('documents'));
$i = 1;
- $col = 0;
- foreach($this->header as $h)
- $sheet->setCellValueByColumnAndRow($col++, $i, $h);
+ $col = 1;
+ if(!$this->skipdefaultcols)
+ foreach($this->header as $h)
+ $sheet->setCellValue([$col++, $i], $h);
foreach($this->extraheader as $h)
- $sheet->setCellValueByColumnAndRow($col++, $i, $h);
+ $sheet->setCellValue([$col++, $i], $h);
$i++;
foreach($items as $item) {
+ if($item->isType('documentcontent')) {
$document = $item->getDocument();
$dms = $document->_dms;
$status = $item->getStatus();
$reviewStatus = $item->getReviewStatus();
$approvalStatus = $item->getApprovalStatus();
- $col = 0;
- $sheet->setCellValueByColumnAndRow($col++, $i, $document->getID());
- $sheet->setCellValueByColumnAndRow($col++, $i, $document->getName());
- $sheet->setCellValueByColumnAndRow($col++, $i, $document->getID()."-".$item->getOriginalFileName());
- $sheet->setCellValueByColumnAndRow($col++, $i, getOverallStatusText($status['status']));
- $sheet->setCellValueByColumnAndRow($col++, $i, $item->getVersion());
- $l = $i;
- $k = $i;
+ $col = 1;
+ $l = $i; // Number of reviewers
+ $k = $i; // Number of approvers
+ if(!$this->skipdefaultcols) {
+ $sheet->setCellValue([$col++, $i], $document->getID());
+ $sheet->setCellValue([$col++, $i], $document->getName());
+ $sheet->setCellValue([$col++, $i], $document->getID()."-".$item->getOriginalFileName());
+ $sheet->setCellValue([$col++, $i], getOverallStatusText($status['status']));
+ $sheet->setCellValue([$col++, $i], $item->getVersion());
if($reviewStatus) {
foreach ($reviewStatus as $r) {
switch ($r["type"]) {
@@ -126,11 +201,11 @@ class SeedDMS_Download_Mgr {
break;
}
$tcol = $col;
- $sheet->setCellValueByColumnAndRow($tcol++, $l, $reqName);
- $sheet->setCellValueByColumnAndRow($tcol, $l, ($r['status']==1 || $r['status']==-1) ? \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel(new DateTime($r['date'])) : null);
- $sheet->getStyleByColumnAndRow($tcol++, $l)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME);
- $sheet->setCellValueByColumnAndRow($tcol++, $l, $r['comment']);
- $sheet->setCellValueByColumnAndRow($tcol++, $l, getReviewStatusText($r["status"]));
+ $sheet->setCellValue([$tcol++, $l], $reqName);
+ $sheet->setCellValue([$tcol, $l], ($r['status']==1 || $r['status']==-1) ? \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel(new DateTime($r['date'])) : null);
+ $sheet->getStyle([$tcol++, $l])->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME);
+ $sheet->setCellValue([$tcol++, $l], $r['comment']);
+ $sheet->setCellValue([$tcol++, $l], getReviewStatusText($r["status"]));
$l++;
}
$l--;
@@ -157,23 +232,61 @@ class SeedDMS_Download_Mgr {
break;
}
$tcol = $col;
- $sheet->setCellValueByColumnAndRow($tcol++, $k, $reqName);
- $sheet->setCellValueByColumnAndRow($tcol, $k, ($r['status']==1 || $r['status']==-1) ? \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel(new DateTime($r['date'])) : null);
- $sheet->getStyleByColumnAndRow($tcol++, $k)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME);
- $sheet->setCellValueByColumnAndRow($tcol++, $k, $r['comment']);
- $sheet->setCellValueByColumnAndRow($tcol++, $k, getApprovalStatusText($r["status"]));
+ $sheet->setCellValue([$tcol++, $k], $reqName);
+ $sheet->setCellValue([$tcol, $k], ($r['status']==1 || $r['status']==-1) ? \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel(new DateTime($r['date'])) : null);
+ $sheet->getStyle([$tcol++, $k])->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME);
+ $sheet->setCellValue([$tcol++, $k], $r['comment']);
+ $sheet->setCellValue([$tcol++, $k], getApprovalStatusText($r["status"]));
$k++;
}
$k--;
}
$col += 4;
+ }
if(isset($this->extracols[$item->getID()]) && $this->extracols[$item->getID()]) {
foreach($this->extracols[$item->getID()] as $column)
- $sheet->setCellValueByColumnAndRow($col++, $i, is_array($column) ? implode("\n", $column) : $column );
+ $sheet->setCellValue([$col++, $i], is_array($column) ? implode("\n", $column) : $column );
}
$i = max($l, $k);
$i++;
}
+ }
+ }
+
+ if($items = $this->folder_items) {
+ if($this->items)
+ $sheet = $objPHPExcel->createSheet($i);
+ else
+ $sheet = $objPHPExcel->setActiveSheetIndex(0);
+ $sheet->setTitle(getMLText('folders'));
+
+ $i = 1;
+ $col = 1;
+ if(!$this->skipdefaultcols)
+ foreach($this->folder_header as $h)
+ $sheet->setCellValue([$col++, $i], $h);
+ foreach($this->folder_extraheader as $h)
+ $sheet->setCellValue([$col++, $i], $h);
+ $i++;
+ $items = $this->folder_items;
+ foreach($items as $item) {
+ if($item->isType('folder')) {
+ $folder = $item;
+ $dms = $folder->_dms;
+
+ $col = 1;
+ if(!$this->skipdefaultcols) {
+ $sheet->setCellValue([$col++, $i], $folder->getID());
+ $sheet->setCellValue([$col++, $i], $folder->getName());
+ }
+ if(isset($this->folder_extracols[$item->getID()]) && $this->folder_extracols[$item->getID()]) {
+ foreach($this->folder_extracols[$item->getID()] as $column)
+ $sheet->setCellValue([$col++, $i], is_array($column) ? implode("\n", $column) : $column );
+ }
+ $i++;
+ }
+ }
+ }
$objWriter = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($objPHPExcel);
$objWriter->save($file);
diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php
index 82c76e98d..bf362c59d 100644
--- a/inc/inc.ClassEmailNotify.php
+++ b/inc/inc.ClassEmailNotify.php
@@ -46,6 +46,8 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify {
protected $from_address;
+ protected $force_from;
+
protected $lazy_ssl;
protected $debug;
@@ -203,7 +205,7 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify {
if($returnpath)
$headers['Return-Path'] = $returnpath;
$headers['To'] = $to;
- $preferences = array("input-charset" => "UTF-8", "output-charset" => "UTF-8");
+ $preferences = array("input-charset" => "UTF-8", "output-charset" => "UTF-8", "scheme"=>"Q");
$encoded_subject = iconv_mime_encode("Subject", getMLText($subject, $params, null, $lang), $preferences);
$headers['Subject'] = substr($encoded_subject, strlen('Subject: '));
$headers['Date'] = date('r', time());
diff --git a/inc/inc.ClassExtensionMgr.php b/inc/inc.ClassExtensionMgr.php
index 8b86b3fb5..f8f0a06ca 100644
--- a/inc/inc.ClassExtensionMgr.php
+++ b/inc/inc.ClassExtensionMgr.php
@@ -210,13 +210,19 @@ class SeedDMS_Extension_Mgr {
$fp = @fopen(self::getExtensionsConfFile(), "w");
if($fp) {
if($extensions) {
+ $EXT_CONF = [];
foreach($extensions as $_ext) {
if(file_exists($this->extdir . "/" . $_ext . "/conf.php")) {
- $content = file_get_contents($this->extdir . "/" . $_ext . "/conf.php");
- fwrite($fp, $content);
+ include $this->extdir . "/" . $_ext . "/conf.php";
+// $content = file_get_contents($this->extdir . "/" . $_ext . "/conf.php");
+// fwrite($fp, $content);
}
}
}
+// fclose($fp);
+// $fp = @fopen(self::getExtensionsConfFile(), "w");
+ fwrite($fp, 'configcache[$extname])) {
- return $this->configcache[$extname];
+// return $this->configcache[$extname];
}
$this->errmsgs = array();
@@ -494,19 +500,6 @@ class SeedDMS_Extension_Mgr {
return $this->configcache[$extname];
} /* }}} */
- static protected function rrmdir($dir) { /* {{{ */
- if (is_dir($dir)) {
- $objects = scandir($dir);
- foreach ($objects as $object) {
- if ($object != "." && $object != "..") {
- if (filetype($dir."/".$object) == "dir") self::rrmdir($dir."/".$object); else unlink($dir."/".$object);
- }
- }
- reset($objects);
- rmdir($dir);
- }
- } /* }}} */
-
/**
* Update an extension
*
@@ -522,7 +515,7 @@ class SeedDMS_Extension_Mgr {
$newdir = addDirSep($this->cachedir)."ext.new";
/* First remove a left over from a previous extension */
if(file_exists($newdir)) {
- self::rrmdir($newdir);
+ SeedDMS_Utils::rrmdir($newdir);
}
if(!mkdir($newdir, 0755)) {
$this->errmsgs[] = "Cannot create temp. extension directory";
@@ -542,7 +535,7 @@ class SeedDMS_Extension_Mgr {
/* Check if extension is complete and fullfills the constraints */
if(!self::checkExtensionByDir($newdir)) {
- self::rrmdir($newdir);
+ SeedDMS_Utils::rrmdir($newdir);
return false;
}
@@ -553,11 +546,11 @@ class SeedDMS_Extension_Mgr {
if(!is_dir($this->extdir)) {
if(!mkdir($this->extdir, 0755)) {
$this->errmsgs[] = "Cannot create extension directory";
- self::rrmdir($newdir);
+ SeedDMS_Utils::rrmdir($newdir);
return false;
}
} elseif(is_dir($this->extdir ."/". $extname)) {
- $this->rrmdir($this->extdir ."/". $extname);
+ SeedDMS_Utils::rrmdir($this->extdir ."/". $extname);
}
/* Move the temp. created ext directory to the final location */
/* rename() may fail if dirs are moved from one device to another.
@@ -579,7 +572,7 @@ class SeedDMS_Extension_Mgr {
* has been copied.
*/
$this->errmsgs[] = "Cannot move temp. extension directory to final destination";
- $this->rrmdir($this->extdir ."/". $extname);
+ SeedDMS_Utils::rrmdir($this->extdir ."/". $extname);
return false;
}
diff --git a/inc/inc.ClassFulltextService.php b/inc/inc.ClassFulltextService.php
index 286444a45..b729a3d8a 100644
--- a/inc/inc.ClassFulltextService.php
+++ b/inc/inc.ClassFulltextService.php
@@ -209,7 +209,7 @@ class SeedDMS_FulltextService {
if($this->index)
return $this->index;
- if($this->services[0]) {
+ if($this->services) {
if($recreate)
$this->index = $this->services[0]['Indexer']::create($this->services[0]['Conf']);
else
@@ -222,7 +222,7 @@ class SeedDMS_FulltextService {
public function Search() { /* {{{ */
if($this->search)
return $this->search;
- if($this->services[0]) {
+ if($this->services) {
$this->search = new $this->services[0]['Search']($this->index);
return $this->search;
} else {
diff --git a/inc/inc.ClassLdapAuthentication.php b/inc/inc.ClassLdapAuthentication.php
index 0f2ab27c1..7ca786a1b 100644
--- a/inc/inc.ClassLdapAuthentication.php
+++ b/inc/inc.ClassLdapAuthentication.php
@@ -29,12 +29,12 @@ class SeedDMS_LdapAuthentication extends SeedDMS_Authentication {
var $settings;
protected function addUser($username, $info) {
- $mailfield = !empty($settings->_ldapMailField) ? $settings->_ldapMailField : 'mail';
+ $mailfield = !empty($this->settings->_ldapMailField) ? $this->settings->_ldapMailField : 'mail';
return $this->dms->addUser($username, null, $info['cn'][0], isset($info[$mailfield]) ? $info[$mailfield][0] : '', $this->settings->_language, $this->settings->_theme, "User was added from LDAP");
}
protected function updateUser($user, $info) {
- $mailfield = !empty($settings->_ldapMailField) ? $settings->_ldapMailField : 'mail';
+ $mailfield = !empty($this->settings->_ldapMailField) ? $this->settings->_ldapMailField : 'mail';
if(isset($info['cn'][0]) && ($info['cn'][0] != $user->getFullName())) {
$user->setFullName($info['cn'][0]);
}
diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php
index 2fd9b22d0..d71aa1ae5 100644
--- a/inc/inc.ClassNotificationService.php
+++ b/inc/inc.ClassNotificationService.php
@@ -573,7 +573,7 @@ class SeedDMS_NotificationService {
* the currently logged in user is not the
* owner and the owner is not already in the list of notifiers.
*/
- if($user->getID() != $content->getUser()->getID() && $content->getUser()->getID() != $document->getOwner()->getID() && false === SeedDMS_Core_DMS::inList($content->getUser(), $nl['users']))
+ if($user->getID() != $content->getUser()->getID() && $content->getUser()->getID() != $document->getOwner()->getID() && false === SeedDMS_Core_DMS::inList($content->getUser(), $notifyList['users']))
$this->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_UPLOADER);
} /* }}} */
@@ -1471,6 +1471,35 @@ class SeedDMS_NotificationService {
$this->toGroup($user, $recipient, $subject, $message, $params, SeedDMS_NotificationService::RECV_RECIPIENT);
} /* }}} */
+ /**
+ * Send a request receipt notification to all recipients of the document content
+ *
+ * This method can be called when the status of a document content changes
+ * to 'released'. The recipients haven't been informed when the
+ * document content was created but not immediatly released.
+ */
+ public function sendToAllReceiptMail($content, $user) { /* {{{ */
+ $dms = $content->getDMS();
+
+ $receiptStatus = $content->getReceiptStatus();
+ if (!empty($receiptStatus)) {
+ foreach ($receiptStatus as $r) {
+ if($r['status'] == 0) {
+ switch ($r["type"]) {
+ case 0: // Recipient is an individual.
+ if($recipient = $dms->getUser($r["required"]))
+ $this->sendAddReceiptMail($content, $user, $recipient);
+ break;
+ case 1: // Recipient is a group.
+ if($recipient = $dms->getGroup($r["required"]))
+ $this->sendAddReceiptMail($content, $user, $recipient);
+ break;
+ }
+ }
+ }
+ }
+ } /* }}} */
+
public function sendChangedDocumentOwnerMail($document, $user, $oldowner) { /* {{{ */
if($oldowner->getID() != $document->getOwner()->getID()) {
$notifyList = $document->getNotifyList();
diff --git a/inc/inc.ClassSession.php b/inc/inc.ClassSession.php
index a9940d938..e1f1c1b8e 100644
--- a/inc/inc.ClassSession.php
+++ b/inc/inc.ClassSession.php
@@ -286,6 +286,24 @@ class SeedDMS_Session {
return (array) $this->data['clipboard'];
} /* }}} */
+ /**
+ * Check if object is on clipboard
+ *
+ * @param object $object Document or folder
+ */
+ function isOnClipboard($object) { /* {{{ */
+ /* id is only set if load() was called before */
+ if($this->id) {
+ $dms = $object->getDMS();
+ if($object->isType('document')) {
+ return in_array($object->getID(), $this->data['clipboard']['docs']);
+ } elseif($object->isType('folder')) {
+ return in_array($object->getID(), $this->data['clipboard']['folders']);
+ }
+ }
+ return false;
+ } /* }}} */
+
/**
* Add to clipboard of session
*
diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php
index ea3b52853..0ca786f34 100644
--- a/inc/inc.ClassSettings.php
+++ b/inc/inc.ClassSettings.php
@@ -152,6 +152,8 @@ class Settings { /* {{{ */
var $_batchOperations = array(); // or 'all', 'change_owner', etc.
// jump straight to the document if it is the only hit of a search
var $_showSingleSearchHit = true;
+ // enable/disable use of memcached
+ var $_enableMemcached = false;
// contentOffsetDirTo
var $_contentOffsetDir = "1048576";
// Maximum number of sub-directories per parent directory
@@ -265,8 +267,10 @@ class Settings { /* {{{ */
var $_allowChangeRevAppInProcess = false;
// enable/disable log system
var $_logFileEnable = true;
- // enable/disable log system
+ // max log level
var $_logFileMaxLevel = 6; // PEAR_LOG_INFO
+ // max log level for restapi
+ var $_logFileRestApiMaxLevel = 6; // PEAR_LOG_INFO
// the log file rotation
var $_logFileRotation = "d";
// Enable file upload by fine-uploader (was 'jumploader')
@@ -321,6 +325,8 @@ class Settings { /* {{{ */
var $_maxRecursiveCount = 10000;
// number of days in the past of the dashboard
var $_daysPastDashboard = 7;
+ // list of folders not considered for dashboard
+ var $_excludeFoldersDashboard = [];
// enable/disable help
var $_enableHelp = true;
// enable/disable language selection menu
@@ -388,6 +394,10 @@ class Settings { /* {{{ */
var $_smtpPort = null;
// SMTP : send from
var $_smtpSendFrom = null;
+ // SMTP : force send from
+ var $_smtpForceFrom = false;
+ // SMTP : allow self signed certificates
+ var $_smtpLazySSL = false;
// SMTP : user
var $_smtpUser = null;
// SMTP : password
@@ -504,7 +514,7 @@ class Settings { /* {{{ */
*
*/
function stringToArray($value) { /* {{{ */
- return explode(";", $Value);
+ return explode(";", $value);
} /* }}} */
/**
@@ -622,6 +632,8 @@ class Settings { /* {{{ */
$this->_enableRecursiveCount = Settings::boolVal($tab["enableRecursiveCount"]);
$this->_maxRecursiveCount = intval($tab["maxRecursiveCount"]);
$this->_daysPastDashboard = intval($tab["daysPastDashboard"]);
+ if(trim(strval($tab["excludeFoldersDashboard"])))
+ $this->_excludeFoldersDashboard = explode(',',strval($tab["excludeFoldersDashboard"]));
$this->_enableHelp = Settings::boolVal($tab["enableHelp"]);
$this->_enableLanguageSelector = Settings::boolVal($tab["enableLanguageSelector"]);
$this->_enableThemeSelector = Settings::boolVal($tab["enableThemeSelector"]);
@@ -690,11 +702,13 @@ class Settings { /* {{{ */
$this->_proxyPassword = strval($tab["proxyPassword"]);
$this->_logFileEnable = Settings::boolVal($tab["logFileEnable"]);
$this->_logFileMaxLevel = strval($tab["logFileMaxLevel"]);
+ $this->_logFileRestApiMaxLevel = strval($tab["logFileRestApiMaxLevel"]);
$this->_logFileRotation = strval($tab["logFileRotation"]);
$this->_enableLargeFileUpload = Settings::boolVal($tab["enableLargeFileUpload"]);
$this->_partitionSize = strval($tab["partitionSize"]);
$this->_maxUploadSize = strval($tab["maxUploadSize"]);
$this->_enableXsendfile = Settings::boolVal($tab["enableXsendfile"]);
+ $this->_enableMemcached = Settings::boolVal($tab["enableMemcached"]);
// XML Path: /configuration/system/authentication
$node = $xml->xpath('/configuration/system/authentication');
@@ -1000,6 +1014,8 @@ class Settings { /* {{{ */
if (is_null($configFilePath))
$configFilePath = $this->_configFilePath;
+ // copy($configFilePath, $configFilePath.'.'.time());
+
// Load
$xml = simplexml_load_string(file_get_contents($configFilePath));
$this->getXMLNode($xml, '/', 'configuration');
@@ -1052,6 +1068,7 @@ class Settings { /* {{{ */
$this->setXMLAttributValue($node, "enableRecursiveCount", $this->_enableRecursiveCount);
$this->setXMLAttributValue($node, "maxRecursiveCount", $this->_maxRecursiveCount);
$this->setXMLAttributValue($node, "daysPastDashboard", $this->_daysPastDashboard);
+ $this->setXMLAttributValue($node, "excludeFoldersDashboard", implode(',', $this->_excludeFoldersDashboard));
$this->setXMLAttributValue($node, "enableHelp", $this->_enableHelp);
$this->setXMLAttributValue($node, "enableLanguageSelector", $this->_enableLanguageSelector);
$this->setXMLAttributValue($node, "enableThemeSelector", $this->_enableThemeSelector);
@@ -1106,11 +1123,13 @@ class Settings { /* {{{ */
$this->setXMLAttributValue($node, "proxyPassword", $this->_proxyPassword);
$this->setXMLAttributValue($node, "logFileEnable", $this->_logFileEnable);
$this->setXMLAttributValue($node, "logFileMaxLevel", $this->_logFileMaxLevel);
+ $this->setXMLAttributValue($node, "logFileRestApiMaxLevel", $this->_logFileRestApiMaxLevel);
$this->setXMLAttributValue($node, "logFileRotation", $this->_logFileRotation);
$this->setXMLAttributValue($node, "enableLargeFileUpload", $this->_enableLargeFileUpload);
$this->setXMLAttributValue($node, "partitionSize", $this->_partitionSize);
$this->setXMLAttributValue($node, "maxUploadSize", $this->_maxUploadSize);
$this->setXMLAttributValue($node, "enableXsendfile", $this->_enableXsendfile);
+ $this->setXMLAttributValue($node, "enableMemcached", $this->_enableMemcached);
// XML Path: /configuration/system/authentication
$node = $this->getXMLNode($xml, '/configuration/system', 'authentication');
@@ -1337,9 +1356,9 @@ class Settings { /* {{{ */
*/
foreach($extension as $fieldname=>$confvalue) {
if($fieldname != '___disable__' && $confvalue) {
- $parameter = $extnode->addChild('parameter');
- $parameter[0] = isset($extension[$fieldname]) ? (is_array($extension[$fieldname]) ? implode(',', $extension[$fieldname]) : $extension[$fieldname]) : '';
- $this->setXMLAttributValue($parameter, 'name', $fieldname);
+ $parameter = $extnode->addChild('parameter');
+ $parameter[0] = isset($extension[$fieldname]) ? (is_array($extension[$fieldname]) ? implode(',', $extension[$fieldname]) : $extension[$fieldname]) : '';
+ $this->setXMLAttributValue($parameter, 'name', $fieldname);
}
}
/* Old code saves those parameters listed in the configuration
diff --git a/inc/inc.ClassUI.php b/inc/inc.ClassUI.php
index a4be47637..c2ead8805 100644
--- a/inc/inc.ClassUI.php
+++ b/inc/inc.ClassUI.php
@@ -45,8 +45,8 @@ class UI extends UI_Default {
* @param array $params parameter passed to constructor of view class
* @return object an object of a class implementing the view
*/
- static function factory($theme, $class='', $params=array()) { /* {{{ */
- global $settings, $dms, $user, $session, $extMgr, $request, $logger, $notifier;
+ static public function factory($theme, $class='', $params=array()) { /* {{{ */
+ global $settings, $dms, $user, $session, $extMgr, $request, $logger, $notifier, $fulltextservice;
if(!$class) {
$class = 'Bootstrap';
$class = 'Style';
@@ -138,6 +138,7 @@ class UI extends UI_Default {
$view->setParam('request', $request);
$view->setParam('logger', $logger);
$view->setParam('notifier', $notifier);
+ $view->setParam('fulltextservice', $fulltextservice);
// $view->setParam('settings', $settings);
$view->setParam('sitename', $settings->_siteName);
$view->setParam('rootfolderid', $settings->_rootFolderID);
@@ -179,7 +180,7 @@ class UI extends UI_Default {
return null;
} /* }}} */
- static function getStyles() { /* {{{ */
+ static public function getStyles() { /* {{{ */
global $settings;
$themes = array();
@@ -196,7 +197,7 @@ class UI extends UI_Default {
return $themes;
} /* }}} */
- static function exitError($pagetitle, $error, $noexit=false, $plain=false) {
+ static public function exitError($pagetitle, $error, $noexit=false, $plain=false) {
global $theme, $dms, $user, $settings;
$view = UI::factory($theme, 'ErrorDlg');
$request = $view->getParam('request');
diff --git a/inc/inc.ConversionInit.php b/inc/inc.ConversionInit.php
index 3e384025b..f5cce91c3 100644
--- a/inc/inc.ConversionInit.php
+++ b/inc/inc.ConversionInit.php
@@ -63,6 +63,8 @@ if (extension_loaded('gd') || extension_loaded('imagick')) {
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/png', 'image/png'))->setLogger($logger);
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/jpg', 'image/png'))->setLogger($logger);
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/gif', 'image/png'))->setLogger($logger);
+ $conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/webp', 'image/png'))->setLogger($logger);
+ $conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/avif', 'image/png'))->setLogger($logger);
}
if (extension_loaded('imagick')) {
diff --git a/inc/inc.DBInit.php b/inc/inc.DBInit.php
index ee23cd6e6..6e520b96f 100644
--- a/inc/inc.DBInit.php
+++ b/inc/inc.DBInit.php
@@ -56,7 +56,7 @@ if(isset($GLOBALS['SEEDDMS_HOOKS']['initStorage'])) {
$dms = new SeedDMS_Core_DMS($db, $storage ? $storage : $settings->_contentDir.$settings->_contentOffsetDir);
-if(extension_loaded('memcached')) {
+if($settings->_enableMemcached && extension_loaded('memcached')) {
$memcache = new Memcached('seeddms');
$memcache->addServers(array(
array('localhost',11211),
diff --git a/inc/inc.Init.php b/inc/inc.Init.php
index 4df107c9d..66a569d06 100644
--- a/inc/inc.Init.php
+++ b/inc/inc.Init.php
@@ -32,6 +32,10 @@
use Symfony\Component\HttpFoundation\Request;
+/* Actually not needed anymore, but some old extension may still use
+ * S_RELEASED, S_REJECTED, etc. from SeedDMS_Core_Document. So we keep
+ * it for a while. Should be removed von 6.0.31 and 5.1.38 is released.
+ */
if (!empty($settings->_coreDir)) {
require_once $settings->_coreDir . '/Core.php';
} else {
diff --git a/inc/inc.Tasks.php b/inc/inc.Tasks.php
index 0e2bca4c4..146da29f4 100644
--- a/inc/inc.Tasks.php
+++ b/inc/inc.Tasks.php
@@ -53,11 +53,12 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */
$params['count'] = count($docs);
$params['__body__'] = $body;
$params['__body_html__'] = $bodyhtml;
+ $params['__skip_footer__'] = true;
$params['sitename'] = $settings->_siteName;
$email->toIndividual('', $u, 'expired_docs_mail_subject', '', $params);
- $logger->log('Task \'expired_docs\': Sending reminder \'expired_docs_mail_subject\' to user \''.$u->getLogin().'\'', PEAR_LOG_INFO);
+ $logger->log('Task \'expired_docs\': Sending reminder \'expired_docs_mail_subject\' to user \''.$u->getLogin().'\' ('.(count($docs)).' documents)', PEAR_LOG_INFO);
} else {
- $logger->log('Task \'expired_docs\': Dry run, not sending reminder \'expired_docs_mail_subject\' to user \''.$u->getLogin().'\'', PEAR_LOG_INFO);
+ $logger->log('Task \'expired_docs\': Dry run, not sending reminder \'expired_docs_mail_subject\' to user \''.$u->getLogin().'\' ('.(count($docs)).' documents)', PEAR_LOG_INFO);
}
}
}
@@ -79,12 +80,13 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */
$params['count'] = count($docs);
$params['__body__'] = $body;
$params['__body_html__'] = $bodyhtml;
+ $params['__skip_footer__'] = true;
$params['sitename'] = $settings->_siteName;
$email->toIndividual('', $taskparams['email'], 'expired_docs_mail_subject', '', $params);
- $logger->log('Task \'expired_docs\': Sending reminder \'expired_docs_mail_subject\' to user \''.$taskparams['email'].'\'', PEAR_LOG_INFO);
+ $logger->log('Task \'expired_docs\': Sending reminder \'expired_docs_mail_subject\' to user \''.$taskparams['email'].'\' ('.(count($docs)).' documents)', PEAR_LOG_INFO);
} else {
- $logger->log('Task \'expired_docs\': Dry run, not sending reminder \'expired_docs_mail_subject\' to user \''.$taskparams['email'].'\'', PEAR_LOG_INFO);
+ $logger->log('Task \'expired_docs\': Dry run, not sending reminder \'expired_docs_mail_subject\' to user \''.$taskparams['email'].'\' ('.(count($docs)).' documents)', PEAR_LOG_INFO);
}
}
} else {
@@ -613,6 +615,7 @@ class SeedDMS_CalendarTask extends SeedDMS_SchedulerTaskBase { /* {{{ */
$params['count'] = count($events);
$params['__body__'] = $body;
$params['__body_html__'] = $bodyhtml;
+ $params['__skip_footer__'] = true;
$params['sitename'] = $settings->_siteName;
$email->toIndividual('', $auser, 'calendar_events_mail_subject', '', $params);
@@ -714,6 +717,7 @@ class SeedDMS_StatisticTask extends SeedDMS_SchedulerTaskBase { /* {{{ */
$params = array();
$params['__body__'] = $body;
$params['__body_html__'] = $bodyhtml;
+ $params['__skip_footer__'] = true;
$params['sitename'] = $settings->_siteName;
$email->toIndividual('', $auser, 'statistics_mail_subject', '', $params);
@@ -813,6 +817,7 @@ class SeedDMS_RecentChangesTask extends SeedDMS_SchedulerTaskBase { /* {{{ */
$params['__body__'] = $body;
$params['__body_html__'] = $bodyhtml;
+ $params['__skip_footer__'] = true;
$params['sitename'] = $settings->_siteName;
$email->toIndividual('', $u, 'recentchanges_mail_subject', '', $params);
diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php
index a67fca0b7..4e3e3744c 100644
--- a/inc/inc.Utils.php
+++ b/inc/inc.Utils.php
@@ -1100,7 +1100,9 @@ function getMandatoryReviewers($folder, $document, $user) { /* {{{ */
foreach($groups as $group) {
$managers = $group->getManagers();
foreach($managers as $manager) {
- $revi[] = $manager->getId();
+ /* Do not add myself, if I'm the manager of the group */
+ if($manager->getId() != $user->getId())
+ $revi[] = $manager->getId();
}
}
}
@@ -1195,7 +1197,9 @@ function getMandatoryApprovers($folder, $document, $user) { /* {{{ */
foreach($groups as $group) {
$managers = $group->getManagers();
foreach($managers as $manager) {
- $appi[] = $manager->getId();
+ /* Do not add myself, if I'm the manager of the group */
+ if($manager->getId() != $user->getId())
+ $appi[] = $manager->getId();
}
}
}
@@ -1256,6 +1260,34 @@ function getMandatoryApprovers($folder, $document, $user) { /* {{{ */
return $approvers;
} /* }}} */
+/**
+ * Class with various utility methods
+ *
+ * This class will sooner or later comprise the functions above
+ *
+ */
+class SeedDMS_Utils { /* {{{ */
+
+ /**
+ * Recursively remove a directory on disc
+ *
+ * @param string $dir name of directory
+ */
+ static public function rrmdir($dir) { /* {{{ */
+ if (is_dir($dir)) {
+ $objects = scandir($dir);
+ foreach ($objects as $object) {
+ if ($object != "." && $object != "..") {
+ if (filetype($dir."/".$object) == "dir") self::rrmdir($dir."/".$object); else unlink($dir."/".$object);
+ }
+ }
+ reset($objects);
+ rmdir($dir);
+ }
+ } /* }}} */
+
+} /* }}} */
+
/**
* Class for creating encrypted api keys
*
@@ -1388,3 +1420,659 @@ class SeedDMS_FolderTree { /* {{{ */
} /* }}} */
} /* }}} */
+
+class SeedDMS_Search { /* {{{ */
+ protected $dms;
+
+ protected $user;
+
+ protected $fulltextservice;
+
+ protected $settings;
+
+ public $searchparams;
+
+ protected $dcount;
+
+ protected $fcount;
+
+ protected $totalPages;
+
+ protected $entries;
+
+ protected $terms;
+
+ protected $searchTime;
+
+ public function __construct($dms, $user, $fulltextservice, $settings) {
+ $this->dms = $dms;
+ $this->user = $user;
+ $this->fulltextservice = $fulltextservice;
+ $this->settings = $settings;
+ $this->searchparams = [];
+ $this->dcount = 0;
+ $this->fcount = 0;
+ $this->totalPages = 0;
+ $this->entries = array();
+ $this->terms = array();
+ $this->searchTime = 0;
+ }
+
+ protected function getTime() { /* {{{ */
+ if (function_exists('microtime')) {
+ $tm = microtime();
+ $tm = explode(' ', $tm);
+ return (float) sprintf('%f', $tm[1] + $tm[0]);
+ }
+ return time();
+ } /* }}} */
+
+ public function createSearchFromQuery($get) { /* {{{ */
+ $dms = $this->dms;
+
+ /* Creation date {{{ */
+ $createstartts = null;
+ $createstartdate = null;
+ $createendts = null;
+ $createenddate = null;
+ $created['from'] = null;
+ $created['to'] = null;
+ if(!empty($get["created"]["from"])) {
+ $createstartts = makeTsFromDate($get["created"]["from"]);
+ $createstartdate = array('year'=>(int)date('Y', $createstartts), 'month'=>(int)date('m', $createstartts), 'day'=>(int)date('d', $createstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
+ if (!checkdate($createstartdate['month'], $createstartdate['day'], $createstartdate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_create_date_end"));
+ }
+ $created['from'] = $createstartts;
+ }
+ if(!empty($get["created"]["to"])) {
+ $createendts = makeTsFromDate($get["created"]["to"]);
+ $createenddate = array('year'=>(int)date('Y', $createendts), 'month'=>(int)date('m', $createendts), 'day'=>(int)date('d', $createendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
+ if (!checkdate($createenddate['month'], $createenddate['day'], $createenddate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_create_date_end"));
+ }
+ $created['to'] = $createendts;
+ }
+ $this->searchparams['created'] = $created;
+ /* }}} */
+
+ /* Modification date {{{ */
+ $modifystartts = null;
+ $modifystartdate = null;
+ $modifyendts = null;
+ $modifyenddate = null;
+ $modified['from'] = null;
+ $modified['to'] = null;
+ if(!empty($get["modified"]["from"])) {
+ $modifystartts = makeTsFromDate($get["modified"]["from"]);
+ $modifystartdate = array('year'=>(int)date('Y', $modifystartts), 'month'=>(int)date('m', $modifystartts), 'day'=>(int)date('d', $modifystartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
+ if (!checkdate($modifystartdate['month'], $modifystartdate['day'], $modifystartdate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_modification_date_end"));
+ }
+ $modified['from'] = $modifystartts;
+ }
+ if(!empty($get["modified"]["to"])) {
+ $modifyendts = makeTsFromDate($get["modified"]["to"]);
+ $modifyenddate = array('year'=>(int)date('Y', $modifyendts), 'month'=>(int)date('m', $modifyendts), 'day'=>(int)date('d', $modifyendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
+ if (!checkdate($modifyenddate['month'], $modifyenddate['day'], $modifyenddate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_modification_date_end"));
+ }
+ $modified['to'] = $modifyendts;
+ }
+ $this->searchparams['modified'] = $modified;
+ /* }}} */
+
+ /* Filesize {{{ */
+ $filesizestart = 0;
+ $filesizeend = 0;
+ $filesize['from'] = null;
+ $filesize['to'] = null;
+ if(!empty($get["filesize"]["from"])) {
+ $filesizestart = $get["filesize"]["from"];
+ $filesize['from'] = $get["filesize"]["from"];
+ }
+ if(!empty($get["filesize"]["to"])) {
+ $filesizeend = $get["filesize"]["to"];
+ $filesize['to'] = $get["filesize"]["to"];
+ }
+ $this->searchparams['filesize'] = $filesize;
+ /* }}} */
+
+ // Check to see if the search has been restricted to a particular
+ // document owner.
+ // $get['owner'] can be a name of an array of names or ids {{{
+ $owner = [];
+ $ownernames = []; // Needed by fulltext search
+ $ownerobjs = []; // Needed by database search
+ if(!empty($get["owner"])) {
+ $owner = $get['owner'];
+ if (!is_array($get['owner'])) {
+ if(is_numeric($get['owner']))
+ $o = $dms->getUser($get['owner']);
+ else
+ $o = $dms->getUserByLogin($get['owner']);
+ if($o) {
+ $ownernames[] = $o->getLogin();
+ $ownerobjs[] = $o;
+ }
+ } else {
+ foreach($get["owner"] as $l) {
+ if($l) {
+ if(is_numeric($l))
+ $o = $dms->getUser($l);
+ else
+ $o = $dms->getUserByLogin($l);
+ if($o) {
+ $ownernames[] = $o->getLogin();
+ $ownerobjs[] = $o;
+ }
+ }
+ }
+ }
+ }
+ $this->searchparams['ownernames'] = $ownernames;
+ $this->searchparams['ownerobjs'] = $ownerobjs;
+ /* }}} */
+
+ // category {{{
+ $categories = array();
+ $categorynames = array();
+ $category = array();
+ if(isset($get['category']) && $get['category']) {
+ $category = $get['category'];
+ foreach($get['category'] as $catid) {
+ if($catid) {
+ if(is_numeric($catid)) {
+ if($cat = $dms->getDocumentCategory($catid)) {
+ $categories[] = $cat;
+ $categorynames[] = $cat->getName();
+ }
+ } else {
+ $categorynames[] = $catid;
+ }
+ }
+ }
+ }
+ $this->searchparams['categorynames'] = $categorynames;
+ $this->searchparams['categories'] = $categories;
+ /* }}} */
+
+ if (isset($get["orderby"]) && is_string($get["orderby"])) {
+ $orderby = $get["orderby"];
+ } else {
+ $orderby = "";
+ }
+ $this->searchparams['orderby'] = $orderby;
+
+ $limit = (isset($get["limit"]) && is_numeric($get["limit"])) ? (int) $get['limit'] : 20;
+ $this->searchparams['limit'] = $limit;
+ $fullsearch = ((!isset($get["fullsearch"]) && $this->settings->_defaultSearchMethod == 'fulltext') || !empty($get["fullsearch"])) && $this->settings->_enableFullSearch;
+ $this->searchparams['fullsearch'] = $fullsearch;
+ $facetsearch = !empty($get["facetsearch"]) && $this->settings->_enableFullSearch;
+ $this->searchparams['facetsearch'] = $facetsearch;
+
+ if (isset($get["query"]) && is_string($get["query"])) {
+ $query = $get["query"];
+ } else {
+ $query = "";
+ }
+ $this->searchparams['query'] = $query;
+
+ // Check to see if the search has been restricted to a particular
+ // mimetype. {{{
+ $mimetype = [];
+ if (isset($get["mimetype"])) {
+ if (!is_array($get['mimetype'])) {
+ if(!empty($get['mimetype']))
+ $mimetype[] = $get['mimetype'];
+ } else {
+ foreach($get["mimetype"] as $l) {
+ if($l)
+ $mimetype[] = $l;
+ }
+ }
+ }
+ $this->searchparams['mimetype'] = $mimetype;
+ /* }}} */
+
+ // status
+ $status = isset($get['status']) ? $get['status'] : array();
+ $this->searchparams['status'] = $status;
+
+ // Get the page number to display. If the result set contains more than
+ // 25 entries, it is displayed across multiple pages.
+ //
+ // This requires that a page number variable be used to track which page the
+ // user is interested in, and an extra clause on the select statement.
+ //
+ // Default page to display is always one.
+ $pageNumber=1;
+ if (isset($get["pg"])) {
+ if (is_numeric($get["pg"]) && $get["pg"]>0) {
+ $pageNumber = (int) $get["pg"];
+ }
+ elseif (!strcasecmp($get["pg"], "all")) {
+ $pageNumber = "all";
+ }
+ }
+ $this->searchparams['pageNumber'] = $pageNumber;
+
+ if($fullsearch) {
+ // Search in Fulltext {{{
+
+ // record_type
+ if(isset($get['record_type']))
+ $record_type = $get['record_type'];
+ else
+ $record_type = array();
+ $this->searchparams['record_type'] = $record_type;
+
+ if (isset($get["attributes"]))
+ $attributes = $get["attributes"];
+ else
+ $attributes = array();
+
+ foreach($attributes as $an=>&$av) {
+ if(substr($an, 0, 5) == 'attr_') {
+ $tmp = explode('_', $an);
+ if($attrdef = $dms->getAttributeDefinition($tmp[1])) {
+ switch($attrdef->getType()) {
+ /* Turn dates into timestamps */
+ case SeedDMS_Core_AttributeDefinition::type_date:
+ foreach(['from', 'to'] as $kk)
+ if(!empty($av[$kk])) {
+ if(!is_numeric($av[$kk])) {
+ $av[$kk] = makeTsFromDate($av[$kk]);
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ $this->searchparams['attributes'] = $attributes;
+
+ /* Create $order array for fulltext search */
+ $order = ['by'=>'', 'dir'=>''];
+ switch($orderby) {
+ case 'dd':
+ $order = ['by'=>'created', 'dir'=>'desc'];
+ break;
+ case 'd':
+ $order = ['by'=>'created', 'dir'=>'asc'];
+ break;
+ case 'nd':
+ $order = ['by'=>'title', 'dir'=>'desc'];
+ break;
+ case 'n':
+ $order = ['by'=>'title', 'dir'=>'asc'];
+ break;
+ case 'id':
+ $order = ['by'=>'id', 'dir'=>'desc'];
+ break;
+ case 'i':
+ $order = ['by'=>'id', 'dir'=>'asc'];
+ break;
+ default:
+ $order = ['by'=>'', 'dir'=>''];
+ }
+ $this->searchparams['order'] = $order;
+
+ // Check to see if the search has been restricted to a particular sub-tree in
+ // the folder hierarchy.
+ $startFolder = null;
+ if (isset($get["folderfullsearchid"]) && is_numeric($get["folderfullsearchid"]) && $get["folderfullsearchid"]>0) {
+ $targetid = $get["folderfullsearchid"];
+ $startFolder = $this->dms->getFolder($targetid);
+ if (!is_object($startFolder)) {
+ UI::exitError(getMLText("search"),getMLText("invalid_folder_id"));
+ }
+ }
+ $this->searchparams['startFolder'] = $startFolder;
+
+ $rootFolder = $this->dms->getFolder($this->settings->_rootFolderID);
+ $this->searchparams['rootFolder'] = $rootFolder;
+
+ // }}}
+ } else {
+ // Search in Database {{{
+
+ /* Select if only documents (0x01), only folders (0x02) or both (0x03)
+ * are found
+ */
+ $resultmode = 0x03;
+ if (isset($get["resultmode"]) && is_numeric($get["resultmode"])) {
+ $resultmode = $get['resultmode'];
+ }
+ $this->searchparams['resultmode'] = $resultmode;
+
+ $mode = "AND";
+ if (isset($get["mode"]) && is_numeric($get["mode"]) && $get["mode"]==0) {
+ $mode = "OR";
+ }
+ $this->searchparams['mode'] = $mode;
+
+ $searchin = array();
+ if (isset($get['searchin']) && is_array($get["searchin"])) {
+ foreach ($get["searchin"] as $si) {
+ if (isset($si) && is_numeric($si)) {
+ switch ($si) {
+ case 1: // keywords
+ case 2: // name
+ case 3: // comment
+ case 4: // attributes
+ case 5: // id
+ $searchin[$si] = $si;
+ break;
+ }
+ }
+ }
+ }
+
+ // if none is checkd search all
+ if (count($searchin)==0) $searchin=array(1, 2, 3, 4, 5);
+ $this->searchparams['searchin'] = $searchin;
+
+ // Check to see if the search has been restricted to a particular sub-tree in
+ // the folder hierarchy.
+ if (isset($get["targetid"]) && is_numeric($get["targetid"]) && $get["targetid"]>0) {
+ $targetid = $get["targetid"];
+ $startFolder = $this->dms->getFolder($targetid);
+ }
+ else {
+ $startFolder = $this->dms->getRootFolder();
+ }
+ if (!is_object($startFolder)) {
+ UI::exitError(getMLText("search"),getMLText("invalid_folder_id"));
+ }
+ $this->searchparams['startFolder'] = $startFolder;
+
+ /* Revision date {{{ */
+ $revisionstartts = null;
+ $revisionstartdate = array();
+ $revisionendts = null;
+ $revisionenddate = array();
+ $revised['from'] = null;
+ $revised['to'] = null;
+ if(!empty($get["revisiondatestart"])) {
+ $revisionstartts = makeTsFromDate($get["revisiondatestart"]);
+ $revisionstartdate = array('year'=>(int)date('Y', $revisionstartts), 'month'=>(int)date('m', $revisionstartts), 'day'=>(int)date('d', $revisionstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
+ if (!checkdate($revisionstartdate['month'], $revisionstartdate['day'], $revisionstartdate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_revision_date_start"));
+ }
+ $revised['from'] = $revisionstartts;
+ }
+ $this->searchparams['revisionstartdate'] = $revisionstartdate;
+ if(!empty($get["revisiondateend"])) {
+ $revisionendts = makeTsFromDate($get["revisiondateend"]);
+ $revisionenddate = array('year'=>(int)date('Y', $revisionendts), 'month'=>(int)date('m', $revisionendts), 'day'=>(int)date('d', $revisionendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
+ if (!checkdate($revisionenddate['month'], $revisionenddate['day'], $revisionenddate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_revision_date_end"));
+ }
+ $revised['to'] = $revisionendts;
+ }
+ $this->searchparams['revisionenddate'] = $revisionenddate;
+ /* }}} */
+
+ /* Status date {{{ */
+ $statusstartdate = array();
+ $statusenddate = array();
+ if(!empty($get["statusdatestart"])) {
+ $statusstartts = makeTsFromDate($get["statusdatestart"]);
+ $statusstartdate = array('year'=>(int)date('Y', $statusstartts), 'month'=>(int)date('m', $statusstartts), 'day'=>(int)date('d', $statusstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
+ }
+ $this->searchparams['statusstartdate'] = $statusstartdate;
+ if ($statusstartdate && !checkdate($statusstartdate['month'], $statusstartdate['day'], $statusstartdate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_status_date_start"));
+ }
+ $this->searchparams['statusstartdate'] = $statusstartdate;
+
+ if(!empty($get["statusdateend"])) {
+ $statusendts = makeTsFromDate($get["statusdateend"]);
+ $statusenddate = array('year'=>(int)date('Y', $statusendts), 'month'=>(int)date('m', $statusendts), 'day'=>(int)date('d', $statusendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
+ }
+ if ($statusenddate && !checkdate($statusenddate['month'], $statusenddate['day'], $statusenddate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_status_date_end"));
+ }
+ $this->searchparams['statusenddate'] = $statusenddate;
+ /* }}} */
+
+ /* Expiration date {{{ */
+ $expstartdate = array();
+ $expenddate = array();
+ if(!empty($get["expirationstart"])) {
+ $expstartts = makeTsFromDate($get["expirationstart"]);
+ $expstartdate = array('year'=>(int)date('Y', $expstartts), 'month'=>(int)date('m', $expstartts), 'day'=>(int)date('d', $expstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
+ if (!checkdate($expstartdate['month'], $expstartdate['day'], $expstartdate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_expiration_date_start"));
+ }
+ }
+ $this->searchparams['expstartdate'] = $expstartdate;
+ if(!empty($get["expirationend"])) {
+ $expendts = makeTsFromDate($get["expirationend"]);
+ $expenddate = array('year'=>(int)date('Y', $expendts), 'month'=>(int)date('m', $expendts), 'day'=>(int)date('d', $expendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
+ if (!checkdate($expenddate['month'], $expenddate['day'], $expenddate['year'])) {
+ UI::exitError(getMLText("search"),getMLText("invalid_expiration_date_end"));
+ }
+ }
+ $this->searchparams['expenddate'] = $expenddate;
+ /* }}} */
+
+ $reception = array();
+ if (isset($get["reception"])){
+ $reception = $get["reception"];
+ }
+ $this->searchparams['reception'] = $reception;
+
+ /* Do not search for folders if result shall be filtered by status.
+ * If this is not done, unexplainable results will be delivered.
+ * e.g. a search for expired documents of a given user will list
+ * also all folders of that user because the status doesn't apply
+ * to folders.
+ */
+ // if($status)
+ // $resultmode = 0x01;
+
+ if (isset($get["attributes"]))
+ $attributes = $get["attributes"];
+ else
+ $attributes = array();
+
+ foreach($attributes as $attrdefid=>$attribute) {
+ $attrdef = $this->dms->getAttributeDefinition($attrdefid);
+ if($attribute) {
+ if($attrdef->getType() == SeedDMS_Core_AttributeDefinition::type_date) {
+ if(is_array($attribute)) {
+ if(!empty($attributes[$attrdefid]['from']))
+ $attributes[$attrdefid]['from'] = date('Y-m-d', makeTsFromDate($attribute['from']));
+ if(!empty($attributes[$attrdefid]['to']))
+ $attributes[$attrdefid]['to'] = date('Y-m-d', makeTsFromDate($attribute['to']));
+ } else {
+ $attributes[$attrdefid] = date('Y-m-d', makeTsFromDate($attribute));
+ }
+ }
+ }
+ }
+ $this->searchparams['attributes'] = $attributes;
+
+ // }}}
+ }
+ return $this->searchparams;
+ } /* }}} */
+
+ public function setSearchParam($name, $value) {
+ $this->searchparams[$name] = $value;
+ }
+
+ public function search() { /* {{{ */
+ if($this->searchparams['fullsearch']) {
+ if($this->settings->_fullSearchEngine == 'lucene') {
+ Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');
+ }
+
+ $startTime = $this->getTime();
+ $total = 0;
+ $index = $this->fulltextservice->Indexer();
+ if($index) {
+ if(!empty($this->settings->_suggestTerms) && !empty($get['query'])) {
+ $st = preg_split("/[\s,]+/", trim($get['query']));
+ if($lastterm = end($st))
+ $this->terms = $index->terms($lastterm, $this->settings->_suggestTerms);
+ }
+ $limit = $this->searchparams['limit'];
+ $lucenesearch = $this->fulltextservice->Search();
+ $searchresult = $lucenesearch->search($this->searchparams['query'],
+ array(
+ 'record_type'=>$this->searchparams['record_type'],
+ 'owner'=>$this->searchparams['ownernames'],
+ 'status'=>$this->searchparams['status'],
+ 'category'=>$this->searchparams['categorynames'],
+ 'user'=>$this->user->isAdmin() ? [] : [$this->user->getLogin()],
+ 'mimetype'=>$this->searchparams['mimetype'],
+ 'startFolder'=>$this->searchparams['startFolder'],
+ 'rootFolder'=>$this->searchparams['rootFolder'],
+ 'created_start'=>$this->searchparams['created']['from'],
+ 'created_end'=>$this->searchparams['created']['to'],
+ 'modified_start'=>$this->searchparams['modified']['from'],
+ 'modified_end'=>$this->searchparams['modified']['to'],
+ 'filesize_start'=>$this->searchparams['filesize']['from'],
+ 'filesize_end'=>$this->searchparams['filesize']['to'],
+ 'attributes'=>$this->searchparams['attributes']
+ ), ($this->searchparams['pageNumber'] == 'all' ? array() : array('limit'=>$limit, 'offset'=>$limit * ($this->searchparams['pageNumber']-1))), $this->searchparams['order']);
+ if($searchresult !== false) {
+ $entries = array();
+ $facets = $searchresult['facets'];
+ $stats = $searchresult['stats'] ?? null;
+ $dcount = 0;
+ $fcount = 0;
+ if($searchresult['hits']) {
+ foreach($searchresult['hits'] as $hit) {
+ if($hit['document_id'][0] == 'D') {
+ if($tmp = $this->dms->getDocument(substr($hit['document_id'], 1))) {
+ // if($tmp->getAccessMode($user) >= M_READ) {
+ $tmp->verifyLastestContentExpriry();
+ $entries[] = $tmp;
+ $dcount++;
+ // }
+ }
+ } elseif($hit['document_id'][0] == 'F') {
+ if($tmp = $this->dms->getFolder(substr($hit['document_id'], 1))) {
+ // if($tmp->getAccessMode($user) >= M_READ) {
+ $entries[] = $tmp;
+ $fcount++;
+ // }
+ }
+ }
+ }
+ if(isset($facets['record_type'])) {
+ $fcount = isset($facets['record_type']['folder']) ? $facets['record_type']['folder'] : 0;
+ $dcount = isset($facets['record_type']['document']) ? $facets['record_type']['document'] : 0 ;
+ }
+ }
+ $this->fcount = $fcount;
+ $this->dcount = $dcount;
+ $this->stats = $stats;
+ $this->entries = $entries;
+ $this->facets = $facets;
+ $totalPages = 0;
+ if($limit > 0) {
+ if($searchresult['count'] > $limit) {
+ $totalPages = (int) ($searchresult['count']/$limit);
+ if($searchresult['count']%$limit)
+ $totalPages++;
+ } else {
+ $totalPages = 1;
+ }
+ }
+ $this->total = $searchresult['count'];
+ $this->totalPages = $totalPages;
+ }
+ $searchTime = $this->getTime() - $startTime;
+ $this->searchTime = round($searchTime, 2);
+ }
+ } else {
+ // ---------------- Start searching -----------------------------------------
+ $startTime = $this->getTime();
+ $resArr = $this->dms->search(array(
+ 'query'=>$this->searchparams['query'],
+ 'limit'=>0,
+ 'offset'=>0,
+ 'logicalmode'=>$this->searchparams['mode'],
+ 'searchin'=>$this->searchparams['searchin'],
+ 'startFolder'=>$this->searchparams['startFolder'],
+ 'owner'=>$this->searchparams['ownerobjs'],
+ 'status'=>$this->searchparams['status'],
+ 'mimetype'=>$this->searchparams['mimetype'],
+ 'creationstartdate'=>$this->searchparams['created']['from'],
+ 'creationenddate'=>$this->searchparams['created']['to'],
+ 'modificationstartdate'=>$this->searchparams['modified']['from'],
+ 'modificationenddate'=>$this->searchparams['modified']['to'],
+ 'filesizestart'=>$this->searchparams['filesize']['from'],
+ 'filesizeend'=>$this->searchparams['filesize']['to'],
+ 'categories'=>$this->searchparams['categories'],
+ 'attributes'=>$this->searchparams['attributes'],
+ 'mode'=>$this->searchparams['resultmode'],
+ 'expirationstartdate'=>$this->searchparams['expstartdate'],
+ 'expirationenddate'=>$this->searchparams['expenddate'],
+ 'revisionstartdate'=>$this->searchparams['revisionstartdate'],
+ 'revisionenddate'=>$this->searchparams['revisionenddate'],
+ 'reception'=>$this->searchparams['reception'],
+ 'statusstartdate'=>$this->searchparams['statusstartdate'],
+ 'statusenddate'=>$this->searchparams['statusenddate'],
+ 'orderby'=>$this->searchparams['orderby']
+ ));
+ $this->total = $resArr['totalDocs'] + $resArr['totalFolders'];
+ $searchTime = $this->getTime() - $startTime;
+ $this->searchTime = round($searchTime, 2);
+
+ $entries = array();
+ $fcount = 0;
+ if($resArr['folders']) {
+ foreach ($resArr['folders'] as $entry) {
+ if ($entry->getAccessMode($this->user) >= M_READ) {
+ $entries[] = $entry;
+ $fcount++;
+ }
+ }
+ }
+ $this->fcount = $fcount;
+ $dcount = 0;
+ if($resArr['docs']) {
+ foreach ($resArr['docs'] as $entry) {
+ if ($entry->getAccessMode($this->user) >= M_READ) {
+ if($entry->getLatestContent()) {
+ $entry->verifyLastestContentExpriry();
+ $entries[] = $entry;
+ $dcount++;
+ }
+ }
+ }
+ }
+ $limit = $this->searchparams['limit'];
+ $this->dcount = $dcount;
+ $totalPages = 0;
+ if($limit > 0) {
+ $totalPages = (int) (count($entries)/$limit);
+ if(count($entries)%$limit)
+ $totalPages++;
+ }
+ if($this->searchparams['pageNumber'] != 'all')
+ $this->entries = array_slice($entries, ($this->searchparams['pageNumber']-1)*$limit, $limit);
+ $this->totalPages = $totalPages;
+ $this->facets = array();
+ $this->stats = array();
+ }
+ } /* }}} */
+
+ public function getFolderCount() {
+ return $this->fcount;
+ }
+
+ public function getDocumentCount() {
+ return $this->dcount;
+ }
+
+ public function getTotal() {
+ return $this->total;
+ }
+} /* }}} */
diff --git a/inc/inc.Version.php b/inc/inc.Version.php
index de66bc5f1..7d163a4f2 100644
--- a/inc/inc.Version.php
+++ b/inc/inc.Version.php
@@ -20,7 +20,7 @@
class SeedDMS_Version { /* {{{ */
- const _number = "6.0.30";
+ const _number = "6.0.33";
const _string = "SeedDMS";
function __construct() {
diff --git a/index.php b/index.php
index b6fa64a0d..9c0106cbe 100644
--- a/index.php
+++ b/index.php
@@ -31,6 +31,9 @@
require "inc/inc.Settings.php";
+use DI\ContainerBuilder;
+use Slim\Factory\AppFactory;
+
if(true) {
require_once("inc/inc.Utils.php");
require_once("inc/inc.LogInit.php");
@@ -39,66 +42,51 @@ if(true) {
require_once("inc/inc.Extension.php");
require_once("inc/inc.DBInit.php");
- $c = new \Slim\Container(); //Create Your container
- $c['notFoundHandler'] = function ($c) use ($settings, $dms) {
- return function ($request, $response) use ($c, $settings, $dms) {
- $uri = $request->getUri();
- if($uri->getBasePath())
- $file = $uri->getPath();
- else
- $file = substr($uri->getPath(), 1);
- if(file_exists($file) && is_file($file)) {
- $_SERVER['SCRIPT_FILENAME'] = basename($file);
-// include($file);
- exit;
- }
- if($request->isXhr()) {
- exit;
- }
-// print_r($request->getUri());
-// exit;
- return $c['response']
- ->withStatus(302)
- ->withHeader('Location', isset($settings->_siteDefaultPage) && strlen($settings->_siteDefaultPage)>0 ? $settings->_httpRoot.$settings->_siteDefaultPage : $settings->_httpRoot."out/out.ViewFolder.php");
- };
- };
- $app = new \Slim\App($c);
+ $containerBuilder = new \DI\ContainerBuilder();
+ $c = $containerBuilder->build();
+ AppFactory::setContainer($c);
+ $app = AppFactory::create();
+
+ /* put lots of data into the container, because if slim instanciates
+ * a class by itself (with the help from the DI container), it will
+ * pass the container to the constructor of the instanciated class.
+ */
$container = $app->getContainer();
- $container['dms'] = $dms;
- $container['config'] = $settings;
- $container['conversionmgr'] = $conversionmgr;
- $container['logger'] = $logger;
- $container['fulltextservice'] = $fulltextservice;
- $container['notifier'] = $notifier;
- $container['authenticator'] = $authenticator;
+ $container->set('dms', $dms);
+ $container->set('config', $settings);
+ $container->set('conversionmgr', $conversionmgr);
+ $container->set('logger', $logger);
+ $container->set('fulltextservice', $fulltextservice);
+ $container->set('notifier', $notifier);
+ $container->set('authenticator', $authenticator);
+
+ if(isset($GLOBALS['SEEDDMS_HOOKS']['initDMS'])) {
+ foreach($GLOBALS['SEEDDMS_HOOKS']['initDMS'] as $hookObj) {
+ if (method_exists($hookObj, 'addMiddleware')) {
+ $hookObj->addMiddleware($app);
+ }
+ }
+ }
+
+ $app->addErrorMiddleware(false, true, true);
if(isset($GLOBALS['SEEDDMS_HOOKS']['initDMS'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['initDMS'] as $hookObj) {
if (method_exists($hookObj, 'addRoute')) {
+ // FIXME: pass $app only just like initRestAPI. $app has a container
+ // which contains all other objects
$hookObj->addRoute(array('dms'=>$dms, 'app'=>$app, 'settings'=>$settings, 'conversionmgr'=>$conversionmgr, 'authenticator'=>$authenticator, 'fulltextservice'=>$fulltextservice, 'logger'=>$logger));
-// } else {
-// include("inc/inc.Authentication.php");
-// if (method_exists($hookObj, 'addRouteAfterAuthentication')) {
-// $hookObj->addRouteAfterAuthentication(array('dms'=>$dms, 'app'=>$app, 'settings'=>$settings, 'user'=>$user));
-// }
}
}
}
- /*
- $app->get('/out/[{path:.*}]', function($request, $response, $path = null) use ($app) {
- $uri = $request->getUri();
- if($uri->getBasePath())
- $file = $uri->getPath();
- else
- $file = substr($uri->getPath(), 1);
- if(file_exists($file) && is_file($file)) {
- $_SERVER['SCRIPT_FILENAME'] = basename($file);
- include($file);
- exit;
- }
+ /* Catch all route */
+ $app->get('/{path:.*}', function($request, $response) use ($settings) {
+ return $response
+ ->withHeader('Location', $settings->_httpRoot.'out/out.ViewFolder.php')
+ ->withStatus(302);
+
});
- */
$app->run();
} else {
diff --git a/install/class.Install.php b/install/class.Install.php
index 97db1873b..cb34d1ed9 100644
--- a/install/class.Install.php
+++ b/install/class.Install.php
@@ -406,86 +406,97 @@ echo '' . getMLText("settings_start_install") . '
$this->contentHeading("SeedDMS Installation for version ".$_GET['version']);
$this->contentContainerStart();
-$sqlfile = "update.sql";
-switch($settings->_dbDriver) {
- case 'mysql':
- case 'mysqli':
- case 'mysqlnd':
- $tmp = explode(":", $settings->_dbHostname);
- $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0];
- if(isset($tmp[1]))
- $dsn .= ";port=".$tmp[1];
- break;
- case 'sqlite':
- $dsn = $settings->_dbDriver.":".$settings->_dbDatabase;
- if(file_exists('update-'.$_GET['version'].'/update-sqlite3.sql'))
- $sqlfile = "update-sqlite3.sql";
- break;
- case 'pgsql':
- $tmp = explode(":", $settings->_dbHostname);
- $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0];
- if(isset($tmp[1]))
- $dsn .= ";port=".$tmp[1];
- if(file_exists('update-'.$_GET['version'].'/update-postgres.sql'))
- $sqlfile = "update-postgres.sql";
-}
-$db = new PDO($dsn, $settings->_dbUser, $settings->_dbPass);
-if (!$db) {
- die;
-}
+ $sqlfile = "update.sql";
+ switch($settings->_dbDriver) {
+ case 'mysql':
+ case 'mysqli':
+ case 'mysqlnd':
+ $tmp = explode(":", $settings->_dbHostname);
+ $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0];
+ if(isset($tmp[1]))
+ $dsn .= ";port=".$tmp[1];
+ break;
+ case 'sqlite':
+ $dsn = $settings->_dbDriver.":".$settings->_dbDatabase;
+ if(file_exists('update-'.$_GET['version'].'/update-sqlite3.sql'))
+ $sqlfile = "update-sqlite3.sql";
+ break;
+ case 'pgsql':
+ $tmp = explode(":", $settings->_dbHostname);
+ $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0];
+ if(isset($tmp[1]))
+ $dsn .= ";port=".$tmp[1];
+ if(file_exists('update-'.$_GET['version'].'/update-postgres.sql'))
+ $sqlfile = "update-postgres.sql";
+ }
+ $db = new PDO($dsn, $settings->_dbUser, $settings->_dbPass);
+ if (!$db) {
+ die;
+ }
-$errorMsg = '';
-$res = $db->query('select * from tblVersion');
-$recs = $res->fetchAll(PDO::FETCH_ASSOC);
-if(!empty($recs)) {
- $rec = $recs[0];
- if($_GET['version'] > $rec['major'].'.'.$rec['minor'].'.'.$rec['subminor']) {
+ $errorMsg = '';
+ switch($settings->_dbDriver) {
+ case 'mysql':
+ case 'mysqli':
+ case 'mysqlnd':
+ case 'sqlite':
+ $sql = 'select * from `tblVersion`';
+ break;
+ case 'pgsql':
+ $sql = 'select * from "tblVersion"';
+ break;
+ }
+ $res = $db->query($sql);
+ $recs = $res->fetchAll(PDO::FETCH_ASSOC);
+ if(!empty($recs)) {
+ $rec = $recs[0];
+ if($_GET['version'] > $rec['major'].'.'.$rec['minor'].'.'.$rec['subminor']) {
- if(file_exists('update-'.$_GET['version'].'/'.$sqlfile)) {
- $queries = file_get_contents('update-'.$_GET['version'].'/'.$sqlfile);
- $queries = explode(";", $queries);
+ if(file_exists('update-'.$_GET['version'].'/'.$sqlfile)) {
+ $queries = file_get_contents('update-'.$_GET['version'].'/'.$sqlfile);
+ $queries = explode(";", $queries);
- // execute queries
- if($queries) {
- echo "
Updating database schema
";
- foreach($queries as $query) {
- $query = trim($query);
- if (!empty($query)) {
- echo $query."
";
- if(false === $db->exec($query)) {
- $e = $db->ErrorInfo();
- $errorMsg .= $e[2] . "
";
+ // execute queries
+ if($queries) {
+ echo "Updating database schema
";
+ foreach($queries as $query) {
+ $query = trim($query);
+ if (!empty($query)) {
+ echo $query."
";
+ if(false === $db->exec($query)) {
+ $e = $db->ErrorInfo();
+ $errorMsg .= $e[2] . "
";
+ }
+ }
}
}
+ } else {
+ echo "SQL file for update missing!
";
}
+ } else {
+ echo "Database schema already up to date.
";
}
+
+
+ if(!$errorMsg) {
+ if(file_exists('update-'.$_GET['version'].'/update.php')) {
+ echo "Running update script
";
+ include('update-'.$_GET['version'].'/update.php');
+ }
+ } else {
+ echo "Error Messages
";
+ echo $errorMsg;
+ }
+ echo "Go back to installation and recheck.
";
} else {
- echo "SQL file for update missing!
";
+ echo "Could not determine database schema version.
";
}
- } else {
- echo "Database schema already up to date.
";
- }
+ $db = null;
-
- if(!$errorMsg) {
- if(file_exists('update-'.$_GET['version'].'/update.php')) {
- echo "Running update script
";
- include('update-'.$_GET['version'].'/update.php');
- }
- } else {
- echo "Error Messages
";
- echo $errorMsg;
- }
- echo "Go back to installation and recheck.
";
-} else {
- echo "Could not determine database schema version.
";
-}
-$db = null;
-
-// just remove info for web page installation
-$settings->_printDisclaimer = false;
-$settings->_footNote = false;
-// end of the page
+ // just remove info for web page installation
+ $settings->_printDisclaimer = false;
+ $settings->_footNote = false;
+ // end of the page
$this->contentContainerEnd();
$this->contentEnd();
$this->htmlEndPage();
diff --git a/install/create_tables-innodb.sql b/install/create_tables-innodb.sql
index 541b95f42..7e9e1e720 100644
--- a/install/create_tables-innodb.sql
+++ b/install/create_tables-innodb.sql
@@ -100,7 +100,7 @@ CREATE TABLE `tblUserSubstitutes` (
PRIMARY KEY (`id`),
UNIQUE KEY `user` (`user`,`substitute`),
CONSTRAINT `tblUserSubstitutes_user` FOREIGN KEY (`user`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE,
- CONSTRAINT `tblUserSubstitutes_substitute` FOREIGN KEY (`user`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
+ CONSTRAINT `tblUserSubstitutes_substitute` FOREIGN KEY (`substitute`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
);
-- --------------------------------------------------------
diff --git a/install/update-6.0.0/update.sql b/install/update-6.0.0/update.sql
index 74d8eb548..d1f26e99a 100644
--- a/install/update-6.0.0/update.sql
+++ b/install/update-6.0.0/update.sql
@@ -41,7 +41,7 @@ CREATE TABLE `tblUserSubstitutes` (
PRIMARY KEY (`id`),
UNIQUE (`user`, `substitute`),
CONSTRAINT `tblUserSubstitutes_user` FOREIGN KEY (`user`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE,
- CONSTRAINT `tblUserSubstitutes_substitute` FOREIGN KEY (`user`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
+ CONSTRAINT `tblUserSubstitutes_substitute` FOREIGN KEY (`substitute`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblDocumentCheckOuts` (
diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc
index f39d21d80..1196f2618 100644
--- a/languages/ar_EG/lang.inc
+++ b/languages/ar_EG/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'توثيق ذو عاملين',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'معلومات عن توثيق ذو عاملين',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -553,6 +554,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -683,6 +686,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => 'إرشيف أطول',
'extension_changelog' => 'سجل التعديلات',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'تحميل الإضافات',
@@ -1137,6 +1142,7 @@ URL: [url]',
'no_groups' => 'لايوجد مجموعات',
'no_group_members' => 'هذه المجموعة لايوجد بها اعضاء',
'no_linked_files' => 'لايوجد ملفات مرتبطة',
+'no_mimetype' => '',
'no_previous_versions' => 'لايوجد اصدارات سابقة',
'no_receipt_needed' => 'لا يحتاج لأي مستلم',
'no_review_needed' => 'لايوجد مراجعات في الانتظار',
@@ -1282,7 +1288,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - تم ازالة مسار العمل من اصدار المستند',
'removeFolderFromDropFolder' => 'إزالة مجلد من إسقاط لائحة',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'ازالة الملفات المختارة',
'remove_review_log' => '',
'remove_task' => '',
@@ -1464,6 +1472,7 @@ URL: [url]',
'select_category' => 'اضغط لاختيار قسم',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'اختيار مجموعة',
'select_groups' => 'اضغط لاختيار مجموعة',
'select_grp_approvers' => 'اضغط لاختيار مجموعة الموافقون',
@@ -1511,7 +1520,9 @@ URL: [url]',
'service_name' => '',
'sessions' => 'صفوف',
'setDateFromFile' => 'وضع تاريخ من الملف',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'تحديد التاريخ من المجلد',
+'setDateFromFolder_desc' => '',
'settings' => 'الإعدادات',
'settings_activate_module' => 'Activate module',
'settings_activate_php_extension' => 'Activate PHP extension',
@@ -1609,6 +1620,8 @@ URL: [url]',
'settings_delete_install_folder' => 'مسح مثبت المجلد',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'تعطيل التحرير الذاتي',
'settings_disableSelfEdit_desc' => 'تعطيل التحرير الذاتي',
'settings_disable_install' => 'تعطيل التثبيت',
@@ -1674,6 +1687,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => 'تمكين تحميل الملفات الكبيرة',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'تمكين مهام القائمة',
'settings_enableMenuTasks_desc' => 'تمكين مهام القائمة',
'settings_enableMenuTransmittals' => '',
@@ -1733,6 +1748,8 @@ URL: [url]',
'settings_encryptionKey' => 'مفتاح التشفير',
'settings_encryptionKey_desc' => 'مفتاح التشفير',
'settings_error' => 'خطأ',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'قم بتوسيع شجرة المجلد',
'settings_expandFolderTree_desc' => 'قم بتوسيع شجرة المجلد',
'settings_expandFolderTree_val0' => 'قم بتوسيع شجرة المجلد قيمة0',
@@ -1791,6 +1808,8 @@ URL: [url]',
'settings_logFileEnable_desc' => 'تمكين سجل الملف',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'سجل ملف التناوب',
'settings_logFileRotation_desc' => 'سجل ملف التناوب',
'settings_loginFailure' => 'فشل في تسجيل الدخول',
@@ -1988,6 +2007,7 @@ URL: [url]',
'sign_out' => 'تسجيل الخروج',
'sign_out_user' => 'تسجيل خروج مستخدم',
'site_brand' => 'مجلس النواب اللبناني',
+'skip_default_export_cols' => '',
'sk_SK' => 'السلوفاكية',
'sort_by_date' => 'رتب حسب التاريخ',
'sort_by_expiration_date' => '',
@@ -2117,6 +2137,7 @@ URL: [url]',
'status_revision_sleeping' => 'مراجعة الوضع في حالة النوم',
'status_revisor_removed' => 'تم ازالة حالة المراجع',
'status_unknown' => 'مجهول',
+'storage' => '',
'storage_size' => 'حجم التخزين',
'subfolder_duplicate_name' => 'اسم مجلد فرعي مكرر',
'submit_2_fact_auth' => 'قدم ثنائي عامل التوثيق',
diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc
index f911b0e82..bd55ca88c 100644
--- a/languages/bg_BG/lang.inc
+++ b/languages/bg_BG/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -491,6 +492,8 @@ $text = array(
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -617,6 +620,8 @@ $text = array(
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => '',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => '',
@@ -1015,6 +1020,7 @@ $text = array(
'no_groups' => 'Няма групи',
'no_group_members' => 'Групата няма членове',
'no_linked_files' => 'Няма свързани файлове',
+'no_mimetype' => '',
'no_previous_versions' => 'Няма други версии',
'no_receipt_needed' => '',
'no_review_needed' => 'Рецензия не е нужна',
@@ -1151,7 +1157,9 @@ $text = array(
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '',
'removeFolderFromDropFolder' => '',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => '',
'remove_review_log' => '',
'remove_task' => '',
@@ -1306,6 +1314,7 @@ $text = array(
'select_category' => 'Изберете категория',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => '',
'select_groups' => 'Кликни да избереш групи',
'select_grp_approvers' => 'Кликни да избереш група утвърждаващи',
@@ -1353,7 +1362,9 @@ $text = array(
'service_name' => '',
'sessions' => '',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Настройки',
'settings_activate_module' => 'Активирай модул',
'settings_activate_php_extension' => 'Активирай разширение на PHP',
@@ -1451,6 +1462,8 @@ $text = array(
'settings_delete_install_folder' => 'Изтрийте ENABLE_INSTALL_TOOL в папка конфигурация, за да започнете да използвате системата',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Изключи собствено редактиране',
'settings_disableSelfEdit_desc' => 'Ако е включено, потребителите няма да могат да редактират своята информация',
'settings_disable_install' => 'Изтрийте ENABLE_INSTALL_TOOL ако е возможно',
@@ -1516,6 +1529,8 @@ $text = array(
'settings_enableLargeFileUpload_desc' => 'Ако е включено, качване на файлове е дустъпно и чрез джава-аплет, именован jumploader, без лимит за размер на файла. Това също ще позволи да се качват няколко файла наведнъж.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => '',
'settings_enableMenuTasks_desc' => '',
'settings_enableMenuTransmittals' => '',
@@ -1575,6 +1590,8 @@ $text = array(
'settings_encryptionKey' => 'Кодиращ ключ',
'settings_encryptionKey_desc' => 'Този стринг се използва за създаване на уникален идентификатор, който добавен като невидимо поле към формуляр, предотвратява CSRF атаки.',
'settings_error' => 'Грешка',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Разгърни дървото с папките',
'settings_expandFolderTree_desc' => 'Разгръщане на дървото с папките',
'settings_expandFolderTree_val0' => 'започвайки от сгънато дърво',
@@ -1633,6 +1650,8 @@ $text = array(
'settings_logFileEnable_desc' => 'Включи/изключи лог',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Превъртане на лога',
'settings_logFileRotation_desc' => 'Превъртане на лога',
'settings_loginFailure' => 'Неуспешно влизане',
@@ -1830,6 +1849,7 @@ $text = array(
'sign_out' => 'изход',
'sign_out_user' => '',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Словашки',
'sort_by_date' => 'Сортирай по дата"',
'sort_by_expiration_date' => '',
@@ -1959,6 +1979,7 @@ $text = array(
'status_revision_sleeping' => '',
'status_revisor_removed' => '',
'status_unknown' => 'Неизвестен',
+'storage' => '',
'storage_size' => 'Размер на хранилището',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc
index 0dcb534e3..034b38f9f 100644
--- a/languages/ca_ES/lang.inc
+++ b/languages/ca_ES/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -496,6 +497,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -622,6 +625,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => '',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => '',
@@ -1020,6 +1025,7 @@ URL: [url]',
'no_groups' => 'No hi ha grups',
'no_group_members' => 'Aquest grup no té membres',
'no_linked_files' => 'No hi ha fitxers enllaçats',
+'no_mimetype' => '',
'no_previous_versions' => 'No s\'han trobat altres versions',
'no_receipt_needed' => '',
'no_review_needed' => 'No hi ha revisions pendents.',
@@ -1156,7 +1162,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '',
'removeFolderFromDropFolder' => 'Esborrar carpeta després de la importació',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => '',
'remove_review_log' => '',
'remove_task' => '',
@@ -1311,6 +1319,7 @@ URL: [url]',
'select_category' => 'Prem per seleccionar la categoria',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Seleccionar grup',
'select_groups' => '',
'select_grp_approvers' => '',
@@ -1358,7 +1367,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Settings',
'settings_activate_module' => 'Activate module',
'settings_activate_php_extension' => 'Activate PHP extension',
@@ -1456,6 +1467,8 @@ URL: [url]',
'settings_delete_install_folder' => '',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => '',
'settings_disableSelfEdit_desc' => '',
'settings_disable_install' => '',
@@ -1521,6 +1534,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => '',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => '',
'settings_enableMenuTasks_desc' => '',
'settings_enableMenuTransmittals' => '',
@@ -1580,6 +1595,8 @@ URL: [url]',
'settings_encryptionKey' => '',
'settings_encryptionKey_desc' => '',
'settings_error' => 'Error',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => '',
'settings_expandFolderTree_desc' => '',
'settings_expandFolderTree_val0' => '',
@@ -1638,6 +1655,8 @@ URL: [url]',
'settings_logFileEnable_desc' => 'Enable/disable log file',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Log File Rotation',
'settings_logFileRotation_desc' => '',
'settings_loginFailure' => '',
@@ -1835,6 +1854,7 @@ URL: [url]',
'sign_out' => 'desconnectar',
'sign_out_user' => '',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Eslovac',
'sort_by_date' => '',
'sort_by_expiration_date' => '',
@@ -1964,6 +1984,7 @@ URL: [url]',
'status_revision_sleeping' => '',
'status_revisor_removed' => '',
'status_unknown' => 'Desconegut',
+'storage' => '',
'storage_size' => 'Storage size',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc
index 4c393dada..774d75d95 100644
--- a/languages/cs_CZ/lang.inc
+++ b/languages/cs_CZ/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'dvoufaktorové ověření',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'Tento systém vyžaduje dvoufaktorové ověření. Na svém mobilním telefonu budete potřebovat Google Authenticator. Níže vidíte dva QR kódy. Správný je vaše současné tajemství. Vlevo můžete nastavit nové tajemství. Pokud nastavíte nové tajemství, ujistěte se, že jste jej znovu otestovali pomocí služby Google Authenticator.',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -577,6 +578,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -707,6 +710,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => 'Rozšíření',
'extension_changelog' => 'Changelog',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Načítání rozšíření',
@@ -1168,6 +1173,7 @@ URL: [url]',
'no_groups' => 'Žádné skupiny',
'no_group_members' => 'Tato skupina nemá žádné členy',
'no_linked_files' => 'Žádné propojené soubory',
+'no_mimetype' => '',
'no_previous_versions' => 'Nebyly nalezeny žádné jiné verze',
'no_receipt_needed' => 'Nejsou žádné dokumenty, které by vyžadovaly potvrzení o přijetí.',
'no_review_needed' => 'Nic nečeká k recenzi.',
@@ -1328,7 +1334,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Odstraněno workflow z verze dokumentu',
'removeFolderFromDropFolder' => 'Odstranit složku po nahrání',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Odstranit označené soubory',
'remove_review_log' => '',
'remove_task' => '',
@@ -1531,6 +1539,7 @@ URL: [url]',
'select_category' => 'Kliknutím vybrat kategorii',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Vybrat skupinu',
'select_groups' => 'Kliknutím vybrat skupiny',
'select_grp_approvers' => 'Kliknutím vybrat skupinu schvalovatele',
@@ -1583,7 +1592,9 @@ Jméno: [username]
'service_name' => '',
'sessions' => 'seance',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Nastavení',
'settings_activate_module' => 'Aktivovat modul',
'settings_activate_php_extension' => 'Aktivovat PHP extension',
@@ -1681,6 +1692,8 @@ Jméno: [username]
'settings_delete_install_folder' => 'Chcete-li použít SeedDMS, musíte v konfiguračním adresáři odstranit soubor ENABLE_INSTALL_TOOL',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Zakázat vlastní úpravy',
'settings_disableSelfEdit_desc' => 'Je-li zaškrtnuto, uživatel nemůže upravit svůj vlastní profil',
'settings_disable_install' => 'Pokud je to možné, smažte soubor ENABLE_INSTALL_TOOL',
@@ -1746,6 +1759,8 @@ Jméno: [username]
'settings_enableLargeFileUpload_desc' => 'Je-li nastaveno, nahrávání souborů je také k dispozici prostřednictvím java appletu s názvem jumploader bez omezení velikosti souboru nastaveného prohlížečem. Umožňuje také nahrát několik souborů v jednom kroku.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Povolit seznam úkolů v nabídce',
'settings_enableMenuTasks_desc' => 'Aktivovat / Zakázat položku nabídky, která obsahuje všechny úkoly pro uživatele. Obsahuje dokumenty, které musí být přezkoumány, schváleny atd.',
'settings_enableMenuTransmittals' => '',
@@ -1805,6 +1820,8 @@ Jméno: [username]
'settings_encryptionKey' => 'Šifrovací klíč',
'settings_encryptionKey_desc' => 'Tento řetězec se používá k vytvoření jedinečného identifikátoru, který je přidán jako skryté pole formuláře, aby se zabránilo útokům CSRF.',
'settings_error' => 'Chyba',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Rozbalit strom složek',
'settings_expandFolderTree_desc' => 'Rozbalení stromu složek',
'settings_expandFolderTree_val0' => 'začít se skrytým stromem',
@@ -1863,6 +1880,8 @@ Jméno: [username]
'settings_logFileEnable_desc' => 'Povolení / zakázání souboru protokolu',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Otočení souboru protokolu',
'settings_logFileRotation_desc' => 'Otáčení souboru protokolu',
'settings_loginFailure' => 'Přihlášení selhalo',
@@ -2060,6 +2079,7 @@ Jméno: [username]
'sign_out' => 'Odhlásit',
'sign_out_user' => 'Odhlášení uživatele',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovenština',
'sort_by_date' => '',
'sort_by_expiration_date' => '',
@@ -2189,6 +2209,7 @@ Jméno: [username]
'status_revision_sleeping' => 'Probíhá',
'status_revisor_removed' => 'Kontrolor odstraněn ze seznamu',
'status_unknown' => 'Neznámý',
+'storage' => '',
'storage_size' => 'Velikost úložiště',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => 'Poslán tajný kód',
diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc
index f6ce149df..9c2f2e6af 100644
--- a/languages/de_DE/lang.inc
+++ b/languages/de_DE/lang.inc
@@ -19,10 +19,11 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
-// Translators: Admin (3418), dgrutsch (22)
+// Translators: Admin (3444), dgrutsch (22)
$text = array(
'2_factor_auth' => '2-Faktor Authentifizierung',
+'2_factor_auth_code' => '2ter Faktor',
'2_factor_auth_info' => 'Dieses System erfordert 2-Faktor-Authentifikation. Dazu brauchen Sie einen Authenticator auf Ihrem Mobiltelefon. Unten sehen Sie zwei QR-Codes. Der rechte Code beinhaltet Ihren aktuellen geheimen Schlüssel. Auf der linken Seite wird ein neuer Schlüssel angezeigt. Wenn Sie den neuen Schlüssel speichern, dann stellen Sie zuvor sicher, dass sie ihn mit Ihrem bevorzugten Authenticator (z.B. andOTP) zuvor eingescant haben.',
'2_fact_auth_current_secret' => 'Aktuelles Geheimnis',
'2_fact_auth_new_secret' => 'Neues Geheimnis',
@@ -408,7 +409,7 @@ URL: [url]
',
'current_version' => 'Aktuelle Version',
'daily' => 'täglich',
'dashboard' => 'Übersicht',
-'databasesearch' => 'Datenbanksuche',
+'databasesearch' => 'Datenbank',
'database_schema_version' => 'Version des Datenbankschemas',
'data_loading' => 'Bitte warten, bis die Daten geladen sind …',
'date' => 'Datum',
@@ -711,6 +712,8 @@ URL: [url]',
'download_header_document_name' => 'Dokumentenname',
'download_header_document_no' => 'Dokumenten-Nr.',
'download_header_filename' => 'Dateiname',
+'download_header_folder_name' => 'Ordnername',
+'download_header_folder_no' => 'Ordner-ID',
'download_header_internal_version' => 'Int. Version',
'download_header_reviewer' => 'Prüfer',
'download_header_review_comment' => 'Prüfkommentar',
@@ -847,6 +850,8 @@ URL: [url]',
'export_user_list_csv' => 'Exportiere Benutzer als CSV-Datei',
'extension_archive' => 'Erweiterung',
'extension_changelog' => 'Versionshistorie',
+'extension_config' => 'Einstellungen',
+'extension_info' => 'Erweiterungen',
'extension_is_off_now' => 'Erweiterung ist ausgeschaltet',
'extension_is_on_now' => 'Erweiterung ist eingeschaltet',
'extension_loading' => 'Lade Erweiterungen ...',
@@ -862,7 +867,7 @@ URL: [url]',
'extension_readme' => 'Readme',
'extension_toggle_error' => 'Konnte Erweiterung nicht aus/einschalten',
'extension_version_list' => 'Versionen',
-'facetfullsearch' => 'Volltextsuche (Facetten)',
+'facetfullsearch' => 'Volltext (Facetten)',
'february' => 'Februar',
'file' => 'Datei',
'files' => 'Dateien',
@@ -1043,7 +1048,7 @@ URL: [url]',
'friday_abbr' => 'Fr',
'from' => 'von',
'fr_FR' => 'Französisch',
-'fullsearch' => 'Volltextsuche',
+'fullsearch' => 'Volltext',
'fullsearch_hint' => 'Volltext-Index benutzen',
'fulltextsearch_disabled' => 'Volltext-Index ist ausgeschaltet',
'fulltext_converters' => 'Index Dokumentenumwandlung',
@@ -1401,6 +1406,7 @@ URL: [url]',
'no_groups' => 'keine Gruppen',
'no_group_members' => 'Diese Gruppe hat keine Mitglieder',
'no_linked_files' => 'Keine verknüpften Dokumente',
+'no_mimetype' => 'Kein Mime-Type',
'no_previous_versions' => 'Keine anderen Versionen gefunden',
'no_receipt_needed' => 'Es gibt zur Zeit keine Dokumente, die eine Empfangsbestätigung erfordern.',
'no_review_needed' => 'Keine offenen Prüfungen.',
@@ -1617,7 +1623,9 @@ Benutzer: [username]
URL: [url]',
'removed_workflow_email_subject' => '[sitename]: [name] - Workflow von Dokumentenversion',
'removeFolderFromDropFolder' => 'Ordner nach Import entfernen',
+'removeFolderFromDropFolder_desc' => 'Schalten Sie dies ein, um den importierten Ordner im Ablageordner auf der Festplatte zu löschen.',
'remove_approval_log' => 'Einzelne Freigabe entfernen',
+'remove_from_clipboard' => 'Aus Zwischenablage entfernen',
'remove_marked_files' => 'Markierte Dateien löschen',
'remove_review_log' => 'Einzelne Prüfung entfernen',
'remove_task' => 'Task entfernen',
@@ -1920,6 +1928,7 @@ URL: [url]',
'select_category' => 'Klicken zur Auswahl einer Kategorie',
'select_created' => 'Klicken zur Auswahl des Erstellungsdatums',
'select_documents_for_process' => 'Dokumente auswählen',
+'select_folder' => 'Ordner auswählen',
'select_group' => 'Gruppe auswählen',
'select_groups' => 'Klicken zur Auswahl einer Gruppe',
'select_grp_approvers' => 'Klicken zur Auswahl einer Freigabegruppe',
@@ -1974,7 +1983,9 @@ Sollten Sie kein Passwort bekommen haben, dann nutzen Sie bitte die Passwort-Ver
'service_name' => 'Service-Name',
'sessions' => 'Benutzer Online',
'setDateFromFile' => 'Datum von importierter Datei übernehmen',
+'setDateFromFile_desc' => 'Übernimmt das Datum der zu importierenden Datei als Datum des Dokuments in SeedDMS',
'setDateFromFolder' => 'Datum von importierten Verzeichnis übernehmen',
+'setDateFromFolder_desc' => 'Übernimmt das Datum des zu importierenden Ordners als Datum des Ordners in SeedDMS',
'settings' => 'Einstellungen',
'settings_activate_module' => 'Modul aktivieren',
'settings_activate_php_extension' => 'PHP-Erweiterung aktivieren',
@@ -2072,6 +2083,8 @@ Sollten Sie kein Passwort bekommen haben, dann nutzen Sie bitte die Passwort-Ver
'settings_delete_install_folder' => 'Um SeedDMS nutzen zu können, müssen Sie die Datei ENABLE_INSTALL_TOOL aus dem Konfigurationsverzeichnis löschen.',
'settings_disableChangePassword' => 'Kein Ändern des eigenen Passworts',
'settings_disableChangePassword_desc' => 'Anwählen, um das Ändern des eigenen Passworts zu unterbinden. Schalten Sie dies ein, wenn LDAP-Authentifizierung verwendet wird. Es verhindert, dass Benutzer ein Passwort in der Datenbank setzen und damit die LDAP-Authentifizierung umgehen.',
+'settings_disableReceiptComment' => 'Kommentar für Empfangsbestätigung ausschalten',
+'settings_disableReceiptComment_desc' => 'Wenn Sie dies einschalten wird bei der Empfangsbestätigung kein Kommentar abgefragt.',
'settings_disableSelfEdit' => 'Kein Ändern des eigenen Profils',
'settings_disableSelfEdit_desc' => 'Anwählen, um das Ändern des eigenen Profiles zu verhindern.',
'settings_disable_install' => 'Lösche ENABLE_INSTALL_TOOL wenn möglich',
@@ -2137,6 +2150,8 @@ Sollten Sie kein Passwort bekommen haben, dann nutzen Sie bitte die Passwort-Ver
'settings_enableLargeFileUpload_desc' => 'Wenn dies gesetzt ist, dann ist ebenfalls der Upload von Dokumenten durch ein java applet mit Namen \'jumploader\' ohne Begrenzung der maximalen Dateigröße möglich. Auch das Hochladen mehrerer Dokumente in einem Schritt wird dadurch ermöglicht. Das Einschalten bewirkt, dass keine http only Cookies mehr gesetzt werden.',
'settings_enableLoginByEmail' => 'Anmeldung mit E-Mail erlauben',
'settings_enableLoginByEmail_desc' => 'Wenn eingeschaltet, dann ist auch die Anmeldung mit der E-Mail-Adresse möglich. Die Anmeldung mit dem Benutzername bleibt weiterhin möglich. Diese Einstellung wird möglicherweise nicht von allen Authentifizierungsmethoden berücksichtigt. Da die E-Mail nicht eindeutig ist, kann die Identifikation fehlschagen, auch wenn das Password aus Sicht des anmeldenen Benutzers korrekt ist.',
+'settings_enableMemcached' => 'Memcached verwenden',
+'settings_enableMemcached_desc' => 'Verwendet intern memcached, um einige Datenbankoperationen zu beschleunigen und sollte nicht im Produktionsbetrieb eingeschaltet werden.',
'settings_enableMenuTasks' => 'Aufgabenliste im Menü',
'settings_enableMenuTasks_desc' => 'Ein-/Ausschalten des Menüeintrags, der anstehenden Aufgaben des Benutzers enthält. Diese Liste beinhaltet Dokumente die geprüft, freigegeben, usw. werden müssen.',
'settings_enableMenuTransmittals' => 'Dokumentenlisten im Menü',
@@ -2196,6 +2211,8 @@ Sollten Sie kein Passwort bekommen haben, dann nutzen Sie bitte die Passwort-Ver
'settings_encryptionKey' => 'Verschlüsselungs-Sequenz',
'settings_encryptionKey_desc' => 'Diese Zeichenkette wird verwendet um eine eindeutige Kennung zu erzeugen, die als verstecktes Feld in einem Formular untergebracht wird. Sie dient zur Verhinderung von CSRF-Attacken.',
'settings_error' => 'Fehler',
+'settings_excludeFoldersDashboard' => 'Ordner nicht für das Dashboard berücksichtigen',
+'settings_excludeFoldersDashboard_desc' => 'Diese Ordner werden bei der Ausgabe der Dokumente auf dem Dashboard nicht berücksichtigt. Das kann z.B. für archivierte Dokumente oder Dokumente im Mülleimer sinnvoll sein.',
'settings_expandFolderTree' => 'Dokumenten-Baum',
'settings_expandFolderTree_desc' => 'Auswählen, wie der Dokumenten-Baum nach der Anmeldung angezeigt wird.',
'settings_expandFolderTree_val0' => 'versteckt',
@@ -2254,6 +2271,8 @@ Sollten Sie kein Passwort bekommen haben, dann nutzen Sie bitte die Passwort-Ver
'settings_logFileEnable_desc' => 'Anwählen, um alle Aktionen in einer Log-Datei im Datenverzeichnis zu speichern.',
'settings_logFileMaxLevel' => 'Maximal Log-Level',
'settings_logFileMaxLevel_desc' => 'Alle Meldungen bis zu diesem Level werden protokolliert',
+'settings_logFileRestApiMaxLevel' => 'Rest Api maximal Log-Level',
+'settings_logFileRestApiMaxLevel_desc' => 'Alle Meldungen der Rest Api bis zu diesem Level werden protokolliert',
'settings_logFileRotation' => 'Rotation der Log-Datei',
'settings_logFileRotation_desc' => 'Zeitraum nachdem eine Rotation der Log-Datei durchgeführt wird',
'settings_loginFailure' => 'Anmeldefehlversuche',
@@ -2451,6 +2470,7 @@ Sollten Sie kein Passwort bekommen haben, dann nutzen Sie bitte die Passwort-Ver
'sign_out' => 'Abmelden',
'sign_out_user' => 'Benutzer abmelden',
'site_brand' => '',
+'skip_default_export_cols' => 'Keine voreingestellten Spalten',
'sk_SK' => 'Slovakisch',
'sort_by_date' => 'Nach Datum sortieren',
'sort_by_expiration_date' => 'Nach Ablaufdatum sortieren',
@@ -2580,6 +2600,7 @@ Sollten Sie kein Passwort bekommen haben, dann nutzen Sie bitte die Passwort-Ver
'status_revision_sleeping' => 'wartend',
'status_revisor_removed' => 'Wiederholungsprüfer von Liste entfernt',
'status_unknown' => 'unbekannt',
+'storage' => 'Speicherung',
'storage_size' => 'Speicherverbrauch',
'subfolder_duplicate_name' => 'Doppelter Unterordnername',
'submit_2_fact_auth' => 'Schlüssel speichern',
diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc
index ab6d39068..52bc791b0 100644
--- a/languages/el_GR/lang.inc
+++ b/languages/el_GR/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -491,6 +492,8 @@ $text = array(
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -617,6 +620,8 @@ $text = array(
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => '',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => '',
@@ -1026,6 +1031,7 @@ URL: [url]',
'no_groups' => '',
'no_group_members' => '',
'no_linked_files' => 'δεν υπάρχουν συνδεδεμένα αρχεία',
+'no_mimetype' => '',
'no_previous_versions' => '',
'no_receipt_needed' => '',
'no_review_needed' => '',
@@ -1162,7 +1168,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '',
'removeFolderFromDropFolder' => '',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => '',
'remove_review_log' => '',
'remove_task' => '',
@@ -1317,6 +1325,7 @@ URL: [url]',
'select_category' => 'Επιλογή κατηγορίας',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Επιλογή ομάδας',
'select_groups' => '',
'select_grp_approvers' => '',
@@ -1364,7 +1373,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Ρυθμίσεις',
'settings_activate_module' => '',
'settings_activate_php_extension' => '',
@@ -1462,6 +1473,8 @@ URL: [url]',
'settings_delete_install_folder' => '',
'settings_disableChangePassword' => 'Disable changing password',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => '',
'settings_disableSelfEdit_desc' => '',
'settings_disable_install' => '',
@@ -1527,6 +1540,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => '',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => '',
'settings_enableMenuTasks_desc' => '',
'settings_enableMenuTransmittals' => '',
@@ -1586,6 +1601,8 @@ URL: [url]',
'settings_encryptionKey' => '',
'settings_encryptionKey_desc' => '',
'settings_error' => '',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => '',
'settings_expandFolderTree_desc' => '',
'settings_expandFolderTree_val0' => '',
@@ -1644,6 +1661,8 @@ URL: [url]',
'settings_logFileEnable_desc' => '',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => '',
'settings_logFileRotation_desc' => '',
'settings_loginFailure' => '',
@@ -1841,6 +1860,7 @@ URL: [url]',
'sign_out' => 'Αποσύνδεση',
'sign_out_user' => 'Αποσύνδεση χρήστη',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Σλοβάκικα',
'sort_by_date' => '',
'sort_by_expiration_date' => '',
@@ -1970,6 +1990,7 @@ URL: [url]',
'status_revision_sleeping' => '',
'status_revisor_removed' => '',
'status_unknown' => '',
+'storage' => '',
'storage_size' => '',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc
index 2a0a078ab..f458a7943 100644
--- a/languages/en_GB/lang.inc
+++ b/languages/en_GB/lang.inc
@@ -19,10 +19,11 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
-// Translators: Admin (2517), archonwang (3), dgrutsch (9), netixw (14)
+// Translators: Admin (2547), archonwang (3), dgrutsch (9), netixw (14)
$text = array(
'2_factor_auth' => '2-factor authentication',
+'2_factor_auth_code' => '2nd factor',
'2_factor_auth_info' => 'This system enforces 2 factor authentication. You will need an Authenticator on your mobile phone. Below you see two QR codes. The right one is your current secret. On the left you can set a new secret. If you set a new secret make sure to rescan it with your preffered authenticator, e.g. andOTP.',
'2_fact_auth_current_secret' => 'Current secret',
'2_fact_auth_new_secret' => 'New secret',
@@ -408,7 +409,7 @@ URL: [url]',
'current_version' => 'Current version',
'daily' => 'Daily',
'dashboard' => 'Dashboard',
-'databasesearch' => 'Database search',
+'databasesearch' => 'Database',
'database_schema_version' => 'Version of database schema',
'data_loading' => 'Please wait, until the data is loaded …',
'date' => 'Date',
@@ -466,7 +467,7 @@ URL: [url]',
'documents_user_no_reception' => 'Documents without reception',
'documents_user_obsolete' => 'Obsolete documents',
'documents_user_reception' => 'Documents awaiting reception',
-'documents_user_rejected' => 'Rejected documents',
+'documents_user_rejected' => 'Documents rejected',
'documents_user_requiring_attention' => 'Documents owned by you that require attention',
'documents_with_notification' => 'Documents with notification',
'document_access_permission_changed_email' => 'Permission changed',
@@ -711,6 +712,8 @@ URL: [url]',
'download_header_document_name' => 'Document name',
'download_header_document_no' => 'Document no',
'download_header_filename' => 'File name',
+'download_header_folder_name' => 'Folder name',
+'download_header_folder_no' => 'Folder no.',
'download_header_internal_version' => 'Int. version',
'download_header_reviewer' => 'Reviewer',
'download_header_review_comment' => 'Review comment',
@@ -847,6 +850,8 @@ URL: [url]',
'export_user_list_csv' => 'Export users as CSV',
'extension_archive' => 'Extension',
'extension_changelog' => 'Changelog',
+'extension_config' => 'Settings',
+'extension_info' => 'Extensions',
'extension_is_off_now' => 'Extension off now',
'extension_is_on_now' => 'Extension now enabled',
'extension_loading' => 'Loading extensions ...',
@@ -862,7 +867,7 @@ URL: [url]',
'extension_readme' => 'Readme',
'extension_toggle_error' => 'Could not toggle extension',
'extension_version_list' => 'Versions',
-'facetfullsearch' => 'Full text search (facetts)',
+'facetfullsearch' => 'Full text (facetts)',
'february' => 'February',
'file' => 'File',
'files' => 'Files',
@@ -872,7 +877,7 @@ URL: [url]',
'files_loading' => 'Please wait, until the list of files is loaded …',
'filetype' => 'File type',
'filter_for_documents' => 'Additional filter for documents',
-'filter_for_documents_and_folders' => 'Additional filter for folder and documents',
+'filter_for_documents_and_folders' => 'Additional filter for folders and documents',
'filter_for_folders' => 'Additional filter for folders',
'finished_workflow_log' => 'Finished workflows',
'folder' => 'Folder',
@@ -1043,7 +1048,7 @@ URL: [url]',
'friday_abbr' => 'Fr',
'from' => 'From',
'fr_FR' => 'French',
-'fullsearch' => 'Full text search',
+'fullsearch' => 'Full text',
'fullsearch_hint' => 'Use fulltext index',
'fulltextsearch_disabled' => 'Fulltext index is disabled',
'fulltext_converters' => 'Index document conversion',
@@ -1195,9 +1200,9 @@ URL: [url]',
'language' => 'Language',
'lastaccess' => 'Last access',
'last_update' => 'Last Update',
-'latest_newdocuments' => 'Latest added documents',
-'latest_statuschange' => 'Latest status change',
-'latest_updateddocuments' => 'Latest updated documents',
+'latest_newdocuments' => 'Recently added documents',
+'latest_statuschange' => 'Documents with recent status change',
+'latest_updateddocuments' => 'Recently updated documents',
'legend' => 'Legend',
'librarydoc' => 'Document from library',
'linked_document' => 'Linked document',
@@ -1403,6 +1408,7 @@ URL: [url]',
'no_groups' => 'No groups',
'no_group_members' => 'This group has no members',
'no_linked_files' => 'No linked files',
+'no_mimetype' => 'No mimetype',
'no_previous_versions' => 'No other versions found',
'no_receipt_needed' => 'There are currently no documents requiring a receipt confirmation.',
'no_review_needed' => 'No review pending.',
@@ -1619,7 +1625,9 @@ User: [username]
URL: [url]',
'removed_workflow_email_subject' => '[sitename]: [name] - Removed workflow from document version',
'removeFolderFromDropFolder' => 'Remove folder after import',
+'removeFolderFromDropFolder_desc' => 'Enable this if you want the folder which was imported to be removed from the drop folder.',
'remove_approval_log' => 'Remove approval',
+'remove_from_clipboard' => 'Remove from clipboard',
'remove_marked_files' => 'Remove marked files',
'remove_review_log' => 'Remove review',
'remove_task' => 'Remove task',
@@ -1922,6 +1930,7 @@ URL: [url]',
'select_category' => 'Click to select category',
'select_created' => 'Click to select date of creation',
'select_documents_for_process' => 'Select documents',
+'select_folder' => 'Select folder',
'select_group' => 'Select group',
'select_groups' => 'Click to select groups',
'select_grp_approvers' => 'Click to select group approver',
@@ -1976,7 +1985,9 @@ If you did not receive a password, please use the password forgotten function on
'service_name' => 'Name of service',
'sessions' => 'Users online',
'setDateFromFile' => 'Take over date from imported file',
+'setDateFromFile_desc' => 'Take over the date of the imported file as the date of the document in SeedDMS',
'setDateFromFolder' => 'Take over date from imported folder',
+'setDateFromFolder_desc' => 'Take over the date of the imported directory as the date of the folder in SeedDMS',
'settings' => 'Settings',
'settings_activate_module' => 'Activate module',
'settings_activate_php_extension' => 'Activate PHP extension',
@@ -2074,6 +2085,8 @@ If you did not receive a password, please use the password forgotten function on
'settings_delete_install_folder' => 'In order to use SeedDMS, you must delete the file ENABLE_INSTALL_TOOL in the configuration directory',
'settings_disableChangePassword' => 'Disallow changing own password',
'settings_disableChangePassword_desc' => 'If checked the user cannot change his/her password. Turn this on if LDAP authentication is used. It prevents setting a database password and circumvent LDAP authentication.',
+'settings_disableReceiptComment' => 'Disable comment for reception',
+'settings_disableReceiptComment_desc' => 'Turning this on will disable comments for receptions.',
'settings_disableSelfEdit' => 'Disable Self Edit',
'settings_disableSelfEdit_desc' => 'If checked user cannot edit his own profile',
'settings_disable_install' => 'Delete file ENABLE_INSTALL_TOOL if possible',
@@ -2139,6 +2152,8 @@ If you did not receive a password, please use the password forgotten function on
'settings_enableLargeFileUpload_desc' => 'If set, file upload is also available through a java applet called jumploader without a file size limit set by the browser. It also allows to upload several files in one step. Turning this on will turn off http only cookies.',
'settings_enableLoginByEmail' => 'Enable login by email',
'settings_enableLoginByEmail_desc' => 'If enabled, the user maya also use the email address for login. This will not disable login with the username. This setting may not be regarded by all authentication methods. Because the email is not unique, authentication may fail, even if the user enters a right password.',
+'settings_enableMemcached' => 'Use memcached (experimental)',
+'settings_enableMemcached_desc' => 'Use memcached for accelerating some database operations. This should not be be turned on in production.',
'settings_enableMenuTasks' => 'Enable task list in menu',
'settings_enableMenuTasks_desc' => 'Enable/Disable the menu item which contains all tasks for the user. This contains documents, that need to be reviewed, approved, etc.',
'settings_enableMenuTransmittals' => 'Enable transmittals in menu',
@@ -2198,6 +2213,8 @@ If you did not receive a password, please use the password forgotten function on
'settings_encryptionKey' => 'Encryption key',
'settings_encryptionKey_desc' => 'This string is used for creating a unique identifier being added as a hidden field to a form in order to prevent CSRF attacks.',
'settings_error' => 'Error',
+'settings_excludeFoldersDashboard' => 'Exclude folders from dashboard',
+'settings_excludeFoldersDashboard_desc' => 'This folders will not be checked for documents shown on the dashboard. This can be useful for archived documents or documents in the trash.',
'settings_expandFolderTree' => 'Expand Folder Tree',
'settings_expandFolderTree_desc' => 'Expand Folder Tree',
'settings_expandFolderTree_val0' => 'start with tree hidden',
@@ -2256,6 +2273,8 @@ If you did not receive a password, please use the password forgotten function on
'settings_logFileEnable_desc' => 'Enable/disable log file',
'settings_logFileMaxLevel' => 'Maximum log level',
'settings_logFileMaxLevel_desc' => 'All messages up to this level will be logged',
+'settings_logFileRestApiMaxLevel' => 'Rest Api maximum log level',
+'settings_logFileRestApiMaxLevel_desc' => 'All messages of the Rest Api up to this level will be logged',
'settings_logFileRotation' => 'Log File Rotation',
'settings_logFileRotation_desc' => 'The log file rotation',
'settings_loginFailure' => 'Login failure',
@@ -2453,6 +2472,7 @@ If you did not receive a password, please use the password forgotten function on
'sign_out' => 'Sign out',
'sign_out_user' => 'Sign out user',
'site_brand' => '',
+'skip_default_export_cols' => 'Skip default columns',
'sk_SK' => 'Slovak',
'sort_by_date' => 'Sort by date',
'sort_by_expiration_date' => 'Sort by date of expiration',
@@ -2582,6 +2602,7 @@ If you did not receive a password, please use the password forgotten function on
'status_revision_sleeping' => 'pending',
'status_revisor_removed' => 'Revisor removed from list',
'status_unknown' => 'Unknown',
+'storage' => 'Storage',
'storage_size' => 'Storage size',
'subfolder_duplicate_name' => 'Duplicate subfolder name',
'submit_2_fact_auth' => 'Save secret',
diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc
index 3bb397c6b..e507bb64a 100644
--- a/languages/es_ES/lang.inc
+++ b/languages/es_ES/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'Autenticación de doble factor',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -566,6 +567,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -696,6 +699,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => 'Log de Cambios',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Cargando extensiones',
@@ -1152,6 +1157,7 @@ URL: [url]',
'no_groups' => 'No hay grupos',
'no_group_members' => 'Este grupo no tiene miembros',
'no_linked_files' => 'No hay ficheros vinculados',
+'no_mimetype' => '',
'no_previous_versions' => 'No se han encontrado otras versiones',
'no_receipt_needed' => '',
'no_review_needed' => 'No hay revisiones pendientes.',
@@ -1305,7 +1311,9 @@ nURL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Eliminar flujo de trabajo de la versión del documento',
'removeFolderFromDropFolder' => 'Eliminar carpeta después de importar',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Eliminar ficheros marcados',
'remove_review_log' => '',
'remove_task' => '',
@@ -1487,6 +1495,7 @@ URL: [url]',
'select_category' => 'Haga Click para seleccionar categoría',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Seleccionar Grupo',
'select_groups' => 'Haga Click para seleccionar grupos',
'select_grp_approvers' => 'Haga Click para seleccionar grupo de aprobadores',
@@ -1534,7 +1543,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '',
'setDateFromFile' => 'Obtiene la fecha del archivo importado',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'Obtiene la fecha de la carpeta importada',
+'setDateFromFolder_desc' => '',
'settings' => 'Configuración',
'settings_activate_module' => 'Activar módulo',
'settings_activate_php_extension' => 'Activar extensión PHP',
@@ -1632,6 +1643,8 @@ URL: [url]',
'settings_delete_install_folder' => 'Para utilizar SeedDMS, debe eliminar el archivo ENABLE_INSTALL_TOOL de la carpeta de configuración',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Deshabilitar autoedición',
'settings_disableSelfEdit_desc' => 'Si está seleccionado el usuario no podrá editar su propio perfil',
'settings_disable_install' => 'Eliminar el archivo ENABLE_INSTALL_TOOL se es posible',
@@ -1697,6 +1710,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => 'Si se habilita, la carga de ficheros también estará disponible a través de un applet java llamado jumploader, sin límite de tamaño de fichero fijado por el navegador. También permite la carga de múltiples ficheros de una sola vez.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Activar en el menú la lista de tareas',
'settings_enableMenuTasks_desc' => 'Habilita/Deshabillita la parte del menú que contiene todas las tareas para el usuario. Contiene documentos que necesitan ser revisados, aprobados, etc.',
'settings_enableMenuTransmittals' => '',
@@ -1756,6 +1771,8 @@ URL: [url]',
'settings_encryptionKey' => 'Clave de cifrado',
'settings_encryptionKey_desc' => 'Esta cadena se utiliza para crear un identificador único añadido como campo oculto a formularios para prevenir ataques CSRF.',
'settings_error' => 'Error',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Expandir árbol de carpetas',
'settings_expandFolderTree_desc' => 'Expandir árbol de carpetas',
'settings_expandFolderTree_val0' => 'Comenzar con el árbol oculto',
@@ -1814,6 +1831,8 @@ URL: [url]',
'settings_logFileEnable_desc' => 'Habilitar/Deshabilitar archivo de registro',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Rotación del archivo de registro',
'settings_logFileRotation_desc' => 'Rotación del archivo de registro',
'settings_loginFailure' => 'Fallo de acceso',
@@ -2011,6 +2030,7 @@ URL: [url]',
'sign_out' => 'Salir',
'sign_out_user' => 'Desconectar usuario',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovaco',
'sort_by_date' => 'Ordenar por Fecha',
'sort_by_expiration_date' => 'Ordenar por fecha de vencimiento',
@@ -2140,6 +2160,7 @@ URL: [url]',
'status_revision_sleeping' => 'pendiente',
'status_revisor_removed' => '',
'status_unknown' => 'Desconocido',
+'storage' => '',
'storage_size' => 'Tamaño de almacenamiento',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc
index 6e8b56642..7bb5a905f 100644
--- a/languages/fr_FR/lang.inc
+++ b/languages/fr_FR/lang.inc
@@ -19,10 +19,11 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
-// Translators: Admin (1173), jeromerobert (50), lonnnew (9), Oudiceval (1171)
+// Translators: Admin (1175), jeromerobert (50), lonnnew (9), Oudiceval (1171)
$text = array(
'2_factor_auth' => 'Authentification forte',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'Ce système requiert une authentification à deux facteurs. Cela nécessite l’installation de Google Authenticator sur votre téléphone mobile. Ci-dessous sont visibles deux QR codes. Celui de droite correspond à votre clé secrète actuelle. Celui de gauche permet de définir une nouvelle clé secrète. Lorsque vous définissez une nouvelle clé secrète, assurez-vous de la scanner avec Google Authenticator.',
'2_fact_auth_current_secret' => 'Clé secrète actuelle',
'2_fact_auth_new_secret' => 'Nouvelle clé secrète',
@@ -681,6 +682,8 @@ URL : [url]',
'download_header_document_name' => 'Nom du document',
'download_header_document_no' => 'N° du document',
'download_header_filename' => 'Nom du fichier',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => 'Version interne',
'download_header_reviewer' => 'Examinateur',
'download_header_review_comment' => 'Commentaire de vérification',
@@ -817,6 +820,8 @@ URL : [url]',
'export_user_list_csv' => 'Exporter les utilisateurs en CSV',
'extension_archive' => 'Extension',
'extension_changelog' => 'Journal des modifications',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => 'L’extension est désactivée',
'extension_is_on_now' => 'L’extension est activée',
'extension_loading' => 'Chargement des extensions…',
@@ -1358,6 +1363,7 @@ URL : [url]',
'no_groups' => 'Aucun groupe',
'no_group_members' => 'Ce groupe ne contient aucun membre',
'no_linked_files' => 'Aucun fichier lié',
+'no_mimetype' => '',
'no_previous_versions' => 'Aucune autre version trouvée',
'no_receipt_needed' => 'Il n’y a actuellement aucun document nécessitant une confirmation de réception.',
'no_review_needed' => 'Aucune vérification en attente',
@@ -1572,7 +1578,9 @@ Utilisateur : [username]
URL : [url]',
'removed_workflow_email_subject' => '[sitename] : [name] - Workflow retiré de la version du doument',
'removeFolderFromDropFolder' => 'Suppression du dossier après importation',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => 'Approbation retirée',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Supprimer les fichiers sélectionnés',
'remove_review_log' => 'Vérification retirée',
'remove_task' => '',
@@ -1869,6 +1877,7 @@ URL : [url]',
'select_category' => 'Cliquer pour choisir une catégorie',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Sélectionner un groupe',
'select_groups' => 'Cliquer pour choisir un groupe',
'select_grp_approvers' => 'Cliquer pour choisir un groupe d\'approbateur',
@@ -1921,7 +1930,9 @@ Nom : [username]
'service_name' => '',
'sessions' => 'Utilisateurs en ligne',
'setDateFromFile' => 'Reprendre la date du fichier importé',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'Reprendre la date du dossier importé',
+'setDateFromFolder_desc' => '',
'settings' => 'Configuration',
'settings_activate_module' => 'Activez le module',
'settings_activate_php_extension' => 'Activez l\'extension PHP',
@@ -2019,6 +2030,8 @@ Nom : [username]
'settings_delete_install_folder' => 'Pour utiliser SeedDMS, vous devez supprimer le fichier ENABLE_INSTALL_TOOL dans le répertoire de configuration',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Désactiver auto modification',
'settings_disableSelfEdit_desc' => 'Si coché, l\'utilisateur ne peut pas éditer son profil',
'settings_disable_install' => 'Si possible, supprimer le fichier ENABLE_INSTALL_TOOL',
@@ -2084,6 +2097,8 @@ Nom : [username]
'settings_enableLargeFileUpload_desc' => 'Si défini, le téléchargement de fichier est également disponible via un applet java appelé jumploader sans limite de taille définie par le navigateur. Il permet également de télécharger plusieurs fichiers en une seule fois.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Activer le menu des tâches',
'settings_enableMenuTasks_desc' => 'Affiche un menu avec la liste des tâches. Cette liste contient les documents en attente d’une action par l’utilisateur.',
'settings_enableMenuTransmittals' => '',
@@ -2143,6 +2158,8 @@ Nom : [username]
'settings_encryptionKey' => 'Clé de cryptage',
'settings_encryptionKey_desc' => 'Cette chaîne est utilisée pour créer un identifiant unique étant ajouté comme champ masqué à un formulaire afin de prévenir des attaques CSRF.',
'settings_error' => 'Erreur',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Dérouler l\'arborescence des dossiers',
'settings_expandFolderTree_desc' => 'Dérouler l\'arborescence des dossiers',
'settings_expandFolderTree_val0' => 'Démarrer avec l\'arborescence cachée',
@@ -2201,6 +2218,8 @@ Nom : [username]
'settings_logFileEnable_desc' => 'Active/désactive le fichier journal',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Rotation fichier journal',
'settings_logFileRotation_desc' => 'Rotation fichier journal',
'settings_loginFailure' => 'Max. échecs de connexion',
@@ -2398,6 +2417,7 @@ Nom : [username]
'sign_out' => 'Déconnexion',
'sign_out_user' => 'Déconnecter l\'utilisateur',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovaque',
'sort_by_date' => 'Trier par date',
'sort_by_expiration_date' => 'Trier par date d’expiration',
@@ -2527,6 +2547,7 @@ Nom : [username]
'status_revision_sleeping' => 'en attente',
'status_revisor_removed' => 'Réviseur retiré de la liste',
'status_unknown' => 'Inconnu',
+'storage' => '',
'storage_size' => 'Taille occupée',
'subfolder_duplicate_name' => 'Un sous-dossier porte déjà ce nom !',
'submit_2_fact_auth' => 'Enregistrer la clé secrète',
@@ -2671,7 +2692,7 @@ URL : [url]',
'type_to_filter' => 'Filtrer dans la liste',
'type_to_search' => 'Effectuer une recherche',
'uk_UA' => 'Ukrénien',
-'undefined' => '',
+'undefined' => 'indéfini',
'under_folder' => 'Dans le dossier',
'unknown_attrdef' => 'Définition d’attribut inconnue',
'unknown_command' => 'Commande non reconnue.',
@@ -2690,7 +2711,7 @@ URL : [url]',
'unlock_cause_locking_user' => 'Vous pouvez encore le mettre à jour, car vous êtes le seul à l\'avoir verrouillé. Le verrouillage sera automatiquement annulé.',
'unlock_document' => 'Déverrouiller',
'update' => 'Mettre à jour',
-'updated' => '',
+'updated' => 'mis à jour',
'updated_documents' => '',
'update_approvers' => 'Mettre à jour la liste des approbateurs',
'update_document' => 'Mettre à jour',
diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc
index d560fae41..024bb087b 100644
--- a/languages/hr_HR/lang.inc
+++ b/languages/hr_HR/lang.inc
@@ -19,24 +19,25 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
-// Translators: Admin (1262), marbanas (16)
+// Translators: Admin (2216), marbanas (16)
$text = array(
'2_factor_auth' => '2-faktorska autentikacija',
-'2_factor_auth_info' => '',
-'2_fact_auth_current_secret' => '',
-'2_fact_auth_new_secret' => '',
-'2_fact_auth_secret' => '',
-'abbr_day' => '',
-'abbr_hour' => '',
-'abbr_minute' => '',
-'abbr_month' => '',
-'abbr_second' => '',
-'abbr_week' => '',
-'abbr_year' => '',
+'2_factor_auth_code' => '2 faktora autentifikacijski kod',
+'2_factor_auth_info' => 'Podaci o autentifikaciji 2 faktora',
+'2_fact_auth_current_secret' => '2 činjenica auth trenutna tajna',
+'2_fact_auth_new_secret' => '2 činjenica auth nova tajna',
+'2_fact_auth_secret' => '2 činjenica auth tajna',
+'abbr_day' => 'skratiti dan',
+'abbr_hour' => 'skraćivati sat',
+'abbr_minute' => 'skraćena minuta',
+'abbr_month' => 'skr. mjesec',
+'abbr_second' => 'skr. drugi',
+'abbr_week' => 'skraćeni tjedan',
+'abbr_year' => 'skr. godina',
'accept' => 'Prihvati',
'access_control' => 'Kontrola pristupa',
-'access_control_is_off' => '',
+'access_control_is_off' => 'kontrola pristupa je isključena',
'access_denied' => 'Odbijen pristup.',
'access_inheritance' => 'Nasljedivost razine pristupa',
'access_mode' => 'Način pristupa',
@@ -56,7 +57,7 @@ $text = array(
'action_revise' => 'Izmijeni',
'add' => 'Dodaj',
'add_approval' => 'Dodaj odobrenje',
-'add_attrdefgroup' => '',
+'add_attrdefgroup' => 'dodajte attrdefgroup',
'add_document' => 'Dodaj dokument',
'add_document_link' => 'Dodaj poveznicu',
'add_document_notify' => 'Dodijeli obavještavanje',
@@ -72,7 +73,7 @@ $text = array(
'add_revision' => 'Dodaj reviziju',
'add_role' => 'Dodaj novu rolu',
'add_subfolder' => 'Dodaj podmapu',
-'add_task' => '',
+'add_task' => 'dodati zadatak',
'add_to_clipboard' => 'Dodaj u međuspremnik',
'add_to_transmittal' => 'Dodaj u proslijeđivanje',
'add_transmittal' => 'Dodaj proslijeđivanje',
@@ -90,20 +91,20 @@ $text = array(
'all_users' => 'Svi korisnici',
'already_subscribed' => 'Već prijavljeno',
'and' => 'i',
-'any_value_set' => '',
-'apikey' => '',
+'any_value_set' => 'bilo koji skup vrijednosti',
+'apikey' => 'apikey',
'apply' => 'Primjeni',
-'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' => 'odobrenja prihvaćena',
+'approvals_accepted_latest' => 'odobrenja prihvaćena najkasnije',
+'approvals_and_reviews_accepted' => 'prihvaćena odobrenja i recenzije',
+'approvals_and_reviews_not_touched' => 'odobrenja i pregleda nisu dirani',
+'approvals_and_reviews_rejected' => 'odbijena odobrenja i recenzije',
+'approvals_not_touched' => 'odobrenja nisu dirana',
+'approvals_not_touched_latest' => 'odobrenja nisu dirana najnovija',
+'approvals_rejected' => 'odobrenja odbijena',
+'approvals_rejected_latest' => 'odobrenja odbijena najkasnije',
+'approvals_without_group' => 'odobrenja bez grupe',
+'approvals_without_user' => 'odobrenja bez korisnika',
'approval_deletion_email' => 'Izbrisan zahtjev za odobrenje',
'approval_deletion_email_body' => 'Zahtjev za odobrenjem izbrisan
Dokument: [name]
@@ -111,7 +112,7 @@ Verzija: [version]
Glavna mapa: [folder_path]
Korisnik: [username]
URL: [url]',
-'approval_deletion_email_body_html' => '',
+'approval_deletion_email_body_html' => 'tijelo e-pošte za brisanje odobrenja html',
'approval_deletion_email_subject' => '[sitename]: [name] - Zahtjev za odobrenjem izbrisan',
'approval_file' => 'Datoteka',
'approval_group' => 'Grupa odobrenja',
@@ -123,7 +124,7 @@ Verzija: [version]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'approval_request_email_body_html' => '',
+'approval_request_email_body_html' => 'tijelo zahtjeva za odobrenje e-pošte html',
'approval_request_email_subject' => '[sitename]: [name] - Zahtjev za odobrenje',
'approval_status' => 'Status odobrenja',
'approval_submit_email' => 'Predan zahtjev za odobrenje',
@@ -135,7 +136,7 @@ Status: [status]
Komentar: [comment]
Korisnik: [username]
Internet poveznica: [url]',
-'approval_submit_email_body_html' => '',
+'approval_submit_email_body_html' => 'odobrenje poslati e-mail tijelo html',
'approval_submit_email_subject' => '[sitename] : [name] - Podnešeno odobrenje',
'approval_summary' => 'Pregled odobrenja',
'approval_update_failed' => 'Greška pri ažuriranju statusa odobrenja. Ažuriranje nije uspjelo.',
@@ -143,7 +144,7 @@ Internet poveznica: [url]',
'approver_already_assigned' => 'Korisnik je već dodijeljen kao odobravatelj',
'approver_already_removed' => 'Odobravatelj je već uklonjen iz procesa odobrenja ili je već odobrio dokument.',
'april' => 'Travanj',
-'archive' => '',
+'archive' => 'arhiva',
'archive_creation' => 'Izrada arhive',
'archive_creation_warning' => 'Ovom radnjom možete izraditi arhivu koja sadrži datoteke cijele DMS mape. Nakon izrade arhiva će biti pohranjena u podatkovnu mapu vašer servera.
UPOZORENJE: arhiva izrađena na način da je čitljiva ljudima, bit će bezkorisna kao sigurnosna kopija servera.',
'ar_EG' => 'Arapski',
@@ -152,73 +153,73 @@ Internet poveznica: [url]',
'assign_reviewers' => 'Dodijeli recezente',
'assign_user_property_to' => 'Dodijeli svojstva korisnika za',
'assumed_released' => 'Podrazumijevano obrađeno',
-'attrdefgroup_management' => '',
-'attrdefgrp_show_detail' => '',
-'attrdefgrp_show_list' => '',
-'attrdefgrp_show_search' => '',
-'attrdefgrp_show_searchlist' => '',
+'attrdefgroup_management' => 'attrdefgroup management',
+'attrdefgrp_show_detail' => 'attrdefgrp prikazati detalje',
+'attrdefgrp_show_list' => 'attrdefgrp prikazati popis',
+'attrdefgrp_show_search' => 'attrdefgrp prikazati pretraživanje',
+'attrdefgrp_show_searchlist' => 'attrdefgrp prikaži popis pretraživanja',
'attrdef_exists' => 'Definicija atributa već postoji',
-'attrdef_info' => '',
-'attrdef_invalid_regex' => '',
+'attrdef_info' => 'attrdef info',
+'attrdef_invalid_regex' => 'attrdef nevažeći regularni izraz',
'attrdef_in_use' => 'Definicija atributa se već koristi',
'attrdef_management' => 'Upravljanje definicijama atributa',
'attrdef_maxvalues' => 'Max. broj vrijednosti',
'attrdef_minvalues' => 'Min. broj vrijednosti',
-'attrdef_minvalues_help' => '',
+'attrdef_minvalues_help' => 'attrdef minvalues pomoć',
'attrdef_min_greater_max' => 'Minimalni broj vrijednosti je veći od maksimalnog broja vrijednosti',
'attrdef_multiple' => 'Dozvoli više vrijednosti',
-'attrdef_multiple_but_doc_or_folder' => '',
+'attrdef_multiple_but_doc_or_folder' => 'attrdef više osim dokumenta ili mape',
'attrdef_multiple_needs_valueset' => 'Atribut s višestrukim vrijednostima mora imati set vrijednosti',
'attrdef_must_be_multiple' => 'Atribut mora imati više od jedne vrijednosti, ali nije postavljeno više vrijednosti',
'attrdef_name' => 'Naziv',
'attrdef_noname' => 'Nedostaje naziv za definiciju atributa',
'attrdef_objtype' => 'Vrsta objekta',
'attrdef_regex' => 'Pravilni izraz',
-'attrdef_regex_help' => '',
+'attrdef_regex_help' => 'attrdef regex pomoć',
'attrdef_type' => 'Vrsta',
'attrdef_type_boolean' => 'Boolean',
'attrdef_type_date' => 'Datum',
-'attrdef_type_document' => '',
+'attrdef_type_document' => 'attrdef tip dokumenta',
'attrdef_type_email' => 'Email',
'attrdef_type_float' => 'Float',
-'attrdef_type_folder' => '',
-'attrdef_type_group' => '',
+'attrdef_type_folder' => 'mapa tipa attrdef',
+'attrdef_type_group' => 'grupa tipa attrdef',
'attrdef_type_int' => 'Integer',
'attrdef_type_string' => 'String',
'attrdef_type_url' => 'URL',
-'attrdef_type_user' => '',
+'attrdef_type_user' => 'korisnik tipa attrdef',
'attrdef_valueset' => 'Skup vrijednosti',
-'attrdef_valueset_help' => '',
+'attrdef_valueset_help' => 'pomoć za skup vrijednosti attrdef',
'attributes' => 'Atributi',
-'attribute_changed_email_body' => 'Promijenjen atribut
-Dokument: [name]
-Verzija: [version]
-Atribut: [attribute_name]
-Old value: [attribute_old_value]
-New value: [attribute_new_value]
-Glavna mapa: [folder_path]
-Korisnik: [username]
+'attribute_changed_email_body' => 'Promijenjen atribut
+Dokument: [name]
+Verzija: [version]
+Atribut: [attribute_name]
+Old value: [attribute_old_value]
+New value: [attribute_new_value]
+Glavna mapa: [folder_path]
+Korisnik: [username]
Internet poveznica: [url]',
-'attribute_changed_email_body_html' => '',
+'attribute_changed_email_body_html' => 'atribut promijenjen tijelo e-pošte html',
'attribute_changed_email_subject' => '[sitename]: [name] - Promijenjen atribut',
'attribute_count' => 'Broj uporaba',
'attribute_value' => 'Vrijednost atributa',
-'attribute_value_not_in_valueset' => '',
-'attr_malformed_boolean' => '',
-'attr_malformed_date' => '',
+'attribute_value_not_in_valueset' => 'vrijednost atributa nije u skupu vrijednosti',
+'attr_malformed_boolean' => 'attr pogrešno oblikovan booleov',
+'attr_malformed_date' => 'attr pogrešno oblikovan datum',
'attr_malformed_email' => 'Vrijednost atributa \'[value]\' za atribut \'[attrname]\' nije važeći email.',
-'attr_malformed_float' => '',
-'attr_malformed_int' => '',
+'attr_malformed_float' => 'attr neispravan float',
+'attr_malformed_int' => 'attr neispravan int',
'attr_malformed_url' => 'Vrijednost atributa \'[value]\' za atribut \'[attrname]\' nije važeći URL.',
'attr_max_values' => 'Premašen je maksimalni broj zahtjevanih vrijednosti za atribute[attrname].',
'attr_min_values' => 'Minimalni broj zahtjevanih vrijednosti za atribute[attrname] nije dostignut.',
-'attr_not_in_valueset' => '',
+'attr_not_in_valueset' => 'attr nije u skupu vrijednosti',
'attr_no_regex_match' => 'Vrijednost atributa ne odgovara pravilnom izrazu',
-'attr_validation_error' => '',
+'attr_validation_error' => 'pogreška provjere valjanosti attr',
'at_least_n_users_of_group' => 'Najmanje [number_of_users] korisnika iz [group]',
'august' => 'Kolovoz',
'authentication' => 'Ovjera',
-'authentication_failed' => '',
+'authentication_failed' => 'provjera autentičnosti nije uspjela',
'author' => 'Autor',
'automatic_status_update' => 'Automatska promjena statusa',
'back' => 'Natrag',
@@ -226,29 +227,29 @@ Internet poveznica: [url]',
'backup_log_management' => 'Sigurnosna kopija / Bilježenje',
'backup_remove' => 'Ukloni datoteku sigurnosne kopije',
'backup_tools' => 'Alat za sigurnosnu kopiju',
-'batch_add_approver' => '',
-'batch_add_approver_msg' => '',
-'batch_add_category_msg' => '',
-'batch_add_reviewer' => '',
-'batch_add_reviewer_msg' => '',
-'batch_change_category' => '',
-'batch_change_owner' => '',
-'batch_export' => '',
-'batch_new_owner_msg' => '',
-'batch_operation' => '',
-'batch_operation_result' => '',
-'batch_remove_category' => '',
-'batch_remove_category_msg' => '',
+'batch_add_approver' => 'odobravatelj skupnog dodavanja',
+'batch_add_approver_msg' => 'paketno dodaj odobravatelja msg',
+'batch_add_category_msg' => 'grupno dodavanje kategorije msg',
+'batch_add_reviewer' => 'recenzent skupnog dodavanja',
+'batch_add_reviewer_msg' => 'paketno dodaj recenzent msg',
+'batch_change_category' => 'kategorija promjene serije',
+'batch_change_owner' => 'grupna promjena vlasnika',
+'batch_export' => 'serijski izvoz',
+'batch_new_owner_msg' => 'serija poruka novog vlasnika',
+'batch_operation' => 'skupni rad',
+'batch_operation_result' => 'rezultat skupnog rada',
+'batch_remove_category' => 'kategorija skupnog uklanjanja',
+'batch_remove_category_msg' => 'skupna poruka za uklanjanje kategorije',
'between' => 'između',
'bg_BG' => 'Bugarski',
'browse' => 'Pretraži',
'calendar' => 'Kalendar',
-'calendar_events_mail_subject' => '',
+'calendar_events_mail_subject' => 'događaji u kalendaru predmet pošte',
'calendar_week' => 'kalendarski tjedan',
'cancel' => 'Odustani',
-'cancel_checkout' => '',
-'cancel_checkout_document' => '',
-'cancel_checkout_warning' => '',
+'cancel_checkout' => 'otkazati naplatu',
+'cancel_checkout_document' => 'otkazati checkout dokument',
+'cancel_checkout_warning' => 'upozorenje o otkazivanju naplate',
'cannot_assign_invalid_state' => 'Ne možete mijenjati zastarjeli ili odbijeni dokument',
'cannot_change_final_states' => 'Upozorenje: Ne možete mijenjati status odbijenog, isteklog ili dokumenta koji čeka na ovjeru ili odobrenje',
'cannot_delete_user' => 'Ne možete izbrisati korisnika',
@@ -256,15 +257,15 @@ Internet poveznica: [url]',
'cannot_move_root' => 'Greška: Ne možete premještati root mapu.',
'cannot_retrieve_approval_snapshot' => 'Nije moguće dohvatiti snimku statusa odobrenja za ovu verziju dokumenta.',
'cannot_retrieve_review_snapshot' => 'Nije moguće dohvatiti snimku statusa pregleda za ovu verziju dokumenta.',
-'cannot_revapp_expired_docs' => '',
+'cannot_revapp_expired_docs' => 'ne može revapp istekle dokumente',
'cannot_rm_root' => 'Greška: Ne možete izbrisati root mapu.',
-'cannot_transfer_your_objects' => '',
+'cannot_transfer_your_objects' => 'ne može prenijeti svoje objekte',
'categories' => 'Kategorije',
'categories_loading' => 'Molimo pričekati dok se ne učita lista kategorija...',
'category' => 'Kategorija',
'category_exists' => 'Kategorija već postoji.',
'category_filter' => 'Samo kategorije',
-'category_info' => '',
+'category_info' => 'informacije o kategoriji',
'category_in_use' => 'Ovu kategoriju trenutno koriste dokumenti.',
'category_noname' => 'Nije dan naziv kategoriji.',
'ca_ES' => 'Katalonski',
@@ -282,28 +283,28 @@ Internet poveznica: [url]',
'chart_docspermonth_title' => 'Novi dokumenti na mjesec',
'chart_docsperstatus_title' => 'Dokumenata po statusu',
'chart_docsperuser_title' => 'Dokumenata po korisniku',
-'chart_foldersperuser_title' => '',
+'chart_foldersperuser_title' => 'mape grafikonakorisnički naslov',
'chart_selection' => 'Odaberi grafikon',
-'chart_sizepermonth_title' => '',
+'chart_sizepermonth_title' => 'veličina grafikona mjesečni naslov',
'chart_sizeperuser_title' => 'Prostor na disku po korisniku',
'checkedout_file_has_different_version' => 'Odjavljena verzija nije identična trenutnoj verziji. Prijava neće izmijeniti dokument.',
'checkedout_file_has_disappeared' => 'Datoteka odjavljenog dokumenta je nestala. Prijava neće biti moguća.',
'checkedout_file_is_unchanged' => 'Datoteka odjavljenog dokumenta je još uvijek nepromijenjena. Prijava neće biti moguća. Ukoliko ne planirate izmjene, možete resetirati status odjave.',
'checkin_document' => 'Prijava',
-'checkoutpath_does_not_exist' => '',
-'checkout_cancel_confirm' => '',
+'checkoutpath_does_not_exist' => 'checkoutpath ne postoji',
+'checkout_cancel_confirm' => 'naplata odustani potvrditi',
'checkout_document' => 'Odjava',
'checkout_is_disabled' => 'Odjava dokumenata je onemogućena u konfiguraciji.',
-'check_directory_layout' => '',
-'check_failed' => '',
-'check_notification_filter' => '',
-'check_passed' => '',
-'check_secure_installation' => '',
+'check_directory_layout' => 'provjerite izgled imenika',
+'check_failed' => 'provjera nije uspjela',
+'check_notification_filter' => 'provjerite filtar obavijesti',
+'check_passed' => 'provjera prošla',
+'check_secure_installation' => 'provjerite sigurnu instalaciju',
'choose_attrdef' => 'Molim odaberite definiciju atributa',
-'choose_attrdefgroup' => '',
+'choose_attrdefgroup' => 'odaberite attrdefgroup',
'choose_category' => 'Molim odaberite',
'choose_group' => 'Odaberite grupu',
-'choose_link_type' => '',
+'choose_link_type' => 'odaberite vrstu veze',
'choose_role' => 'Izaberi rolu',
'choose_target_category' => 'Odaberite kategoriju',
'choose_target_document' => 'Odaberite dokument',
@@ -313,30 +314,30 @@ Internet poveznica: [url]',
'choose_workflow' => 'Odaberite tok rada',
'choose_workflow_action' => 'Odaberite radnju toka rada',
'choose_workflow_state' => 'Odaberite status toka rada',
-'class_finfo_missing' => '',
-'class_name' => '',
+'class_finfo_missing' => 'nedostaju finfo o klasi',
+'class_name' => 'ime klase',
'clear_cache' => 'Obriši keš',
'clear_clipboard' => 'Očistite međuspremnik',
-'clear_password' => '',
-'click_to_expand_filter_results' => '',
+'clear_password' => 'jasna lozinka',
+'click_to_expand_filter_results' => 'kliknite za proširenje rezultata filtra',
'clipboard' => 'Međuspremnik',
'close' => 'Zatvori',
-'color' => '',
-'command' => '',
+'color' => 'boja',
+'command' => 'naredba',
'comment' => 'Komentar',
'comment_changed_email' => 'Promjena komentara',
'comment_for_current_version' => 'Verzija komentara',
-'configure_extension' => '',
-'confirm_add_approver' => '',
-'confirm_add_reviewer' => '',
-'confirm_change_category' => '',
-'confirm_change_owner' => '',
-'confirm_clear_cache' => '',
+'configure_extension' => 'konfigurirati proširenje',
+'confirm_add_approver' => 'potvrdi dodaj odobravatelja',
+'confirm_add_reviewer' => 'potvrdi dodaj recenzenta',
+'confirm_change_category' => 'potvrditi promjenu kategorije',
+'confirm_change_owner' => 'potvrdi promjenu vlasnika',
+'confirm_clear_cache' => 'potvrdite brisanje predmemorije',
'confirm_create_fulltext_index' => 'Da, želim ponovo indeksirati cijeli tekst!',
-'confirm_move_document' => '',
-'confirm_move_folder' => '',
+'confirm_move_document' => 'potvrditi premjestiti dokument',
+'confirm_move_folder' => 'potvrdi premjesti mapu',
'confirm_pwd' => 'Potvrdi lozinku',
-'confirm_rm_attr_value' => '',
+'confirm_rm_attr_value' => 'potvrditi rm attr vrijednost',
'confirm_rm_backup' => 'Da li zaista želite ukloniti datoteku "[arkname]"?
Oprez: ova radnja nije povratna.',
'confirm_rm_document' => 'Da li zaista želite ukloniti dokument \'[documentname]\'?
Oprez: ova radnja nije povratna.',
'confirm_rm_dump' => 'Da li zaista želite ukloniti datoteku "[dumpname]"?
Oprez: ova radnja nije povratna.',
@@ -346,37 +347,37 @@ 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_task' => 'potvrditi rm zadatak',
+'confirm_rm_transmittal' => 'potvrditi rm transmittal',
'confirm_rm_transmittalitem' => 'Potvrdi uklanjanje',
'confirm_rm_user' => 'Da li zaista želite ukloniti korisnika "[username]"?
Oprez: ova radnja nije povratna.',
-'confirm_rm_user_from_processes' => '',
+'confirm_rm_user_from_processes' => 'potvrdi rm korisnika iz procesa',
'confirm_rm_version' => 'Da li zaista želite ukloniti verziju [version] dokumenta "[documentname]"?
Oprez: ova radnja nije povratna.',
-'confirm_transfer_link_document' => '',
-'confirm_transfer_objects' => '',
+'confirm_transfer_link_document' => 'potvrditi dokument veze za prijenos',
+'confirm_transfer_objects' => 'potvrditi objekte prijenosa',
'confirm_update_transmittalitem' => 'Potvrdi izmjenu',
'content' => 'Sadržaj',
'continue' => 'Nastavi',
'converter_new_cmd' => 'Komanda',
'converter_new_mimetype' => 'Novi tip datoteke',
'copied_to_checkout_as' => 'Datoteka je kopirana u prostor odjave kao \'[filename]\'',
-'created' => '',
-'createSubFolderForImportedFiles' => '',
-'createSubFolderForImportedFiles_desc' => '',
-'create_download_link' => '',
+'created' => 'stvorio',
+'createSubFolderForImportedFiles' => 'createSubFolderForImportedFiles',
+'createSubFolderForImportedFiles_desc' => 'createSubFolderForImportedFiles desc',
+'create_download_link' => 'stvoriti link za preuzimanje',
'create_fulltext_index' => 'Indeksiraj cijeli tekst',
'create_fulltext_index_warning' => 'Želite ponovo indeksirati cijeli tekst. To može duže potrajati i smanjiti sveukupne performanse sustava. Ako zaista želite ponovno indeksirati, molimo potvrdite vašu radnju.',
'creation_date' => 'Izrađeno',
'cs_CZ' => 'Češki',
-'current_filter' => '',
+'current_filter' => 'strujni filter',
'current_password' => 'Trenutna lozinka',
'current_quota' => 'Postavljena je kvota sadašnjeg sustava [quota].',
'current_state' => 'Trenutni status',
'current_version' => 'Trenutna verzija',
'daily' => 'Dnevno',
-'dashboard' => '',
+'dashboard' => 'nadzorna ploča',
'databasesearch' => 'Pretraživanje baze podataka',
-'database_schema_version' => '',
+'database_schema_version' => 'verzija sheme baze podataka',
'data_loading' => 'Molim pričekati, dok se podaci učitavaju ...',
'date' => 'Datum',
'days' => 'dani',
@@ -389,69 +390,69 @@ Internet poveznica: [url]',
'details' => 'Detalji',
'details_version' => 'Detalji za verziju: [version]',
'de_DE' => 'Njemački',
-'directory_check' => '',
-'directory_check_cache_exists' => '',
-'directory_check_cache_writable' => '',
-'directory_check_conf_writable' => '',
-'directory_check_data_below_root' => '',
-'directory_check_data_exists' => '',
-'directory_check_data_writable' => '',
-'directory_check_ext_below_docroot' => '',
-'directory_check_ext_exists' => '',
-'directory_check_ext_writable' => '',
-'directory_check_index_exists' => '',
-'directory_check_index_writable' => '',
-'directory_check_result' => '',
-'disable_extension' => '',
+'directory_check' => 'provjera imenika',
+'directory_check_cache_exists' => 'predmemorija provjere imenika postoji',
+'directory_check_cache_writable' => 'provjera imenika predmemorija za pisanje',
+'directory_check_conf_writable' => 'provjera imenika conf za pisanje',
+'directory_check_data_below_root' => 'podaci provjere imenika ispod korijena',
+'directory_check_data_exists' => 'podaci o provjeri imenika postoje',
+'directory_check_data_writable' => 'podaci provjere imenika koji se mogu pisati',
+'directory_check_ext_below_docroot' => 'provjera imenika ext ispod docroot',
+'directory_check_ext_exists' => 'provjera imenika postoji ekst',
+'directory_check_ext_writable' => 'provjera imenika ext za pisanje',
+'directory_check_index_exists' => 'indeks provjere imenika postoji',
+'directory_check_index_writable' => 'imenik provjeriti indeks pisati',
+'directory_check_result' => 'rezultat provjere imenika',
+'disable_extension' => 'onemogući proširenje',
'disclaimer' => 'Ovo je klasificirano područje. Pristup je omogućen samo ovlaštenim osobama. Sa svakim kršenjem bit će postupano sukladno nacionalnim i međunarodnim zakonima.',
'discspace' => 'Prostor na disku',
-'docs_in_reception_disabled' => '',
-'docs_in_reception_no_access' => '',
-'docs_in_revision_disabled' => '',
-'docs_in_revision_no_access' => '',
-'docs_with_missing_revision_date' => '',
+'docs_in_reception_disabled' => 'dokumenti na recepciji onemogućeni',
+'docs_in_reception_no_access' => 'nema pristupa dokumentima na recepciji',
+'docs_in_revision_disabled' => 'dokumenti u reviziji onemogućeni',
+'docs_in_revision_no_access' => 'dokumenti u reviziji nemaju pristup',
+'docs_with_missing_revision_date' => 'dokumenata kojima nedostaje datum revizije',
'document' => 'Dokument',
-'documentcontent' => '',
+'documentcontent' => 'sadržaj dokumenta',
'documents' => 'Dokumenti',
'documents_checked_out_by_you' => 'Dokumenti koje ste Vi odjavili',
'documents_expired' => 'Istekla dokumenta',
'documents_in_process' => 'Dokumenti u postupku',
-'documents_locked' => '',
+'documents_locked' => 'dokumenti zaključani',
'documents_locked_by_you' => 'Dokumenti koje ste vi zaključali',
'documents_only' => 'Samo dokumenti',
-'documents_rejected' => '',
+'documents_rejected' => 'dokumenti odbijeni',
'documents_to_approve' => 'Dokumenti koji čekaju vaše odobrenje',
-'documents_to_correct' => '',
-'documents_to_process' => '',
+'documents_to_correct' => 'ispraviti dokumente',
+'documents_to_process' => 'dokumente za obradu',
'documents_to_receipt' => 'Dokumenti koji čekaju potvrdu primitka',
'documents_to_review' => 'Dokumenti koji čekaju vaš pregled',
'documents_to_revise' => 'Dokumenti za reviziju',
-'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_trigger_workflow' => 'dokumenata za pokretanje tijeka rada',
+'documents_user_draft' => 'dokumenti korisnički nacrt',
+'documents_user_expiration' => 'istek korisnika dokumenata',
+'documents_user_needs_correction' => 'dokumenti korisnik treba ispravak',
+'documents_user_no_reception' => 'dokumenti korisnik nema prijem',
+'documents_user_obsolete' => 'dokumenti korisnik zastario',
+'documents_user_reception' => 'prijem korisnika dokumenata',
'documents_user_rejected' => 'Odbijeni dokumenti',
'documents_user_requiring_attention' => 'Dokumenti u vašem vlasništvu koji zahtjevaju pažnju',
-'documents_with_notification' => '',
+'documents_with_notification' => 'dokumenti s obavijesti',
'document_access_permission_changed_email' => 'Dozvola je promijenjena',
'document_access_permission_changed_email_body' => 'Dozvola je promijenjena
Dokument: [name]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'document_access_permission_changed_email_body_html' => '',
+'document_access_permission_changed_email_body_html' => 'dopuštenje za pristup dokumentu promijenjeno tijelo e-pošte html',
'document_access_permission_changed_email_subject' => '[sitename]: [name] - Dozvola je promijenjena',
'document_already_checkedout' => 'Ovaj dokument je već odjavljen',
'document_already_locked' => 'Ovaj dokument je već zaključan',
-'document_attribute_added_email_body' => '',
-'document_attribute_added_email_body_html' => '',
-'document_attribute_added_email_subject' => '',
-'document_attribute_changed_email_body' => '',
-'document_attribute_changed_email_body_html' => '',
-'document_attribute_changed_email_subject' => '',
+'document_attribute_added_email_body' => 'atribut dokumenta dodan tijelo e-pošte',
+'document_attribute_added_email_body_html' => 'atribut dokumenta dodan tijelo e-pošte html',
+'document_attribute_added_email_subject' => 'atribut dokumenta dodan predmet e-pošte',
+'document_attribute_changed_email_body' => 'atribut dokumenta promijenio tijelo e-pošte',
+'document_attribute_changed_email_body_html' => 'atribut dokumenta promijenio tijelo e-pošte html',
+'document_attribute_changed_email_subject' => 'atribut dokumenta promijenio predmet e-pošte',
'document_comment_changed_email' => 'Promijenjen komentar',
'document_comment_changed_email_body' => 'Promijenjen komentar
Dokument: [name]
@@ -460,28 +461,28 @@ Komentar: [new_comment]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'document_comment_changed_email_body_html' => '',
+'document_comment_changed_email_body_html' => 'komentar dokumenta promijenjen tijelo e-pošte html',
'document_comment_changed_email_subject' => '[sitename]: [name] - Promijenjen komentar',
-'document_content_missing' => '',
-'document_count' => '',
+'document_content_missing' => 'nedostaje sadržaj dokumenta',
+'document_count' => 'broj dokumenata',
'document_deleted' => 'Izbrisan dokument',
'document_deleted_email' => 'Izbrisan dokument',
'document_deleted_email_body' => 'Izbrisan dokument
Dokument: [name]
Glavna mapa: [folder_path]
Korisnik: [username]',
-'document_deleted_email_body_html' => '',
+'document_deleted_email_body_html' => 'dokument izbrisan tijelo e-pošte html',
'document_deleted_email_subject' => '[sitename]: [name] - Izbrisan dokument',
'document_duplicate_name' => 'Duplicate document name',
-'document_files' => '',
+'document_files' => 'datoteke dokumenata',
'document_has_no_workflow' => 'Dokument nema tok rada',
'document_infos' => 'Informacije o dokumentu',
-'document_in_revision_no_date' => '',
-'document_is_checked_out' => '',
-'document_is_checked_out_remove' => '',
+'document_in_revision_no_date' => 'dokument u reviziji bez datuma',
+'document_is_checked_out' => 'dokument je odjavljen',
+'document_is_checked_out_remove' => 'dokument je odjavljen ukloniti',
'document_is_checked_out_update' => 'Dokument je trenutno odjavljen. Ako učitate novu verziju, tada odjavljena verzija ne može više biti ponovno prijavljena.',
'document_is_not_locked' => 'Ovaj dokument nije zaključan',
-'document_links' => '',
+'document_links' => 'poveznice dokumenata',
'document_link_by' => 'Povezao',
'document_link_public' => 'Javno',
'document_moved_email' => 'Premješten dokument',
@@ -491,7 +492,7 @@ Prijašnja mapa: [old_folder_path]
Nova mapa: [new_folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'document_moved_email_body_html' => '',
+'document_moved_email_body_html' => 'dokument premješten tijelo e-pošte html',
'document_moved_email_subject' => '[sitename]: [name] - Premješten dokument',
'document_notify_added_email' => 'Dodani ste na popis obavijesti',
'document_notify_added_email_body' => 'Dodano na popis obavijesti
@@ -499,16 +500,16 @@ Naziv: [name]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'document_notify_added_email_body_html' => '',
+'document_notify_added_email_body_html' => 'dokument obavijesti dodano tijelo e-pošte html',
'document_notify_added_email_subject' => '[sitename]: [name] - Dodano na popis obavijesti',
'document_notify_deleted_email' => 'Uklonjeni ste iz popisa obavijesti',
-'document_notify_deleted_email_body' => 'Ukonjeno iz popisa obavijesti
-
-Naziv: [name]
-Glavna mapa: [folder_path]
-Korisnik: [username]
+'document_notify_deleted_email_body' => 'Ukonjeno iz popisa obavijesti
+
+Naziv: [name]
+Glavna mapa: [folder_path]
+Korisnik: [username]
Internet poveznica: [url]',
-'document_notify_deleted_email_body_html' => '',
+'document_notify_deleted_email_body_html' => 'dokument obavijesti o izbrisanom tijelu e-pošte html',
'document_notify_deleted_email_subject' => '[sitename]: [name] - Ukonjeno iz popisa obavijesti',
'document_not_checkedout' => 'Dokument je odjavljen.',
'document_ownership_changed_email' => 'Promijenjen vlasnik',
@@ -519,7 +520,7 @@ Old owner: [old_owner]
New owner: [new_owner]
Korisnik: [username]
Internet poveznica: [url]',
-'document_ownership_changed_email_body_html' => '',
+'document_ownership_changed_email_body_html' => 'vlasništvo dokumenta promijenjeno tijelo e-pošte html',
'document_ownership_changed_email_subject' => '[sitename]: [name] - Promijenjen vlasnik',
'document_renamed_email' => 'Preimenovan dokument',
'document_renamed_email_body' => 'Promjenjen naziv dokumenta
@@ -528,7 +529,7 @@ Glavna mapa: [folder_path]
Prijašnji naziv: [old_name]
Korisnik: [username]
Internet poveznica: [url]',
-'document_renamed_email_body_html' => '',
+'document_renamed_email_body_html' => 'dokument je preimenovan u tijelo e-pošte html',
'document_renamed_email_subject' => '[sitename]: [name] - Preimenovan dokument',
'document_status_changed_email' => 'Promijenjen status dokumenta',
'document_status_changed_email_body' => 'Promijenjen status dokumenta
@@ -537,12 +538,12 @@ Status: [status]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'document_status_changed_email_body_html' => '',
+'document_status_changed_email_body_html' => 'status dokumenta promijenjen tijelo e-pošte html',
'document_status_changed_email_subject' => '[sitename]: [name] - Promijenjen status dokumenta',
'document_title' => 'Dokument \'[documentname]\'',
-'document_transfered_email_body' => '',
-'document_transfered_email_body_html' => '',
-'document_transfered_email_subject' => '',
+'document_transfered_email_body' => 'tijelo prenesenog dokumenta',
+'document_transfered_email_body_html' => 'dokument prenesen tijelo e-pošte html',
+'document_transfered_email_subject' => 'dokument prenesen predmet e-pošte',
'document_updated_email' => 'Ažuriran dokument',
'document_updated_email_body' => 'Ažuriran dokument
Dokument: [name]
@@ -551,53 +552,55 @@ Korisnik: [username]
Komentar: [comment]
Komentar verzije: [version_comment]
Internet poveznica: [url]',
-'document_updated_email_body_html' => '',
+'document_updated_email_body_html' => 'dokument ažuriran tijelo e-pošte html',
'document_updated_email_subject' => '[sitename]: [name] - Ažuriran dokument',
-'document_versions' => '',
+'document_versions' => 'verzije dokumenata',
'does_not_expire' => 'Ne istječe',
'does_not_inherit_access_msg' => 'Naslijedi nivo pristupa',
'download' => 'Preuzimanje',
-'download_extension' => '',
-'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' => '',
-'download_link_email_body' => '',
-'download_link_email_subject' => '',
-'do_no_transfer_to_user' => '',
+'download_extension' => 'proširenje za preuzimanje',
+'download_header_approval_comment' => 'download header approval comment',
+'download_header_approval_date' => 'datum odobrenja zaglavlja za preuzimanje',
+'download_header_approval_state' => 'stanje odobrenja zaglavlja preuzimanja',
+'download_header_approver' => 'preuzimanje odobrenja zaglavlja',
+'download_header_document_name' => 'naziv dokumenta zaglavlja za preuzimanje',
+'download_header_document_no' => 'preuzmi dokument zaglavlja br',
+'download_header_filename' => 'naziv datoteke zaglavlja za preuzimanje',
+'download_header_folder_name' => 'naziv mape zaglavlja za preuzimanje',
+'download_header_folder_no' => 'mapa zaglavlja za preuzimanje br',
+'download_header_internal_version' => 'interna verzija zaglavlja za preuzimanje',
+'download_header_reviewer' => 'preglednik zaglavlja za preuzimanje',
+'download_header_review_comment' => 'download header review comment',
+'download_header_review_date' => 'datum pregleda zaglavlja za preuzimanje',
+'download_header_review_state' => 'stanje pregleda zaglavlja preuzimanja',
+'download_header_state' => 'stanje zaglavlja preuzimanja',
+'download_links' => 'linkovi za preuzimanje',
+'download_link_email_body' => 'link za preuzimanje tijelo e-pošte',
+'download_link_email_subject' => 'link za preuzimanje predmet e-pošte',
+'do_no_transfer_to_user' => 'nemojte prenositi korisniku',
'do_object_repair' => 'Popravi sve mape i dokumente.',
'do_object_setchecksum' => 'Postavi kontrolnu sumu',
'do_object_setfilesize' => 'Postavi veličinu datoteke',
-'do_object_setfiletype' => '',
+'do_object_setfiletype' => 'napraviti objekt setfiletype',
'do_object_unlink' => 'Izbriši verziju dokumenta',
'draft' => 'Nacrt',
'draft_pending_approval' => 'Skica - čeka odobrenje',
'draft_pending_review' => 'Skica - čeka pregled',
'drag_icon_here' => 'Ovdje povuci ikonu mape ili dokumenta!',
-'dropfolderdir_missing' => '',
+'dropfolderdir_missing' => 'dropfolderdir nedostaje',
'dropfolder_file' => 'Datoteka iz padajuće mape',
-'dropfolder_folder' => '',
-'dropfolder_metadata' => '',
+'dropfolder_folder' => 'folder dropfolder',
+'dropfolder_metadata' => 'metapodaci padajuće mape',
'dropupload' => 'Zona za brzo učitavanje',
'drop_files_here' => 'Ovdje ispusti datoteku!',
-'drop_files_here_or_click' => '',
+'drop_files_here_or_click' => 'ispustite datoteke ovdje ili kliknite',
'dump_creation' => 'Izrada odlagališta baze podataka',
'dump_creation_warning' => 'Ovom radnjom možete stvoriti datoteku za odlaganje sadržaja vaše baze podataka. Nakon izrade datoteka za odlaganje će biti pohranjena u podatkovnoj mapi na vašem serveru.',
'dump_list' => 'Postojeće datoteke za odlaganje',
'dump_remove' => 'Ukloni datoteku za odlaganje',
'duplicates' => 'duplikati',
'duplicate_content' => 'Duplicirani sadržaj',
-'duplicate_sequences' => '',
+'duplicate_sequences' => 'duplicirane sekvence',
'edit' => 'Uredi',
'edit_attributes' => 'Uredi atribute',
'edit_comment' => 'Uredi komentar',
@@ -607,110 +610,112 @@ Internet poveznica: [url]',
'edit_document_props' => 'Uredi dokument',
'edit_event' => 'Uredi događaj',
'edit_existing_access' => 'Uredi popis pristupa',
-'edit_existing_attribute_groups' => '',
+'edit_existing_attribute_groups' => 'uredite postojeće grupe atributa',
'edit_existing_notify' => 'Uredi popis za primanje obavijesti',
'edit_folder_access' => 'Uredi pristup',
-'edit_folder_attrdefgrp' => '',
+'edit_folder_attrdefgrp' => 'uredi mapu attrdefgrp',
'edit_folder_notify' => 'Popis za obavijesti o mapi',
'edit_folder_props' => 'Uredi mapu',
'edit_group' => 'Uredi mapu',
-'edit_online' => '',
-'edit_online_not_allowed' => '',
-'edit_online_warning' => '',
-'edit_task' => '',
+'edit_online' => 'uređivati online',
+'edit_online_not_allowed' => 'uređivanje online nije dopušteno',
+'edit_online_warning' => 'uredi mrežno upozorenje',
+'edit_task' => 'uredi zadatak',
'edit_transmittal_props' => 'Izmjena postavki proslijeđivanja',
'edit_user' => 'Uredi korisnika',
'edit_user_details' => 'Uredi detalje korisnika',
-'edit_version' => '',
+'edit_version' => 'uredi verziju',
'el_GR' => 'Grčki',
'email' => 'Email',
'email_error_title' => 'Nema ulaznog emaila',
'email_footer' => 'Koristeći funckcije \'Moj račun\' možete promijeniti postavke email obavještavanja.',
-'email_footer_html' => '',
+'email_footer_html' => 'podnožje e-pošte html',
'email_header' => 'Ovo je automatski generirana poruka iz DMS sustava',
-'email_header_html' => '',
+'email_header_html' => 'zaglavlje e-pošte html',
'email_not_given' => 'Molimo unesite valjanu email adresu.',
-'empty_attribute_group_list' => '',
+'empty_attribute_group_list' => 'prazan popis grupa atributa',
'empty_folder_list' => 'Nema dokumenata ili mapa',
-'empty_list' => '',
+'empty_list' => 'prazna lista',
'empty_notify_list' => 'Nema zapisa',
-'enable_extension' => '',
-'enddate' => '',
+'enable_extension' => 'omogućiti proširenje',
+'enddate' => 'datum završetka',
'en_GB' => 'Engleski (GB)',
'equal_transition_states' => 'Početni i završni status su jednaki',
'error' => 'Greška',
-'error_add_aro' => '',
-'error_add_permission' => '',
-'error_cleared_cache' => '',
-'error_document_indexed' => '',
-'error_edit_task' => '',
-'error_extension_getlist' => '',
-'error_importfs' => '',
+'error_add_aro' => 'pogreška dodati aro',
+'error_add_permission' => 'greška dodaj dozvolu',
+'error_cleared_cache' => 'pogreška očišćena predmemorija',
+'error_document_indexed' => 'dokument o pogrešci indeksiran',
+'error_edit_task' => 'zadatak uređivanja pogreške',
+'error_extension_getlist' => 'error extension getlist',
+'error_importfs' => 'error importfs',
'error_no_document_selected' => 'Nije odabran dokument',
'error_no_folder_selected' => 'Nije odabrana mapa',
'error_occured' => 'Dogodila se greška',
-'error_remove_document' => '',
-'error_remove_folder' => '',
-'error_remove_permission' => '',
-'error_rm_user_processes' => '',
-'error_rm_user_processes_no_docs' => '',
-'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' => 'pogreška ukloniti dokument',
+'error_remove_folder' => 'pogreška uklanjanje mape',
+'error_remove_permission' => 'pogreška ukloniti dozvolu',
+'error_rm_user_processes' => 'greška rm korisničkih procesa',
+'error_rm_user_processes_no_docs' => 'greška rm korisnički procesi nema dokumenata',
+'error_rm_workflow' => 'error rm tijek rada',
+'error_rm_workflow_action' => 'error rm radnja tijeka rada',
+'error_rm_workflow_state' => 'error rm stanje tijeka rada',
+'error_toogle_permission' => 'pogreška prebaci dopuštenje',
+'error_transfer_document' => 'isprava o prijenosu pogreške',
+'error_trigger_workflow' => 'tijek rada pokretača pogreške',
+'error_update_document' => 'dokument ažuriranja pogreške',
+'error_uploading_reviewer_only' => 'pogreška pri učitavanju samo recenzenta',
'es_ES' => 'Španjolski',
-'event' => '',
+'event' => 'događaj',
'event_details' => 'Detalji događaja',
'exclude_items' => 'Isključivanje stavki',
'expired' => 'Isteklo',
-'expired_at_date' => '',
-'expired_docs_mail_subject' => '',
+'expired_at_date' => 'istekao na datum',
+'expired_docs_mail_subject' => 'predmet pošte istekli dokumenti',
'expired_documents' => 'Istekli dokumenti',
'expires' => 'Datum isteka',
'expire_by_date' => 'Istječe po datumu',
-'expire_in_1d' => '',
-'expire_in_1h' => '',
+'expire_in_1d' => 'isteći za 1d',
+'expire_in_1h' => 'ističe za 1h',
'expire_in_1m' => 'Istječe za 1 mjesec',
'expire_in_1w' => 'Istječe za 1 tjedan',
'expire_in_1y' => 'Istječe za 1 godinu',
-'expire_in_24h' => '',
-'expire_in_2h' => '',
+'expire_in_24h' => 'ističe za 24h',
+'expire_in_2h' => 'ističe za 2h',
'expire_in_2y' => 'Istječe za 2 godine',
-'expire_in_3y' => '',
-'expire_today' => '',
-'expire_tomorrow' => '',
+'expire_in_3y' => 'ističe za 3 god',
+'expire_today' => 'ističe danas',
+'expire_tomorrow' => 'ističe sutra',
'expiry_changed_email' => 'Promijenjen datum isteka',
'expiry_changed_email_body' => 'Promijenjen datum isteka
Dokument: [name]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'expiry_changed_email_body_html' => '',
+'expiry_changed_email_body_html' => 'istek promijenio tijelo e-pošte html',
'expiry_changed_email_subject' => '[sitename]: [name] - Promijenjen datum isteka',
'export' => 'Izvoz',
-'export_user_list_csv' => '',
-'extension_archive' => '',
+'export_user_list_csv' => 'izvoz popisa korisnika csv',
+'extension_archive' => 'arhiva proširenja',
'extension_changelog' => 'Popis promjena',
-'extension_is_off_now' => '',
-'extension_is_on_now' => '',
+'extension_config' => '',
+'extension_info' => '',
+'extension_is_off_now' => 'proširenje je sada isključeno',
+'extension_is_on_now' => 'proširenje je sada uključeno',
'extension_loading' => 'Učitavanje dodataka…',
'extension_manager' => 'Upravljanje ekstenzijama',
-'extension_mgr_error_upload' => '',
-'extension_mgr_installed' => '',
-'extension_mgr_no_toggle' => '',
+'extension_mgr_error_upload' => 'pogreška učitavanja upravitelja proširenja',
+'extension_mgr_installed' => 'proširenje mgr instalirano',
+'extension_mgr_no_toggle' => 'ekstenzija mgr bez prebacivanja',
'extension_mgr_no_upload' => 'Upload novih ekstenzija nije moguć pošto mapa ekstenzija nema dozvolu pisanja',
-'extension_mgr_no_zipfile' => '',
+'extension_mgr_no_zipfile' => 'proširenje mgr bez zip datoteke',
'extension_mgr_repository' => 'Dostupno',
-'extension_mgr_upload_disabled' => '',
-'extension_missing_name' => '',
-'extension_readme' => '',
-'extension_toggle_error' => '',
+'extension_mgr_upload_disabled' => 'onemogućeno učitavanje upravitelja proširenja',
+'extension_missing_name' => 'proširenju nedostaje ime',
+'extension_readme' => 'proširenje readme',
+'extension_toggle_error' => 'pogreška prebacivanja proširenja',
'extension_version_list' => 'Inačice',
-'facetfullsearch' => '',
+'facetfullsearch' => 'facetfullsearch',
'february' => 'Veljača',
'file' => 'Datoteka',
'files' => 'Datoteke',
@@ -718,28 +723,28 @@ Internet poveznica: [url]',
'files_deletion' => 'Brisanje datoteke',
'files_deletion_warning' => 'Ovom opcijom možete izbrisati sve datoteke ili cjelokupne DMS mape. Informacije o verzijama će ostati vidljive.',
'files_loading' => 'Molimo pričekati dok se ne učita lista datoteka...',
-'filetype' => '',
+'filetype' => 'vrsta datoteke',
'filter_for_documents' => 'Dodatni filter za dokumente',
-'filter_for_documents_and_folders' => '',
+'filter_for_documents_and_folders' => 'filter za dokumente i mape',
'filter_for_folders' => 'Dodatni filter za dokumente',
-'finished_workflow_log' => '',
+'finished_workflow_log' => 'gotov dnevnik tijeka rada',
'folder' => 'Mapa',
'folders' => 'Mape',
'folders_and_documents_statistic' => 'Pregled sadržaja',
-'folders_with_notification' => '',
-'folder_access_permission_changed_email_body' => 'Dozvola je promijenjena
-Dokument: [name]
-Glavna mapa: [folder_path]
-Korisnik: [username]
+'folders_with_notification' => 'mape s obavijestima',
+'folder_access_permission_changed_email_body' => 'Dozvola je promijenjena
+Dokument: [name]
+Glavna mapa: [folder_path]
+Korisnik: [username]
Internet poveznica: [url]',
-'folder_access_permission_changed_email_body_html' => '',
+'folder_access_permission_changed_email_body_html' => 'dopuštenje za pristup mapi promijenjeno tijelo e-pošte html',
'folder_access_permission_changed_email_subject' => '[sitename]: [name] - Dozvola je promijenjena',
-'folder_attribute_added_email_body' => '',
-'folder_attribute_added_email_body_html' => '',
-'folder_attribute_added_email_subject' => '',
-'folder_attribute_changed_email_body' => '',
-'folder_attribute_changed_email_body_html' => '',
-'folder_attribute_changed_email_subject' => '',
+'folder_attribute_added_email_body' => 'atribut mape dodan tijelo e-pošte',
+'folder_attribute_added_email_body_html' => 'atribut mape dodan tijelo e-pošte html',
+'folder_attribute_added_email_subject' => 'atribut mape dodan predmet e-pošte',
+'folder_attribute_changed_email_body' => 'atribut mape promijenio tijelo e-pošte',
+'folder_attribute_changed_email_body_html' => 'mapa atribut promijenjen tijelo e-pošte html',
+'folder_attribute_changed_email_subject' => 'atribut mape promijenio predmet e-pošte',
'folder_comment_changed_email' => 'Promijenjen komentar',
'folder_comment_changed_email_body' => 'Promijenjen komentar
Mapa: [name]
@@ -748,17 +753,17 @@ Komentar: [new_comment]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'folder_comment_changed_email_body_html' => '',
+'folder_comment_changed_email_body_html' => 'mapa komentar promijenjen tijelo e-pošte html',
'folder_comment_changed_email_subject' => '[sitename]: [name] - Promijenjen komentar',
'folder_contents' => 'Sadržaj mape',
'folder_deleted_email' => 'Izbrisana mapa',
-'folder_deleted_email_body' => 'Izbrisana mapa
-
-Mapa: [name]
-Glavna mapa: [folder_path]
-Korisnik: [username]
+'folder_deleted_email_body' => 'Izbrisana mapa
+
+Mapa: [name]
+Glavna mapa: [folder_path]
+Korisnik: [username]
Internet poveznica: [url]',
-'folder_deleted_email_body_html' => '',
+'folder_deleted_email_body_html' => 'mapa izbrisano tijelo e-pošte html',
'folder_deleted_email_subject' => '[sitename]: [name] - Izbrisana mapa',
'folder_infos' => 'Informacije o mapi',
'folder_moved_email' => 'Premještena mapa',
@@ -768,32 +773,32 @@ Prijašnja mapa: [old_folder_path]
Nova mapa: [new_folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'folder_moved_email_body_html' => '',
+'folder_moved_email_body_html' => 'mapa premještena tijelo e-pošte html',
'folder_moved_email_subject' => '[sitename]: [name] - Premještena mapa',
-'folder_notify_added_email' => '',
-'folder_notify_added_email_body' => 'Dodano na popis obavijesti
-Naziv: [name]
-Glavna mapa: [folder_path]
-Korisnik: [username]
+'folder_notify_added_email' => 'mapa obavijesti o dodanoj e-pošti',
+'folder_notify_added_email_body' => 'Dodano na popis obavijesti
+Naziv: [name]
+Glavna mapa: [folder_path]
+Korisnik: [username]
Internet poveznica: [url]',
-'folder_notify_added_email_body_html' => '',
+'folder_notify_added_email_body_html' => 'mapa notify dodano tijelo e-pošte html',
'folder_notify_added_email_subject' => '[sitename]: [name] - Dodano na popis obavijesti',
-'folder_notify_deleted_email_body' => 'Ukonjeno iz popisa obavijesti
-
-Naziv: [name]
-Glavna mapa: [folder_path]
-Korisnik: [username]
+'folder_notify_deleted_email_body' => 'Ukonjeno iz popisa obavijesti
+
+Naziv: [name]
+Glavna mapa: [folder_path]
+Korisnik: [username]
Internet poveznica: [url]',
-'folder_notify_deleted_email_body_html' => '',
+'folder_notify_deleted_email_body_html' => 'folder notify deleted email body html',
'folder_notify_deleted_email_subject' => '[sitename]: [name] - Ukonjeno iz popisa obavijesti',
-'folder_ownership_changed_email_body' => 'Promijenjen vlasnik
-Dokument: [name]
-Glavna mapa: [folder_path]
-Old owner: [old_owner]
-New owner: [new_owner]
-Korisnik: [username]
+'folder_ownership_changed_email_body' => 'Promijenjen vlasnik
+Dokument: [name]
+Glavna mapa: [folder_path]
+Old owner: [old_owner]
+New owner: [new_owner]
+Korisnik: [username]
Internet poveznica: [url]',
-'folder_ownership_changed_email_body_html' => '',
+'folder_ownership_changed_email_body_html' => 'vlasništvo mape promijenjeno tijelo e-pošte html',
'folder_ownership_changed_email_subject' => '[sitename]: [name] - Promijenjen vlasnik',
'folder_renamed_email' => 'Preimenovana mapa',
'folder_renamed_email_body' => 'Preimenovana mapa
@@ -802,26 +807,26 @@ Glavna mapa: [folder_path]
Old name: [old_name]
Korisnik: [username]
Internet poveznica: [url]',
-'folder_renamed_email_body_html' => '',
+'folder_renamed_email_body_html' => 'mapa preimenovana u tijelo e-pošte html',
'folder_renamed_email_subject' => '[sitename]: [name] - Preimenovana mapa',
'folder_title' => 'Mapa \'[foldername]\'',
-'foot_note' => '',
-'force_update' => '',
+'foot_note' => 'fusnota',
+'force_update' => 'prisilno ažuriranje',
'friday' => 'Petak',
'friday_abbr' => 'Pe',
'from' => 'Od',
'fr_FR' => 'Francuski',
'fullsearch' => 'Pretraživanje cijelog teksta',
'fullsearch_hint' => 'Koristi indeks cijelog teksta',
-'fulltextsearch_disabled' => '',
+'fulltextsearch_disabled' => 'onemogućeno pretraživanje punog teksta',
'fulltext_converters' => 'Pretvorba indeksa dokumenta',
'fulltext_info' => 'Informacije cijelog teksta',
-'func_proc_open_missing' => '',
-'global_attributedefinitiongroups' => '',
+'func_proc_open_missing' => 'nedostaje func proc open',
+'global_attributedefinitiongroups' => 'globalne grupe za definiranje atributa',
'global_attributedefinitions' => 'Atributi',
'global_default_keywords' => 'Globalne ključne riječi',
'global_document_categories' => 'Kategorije',
-'global_link_types' => '',
+'global_link_types' => 'globalne vrste veza',
'global_workflows' => 'Tokovi rada',
'global_workflow_actions' => 'Radnje toka rada',
'global_workflow_states' => 'Statusi toka rada',
@@ -829,25 +834,25 @@ Internet poveznica: [url]',
'groups' => 'Grupe',
'group_approval_summary' => 'Pregled odobrenja grupe',
'group_exists' => 'Grupa već postoji.',
-'group_info' => '',
-'group_is_mandatory_approver' => '',
-'group_is_mandatory_reviewer' => '',
+'group_info' => 'informacije o grupi',
+'group_is_mandatory_approver' => 'grupa je obvezni odobravatelj',
+'group_is_mandatory_reviewer' => 'grupa je obvezni recenzent',
'group_management' => 'Upravljanje grupama',
'group_members' => 'Članovi grupe',
-'group_previously_removed_from_approvers' => '',
-'group_previously_removed_from_recipients' => '',
-'group_previously_removed_from_reviewers' => '',
-'group_previously_removed_from_revisors' => '',
+'group_previously_removed_from_approvers' => 'grupa prethodno uklonjena iz odobravatelja',
+'group_previously_removed_from_recipients' => 'grupa prethodno uklonjena iz primatelja',
+'group_previously_removed_from_reviewers' => 'grupa prethodno uklonjena iz recenzenata',
+'group_previously_removed_from_revisors' => 'grupa prethodno uklonjena iz redaktora',
'group_receipt_summary' => 'Sažetak prijema za grupu',
-'group_review_removed' => '',
+'group_review_removed' => 'pregled grupe uklonjen',
'group_review_summary' => 'Sažetak pregleda grupe',
-'group_revision_summary' => '',
+'group_revision_summary' => 'sažetak grupne revizije',
'guest_login' => 'Prijavite se kao gost',
'guest_login_disabled' => 'Prijava "kao gost" je onemogućena.',
-'hash' => '',
+'hash' => 'hash',
'help' => 'Pomoć',
'home_folder' => 'Početna mapa',
-'hook_name' => '',
+'hook_name' => 'naziv udice',
'hourly' => 'Po satima',
'hours' => 'sati',
'hr_HR' => 'Hrvatski',
@@ -856,46 +861,46 @@ Internet poveznica: [url]',
'id' => 'ID',
'identical_version' => 'Nova verzija je identična trenutnoj verziji.',
'id_ID' => 'Indonezija',
-'import' => '',
-'importfs' => '',
-'import_extension' => '',
+'import' => 'uvoz',
+'importfs' => 'importfs',
+'import_extension' => 'proširenje uvoza',
'import_fs' => 'Importaj iz FS-a',
-'import_fs_warning' => '',
+'import_fs_warning' => 'import fs upozorenje',
'import_users' => 'Uvezi korisnike',
-'import_users_addnew' => '',
-'import_users_no_column_mapping' => '',
-'import_users_update' => '',
+'import_users_addnew' => 'uvoz korisnika addnew',
+'import_users_no_column_mapping' => 'uvoz korisnika bez preslikavanja stupaca',
+'import_users_update' => 'uvoz ažuriranja korisnika',
'include_content' => 'Uključi sadržaj',
'include_documents' => 'Sadrži dokumente',
'include_subdirectories' => 'Sadrži podmape',
-'indexing_tasks_in_queue' => '',
-'index_converters' => '',
-'index_document_added' => '',
-'index_document_unchanged' => '',
-'index_document_updated' => '',
-'index_done' => '',
-'index_error' => '',
+'indexing_tasks_in_queue' => 'indeksiranje zadataka u redu',
+'index_converters' => 'pretvarači indeksa',
+'index_document_added' => 'indeksni dokument dodan',
+'index_document_unchanged' => 'indeksni dokument nepromijenjen',
+'index_document_updated' => 'indeksni dokument ažuriran',
+'index_done' => 'indeks gotov',
+'index_error' => 'pogreška indeksa',
'index_folder' => 'Mapa indeksa',
-'index_folder_added' => '',
-'index_folder_unchanged' => '',
-'index_folder_updated' => '',
-'index_no_content' => '',
-'index_pending' => '',
-'index_processing' => '',
-'index_waiting' => '',
+'index_folder_added' => 'dodana indeksna mapa',
+'index_folder_unchanged' => 'indeksna mapa nepromijenjena',
+'index_folder_updated' => 'ažurirana indeksna mapa',
+'index_no_content' => 'indeks nema sadržaja',
+'index_pending' => 'indeks na čekanju',
+'index_processing' => 'obrada indeksa',
+'index_waiting' => 'indeks čekanja',
'individuals' => 'Pojedinci',
-'individuals_in_groups' => '',
-'ind_review_removed' => '',
-'info_recipients_tab_not_released' => '',
-'info_rm_user_from_processes_none' => '',
-'info_rm_user_from_processes_user' => '',
+'individuals_in_groups' => 'pojedinci u grupama',
+'ind_review_removed' => 'ind pregled uklonjen',
+'info_recipients_tab_not_released' => 'kartica primatelja informacija nije objavljena',
+'info_rm_user_from_processes_none' => 'info rm korisnik iz procesa nijedan',
+'info_rm_user_from_processes_user' => 'info rm korisnik iz procesa korisnik',
'inherited' => 'naslijeđeno',
'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.',
-'insecure_installation' => '',
-'installed_apache_extensions' => '',
-'installed_php_extensions' => '',
+'insecure_installation' => 'nesigurna instalacija',
+'installed_apache_extensions' => 'instaliranih apache ekstenzija',
+'installed_php_extensions' => 'instalirane php ekstenzije',
'internal_error' => 'Interna greška',
'internal_error_exit' => 'Interna greška. Ne mogu završiti zahtjev.',
'invalid_access_mode' => 'Pogrešan način pristupa',
@@ -904,8 +909,8 @@ Internet poveznica: [url]',
'invalid_create_date_end' => 'Pogrešan krajnji datum za izradu vremenskog raspona.',
'invalid_create_date_start' => 'Pogrešan početni datum za izradu vremenskog raspona.',
'invalid_doc_id' => 'Pogrešan ID dokumenta',
-'invalid_dropfolder_folder' => '',
-'invalid_expiration_date' => '',
+'invalid_dropfolder_folder' => 'nevažeća mapa padajuće mape',
+'invalid_expiration_date' => 'nevažeći datum isteka',
'invalid_expiration_date_end' => 'Neispravan datum isteka za datumski raspon isteka.',
'invalid_expiration_date_start' => 'Neispravan početni datum za datumski raspon isteka.',
'invalid_file_id' => 'Pogrešan ID datoteke',
@@ -920,26 +925,26 @@ Internet poveznica: [url]',
'invalid_target_folder' => 'Pogrešan ID ciljane mape',
'invalid_user_id' => 'Pogrešan ID korisnika',
'invalid_version' => 'Pogrešna verzija dokumenta',
-'in_folder' => '',
+'in_folder' => 'u mapi',
'in_revision' => 'U reviziji',
'in_workflow' => 'U toku rada',
-'iptc_metadata' => '',
+'iptc_metadata' => 'iptc metapodaci',
'is_disabled' => 'Onemogući klijenta',
'is_hidden' => 'Sakrij iz popisa korisnika',
'it_IT' => 'Talijanski',
'january' => 'Siječanj',
-'js_confirm_cancel_checkout' => '',
-'js_form_error' => '',
-'js_form_errors' => '',
-'js_invalid_email' => '',
+'js_confirm_cancel_checkout' => 'js potvrdi odustani od naplate',
+'js_form_error' => 'js pogreška obrasca',
+'js_form_errors' => 'js pogreške obrasca',
+'js_invalid_email' => 'js nevažeća e-pošta',
'js_no_approval_group' => 'Molim odaberite grupu odobrenja',
'js_no_approval_status' => 'Molim odaberite status odobrenja',
'js_no_comment' => 'Nema komentara',
-'js_no_currentpwd' => '',
-'js_no_document' => '',
+'js_no_currentpwd' => 'js nema currentpwd',
+'js_no_document' => 'js nema dokumenta',
'js_no_email' => 'Upišite vašu e-mail adresu',
'js_no_file' => 'Molim odaberite datoteku',
-'js_no_folder' => '',
+'js_no_folder' => 'js nema mape',
'js_no_keywords' => 'Odredite neke ključne riječi',
'js_no_login' => 'Molim upišite korisničko ime',
'js_no_name' => 'MOlim upišite naziv',
@@ -951,7 +956,7 @@ Internet poveznica: [url]',
'js_pwd_not_conf' => 'Lozinka i potvrda lozinke nisu jednake',
'js_select_user' => 'Molim odaberite korisnika',
'js_select_user_or_group' => 'Odaberite barem korisnika ili grupu',
-'js_unequal_passwords' => '',
+'js_unequal_passwords' => 'js nejednake lozinke',
'july' => 'Srpanj',
'june' => 'Lipanj',
'keep' => 'Ne mijenjaj',
@@ -963,35 +968,35 @@ Internet poveznica: [url]',
'language' => 'Jezik',
'lastaccess' => 'Zadnji pristup',
'last_update' => 'Zadnje ažuriranje',
-'latest_newdocuments' => '',
-'latest_statuschange' => '',
-'latest_updateddocuments' => '',
+'latest_newdocuments' => 'najnoviji novi dokumenti',
+'latest_statuschange' => 'posljednja promjena statusa',
+'latest_updateddocuments' => 'najnoviji ažurirani dokumenti',
'legend' => 'Kazalo',
'librarydoc' => 'Dokument iz biblioteke',
-'linked_document' => '',
+'linked_document' => 'povezani dokument',
'linked_documents' => 'Vezani dokumenti',
'linked_files' => 'Prilozi',
'linked_to_current_version' => 'Povezano sa trenutnom verzijom',
-'linked_to_document' => '',
-'linked_to_this_version' => '',
+'linked_to_document' => 'povezan s dokumentom',
+'linked_to_this_version' => 'povezan s ovom verzijom',
'link_alt_updatedocument' => 'Ako želite prenijeti datoteke veće od trenutne maksimalne veličine prijenosa, molimo koristite alternativu upload page.',
-'link_document' => '',
-'link_to_version' => '',
+'link_document' => 'link dokument',
+'link_to_version' => 'poveznica na verziju',
'list_access_rights' => 'Izlistaj sve dozvole pristupa',
-'list_contains_no_access_docs' => '',
-'list_conversion_overview' => '',
-'list_conversion_services' => '',
+'list_contains_no_access_docs' => 'popis ne sadrži pristupne dokumente',
+'list_conversion_overview' => 'pregled pretvorbe popisa',
+'list_conversion_services' => 'usluge pretvorbe popisa',
'list_hooks' => 'Kuke za popise',
-'list_notification_services' => '',
-'list_of_recipients_has_disabled_users' => '',
-'list_tasks' => '',
+'list_notification_services' => 'popis usluga obavijesti',
+'list_of_recipients_has_disabled_users' => 'popis primatelja ima onemogućene korisnike',
+'list_tasks' => 'popis zadataka',
'local_file' => 'Lokalna datoteka',
'locked_by' => 'Zaključao',
'lock_document' => 'Zaključaj',
'lock_message' => 'Ovaj dokument je zaključao [username]. Samo ovlašteni korisnici mogu otključati ovaj dokument.',
'lock_status' => 'Status',
-'logfile' => '',
-'logfile_loading' => '',
+'logfile' => 'zapisnička datoteka',
+'logfile_loading' => 'učitavanje datoteke dnevnika',
'login' => 'Prijava',
'login_disabled_text' => 'Vaš korisnički račun je onemogućen, vjerojatno zbog previše neispravnih prijava.',
'login_disabled_title' => 'Korisnički račun je onemogućen',
@@ -999,11 +1004,11 @@ Internet poveznica: [url]',
'login_error_title' => 'Greška kod prijave',
'login_not_given' => 'Nije isporučeno korisničko ime',
'login_ok' => 'Uspješna prijava',
-'login_restrictions_apply' => '',
+'login_restrictions_apply' => 'primjenjuju se ograničenja prijave',
'logout' => 'Odjava',
'log_management' => 'Upravljanje datotekama zapisa',
'lo_LA' => 'Laocijanski',
-'malformed_expiration_date' => '',
+'malformed_expiration_date' => 'pogrešno oblikovan datum isteka',
'manager' => 'Upravitelj',
'manager_of_group' => 'Vi ste upravitelj ove grupe',
'mandatory_approvergroups' => 'Obavezne grupe validatora',
@@ -1015,63 +1020,63 @@ Internet poveznica: [url]',
'mandatory_reviewers' => 'Obavezni recezenti',
'mandatory_reviewer_no_access' => 'Recezenti \'[user]\' nemaju dovoljno prava pristupa.',
'march' => 'Ožujak',
-'mark_document' => '',
-'mark_folder' => '',
+'mark_document' => 'označiti dokument',
+'mark_folder' => 'označi mapu',
'max_upload_size' => 'Max. veličina za prijenos',
'may' => 'Svibanj',
-'menu_dropfolder' => '',
-'menu_upload_from_dropfolder' => '',
-'message' => '',
+'menu_dropfolder' => 'padajuća mapa izbornika',
+'menu_upload_from_dropfolder' => 'prijenos izbornika iz dropfoldera',
+'message' => 'poruka',
'mimetype' => 'Mime type',
'minutes' => 'minute',
'misc' => 'Razno',
'missing_checksum' => 'Nedostaje kontrolna suma',
-'missing_file' => '',
+'missing_file' => 'nedostaje datoteka',
'missing_filesize' => 'Nedostaje veličina datoteke',
-'missing_func_class_note' => '',
-'missing_php_class' => '',
-'missing_php_extension' => '',
-'missing_php_extensions' => '',
-'missing_php_function' => '',
-'missing_php_functions_and_classes' => '',
-'missing_reception' => '',
-'missing_request_object' => '',
+'missing_func_class_note' => 'nedostaje napomena o klasi func',
+'missing_php_class' => 'nedostaje php klasa',
+'missing_php_extension' => 'nedostaje php ekstenzija',
+'missing_php_extensions' => 'nedostaju php ekstenzije',
+'missing_php_function' => 'nedostaje php funkcija',
+'missing_php_functions_and_classes' => 'nedostaju php funkcije i klase',
+'missing_reception' => 'nedostaje prijem',
+'missing_request_object' => 'nedostajući objekt zahtjeva',
'missing_transition_user_group' => 'Nedostaje korisnik/grupa za promjenu',
-'modification_date' => '',
-'modified' => '',
+'modification_date' => 'datum izmjene',
+'modified' => 'modificiran',
'monday' => 'Ponedjeljak',
'monday_abbr' => 'Po',
'monthly' => 'Mjesečno',
'month_view' => 'Pregled po mjesecu',
-'more_objects_loading' => '',
+'more_objects_loading' => 'učitavanje više objekata',
'move' => 'Premjesti',
'move_clipboard' => 'Premjesti međuspremnik',
'move_document' => 'Premjesti dokument',
'move_folder' => 'Premjesti mapu',
-'move_into_rootfolder' => '',
-'must_drop_one_file' => '',
+'move_into_rootfolder' => 'premjestiti u korijensku mapu',
+'must_drop_one_file' => 'mora ispustiti jednu datoteku',
'my_account' => 'Moj korisnički račun',
'my_documents' => 'Moji dokumenti',
'my_transmittals' => 'Moja proslijeđivanja',
'name' => 'Naziv',
-'nav_brand_admin_tools' => '',
-'nav_brand_calendar' => '',
-'nav_brand_my_account' => '',
-'nav_brand_my_documents' => '',
-'nav_brand_view_document' => '',
-'nav_brand_view_folder' => '',
+'nav_brand_admin_tools' => 'Admin alati',
+'nav_brand_calendar' => 'kalendar',
+'nav_brand_my_account' => 'moj račun',
+'nav_brand_my_documents' => 'moji dokumenti',
+'nav_brand_view_document' => 'dokument za pregled',
+'nav_brand_view_folder' => 'Mape',
'nb_NO' => 'Norveški',
-'needs_correction' => '',
+'needs_correction' => 'treba ispravak',
'needs_workflow_action' => 'Ovaj dokument zahtjeva vašu pažnju. Molimo provjerite karticu toka rada.',
-'network_drive' => '',
+'network_drive' => 'mrežni pogon',
'never' => 'nikada',
'new' => 'Novo',
'new_attrdef' => 'Dodaj definiciju atributa',
'new_default_keywords' => 'Dodaj ključne riječi',
'new_default_keyword_category' => 'Dodaj kategoriju',
-'new_documents' => '',
-'new_documents_today' => '',
-'new_documents_yesterday' => '',
+'new_documents' => 'novi dokumenti',
+'new_documents_today' => 'novi dokumenti danas',
+'new_documents_yesterday' => 'novi dokumenti jučer',
'new_document_category' => 'Dodaj kategoriju',
'new_document_email' => 'Novi dokument',
'new_document_email_body' => 'Novi dokument
@@ -1081,7 +1086,7 @@ Komentar: [comment]
Version comment: [version_comment]
Korisnik: [username]
Internet poveznica: [url]',
-'new_document_email_body_html' => '',
+'new_document_email_body_html' => 'novi dokument e-mail tijelo html',
'new_document_email_subject' => '[sitename]: [folder_name] - Novi dokument',
'new_file_email' => 'Novi privitak',
'new_file_email_body' => 'Novi privitak dokumenta: [name]
@@ -1089,10 +1094,10 @@ Dokument: [document]
Komentar: [comment]
Korisnik: [username]
Internet poveznica: [url]',
-'new_file_email_body_html' => '',
+'new_file_email_body_html' => 'nova datoteka tijelo e-pošte html',
'new_file_email_subject' => '[sitename]: [document] - Novi privitak',
'new_folder' => 'Nova mapa',
-'new_link_type' => '',
+'new_link_type' => 'nova vrsta veze',
'new_password' => 'Nova lozinka',
'new_subfolder_email' => 'Nova mapa',
'new_subfolder_email_body' => 'Nova mapa
@@ -1101,43 +1106,43 @@ Glavna mapa: [folder_path]
Komentar: [comment]
Korisnik: [username]
Internet poveznica: [url]',
-'new_subfolder_email_body_html' => '',
+'new_subfolder_email_body_html' => 'nova podmapa tijelo e-pošte html',
'new_subfolder_email_subject' => '[sitename]: [name] - Nova mapa',
'new_user_image' => 'Nova slika',
-'next_revision_abbr' => '',
+'next_revision_abbr' => 'sljedeća revizija skr',
'next_state' => 'Slijedeći status',
'nl_NL' => 'Nizozemski',
'no' => 'Ne',
-'notification' => '',
-'notification_msg_tmpl' => '',
-'notification_recvtype' => '',
-'notification_recv_any' => '',
-'notification_recv_approver' => '',
-'notification_recv_notification' => '',
-'notification_recv_owner' => '',
-'notification_recv_reviewer' => '',
-'notification_recv_uploader' => '',
-'notification_recv_workflow' => '',
-'notification_service_no_filter' => '',
-'notification_tmpl' => '',
-'not_subscribed' => '',
+'notification' => 'obavijest',
+'notification_msg_tmpl' => 'poruka obavijesti tmpl',
+'notification_recvtype' => 'tip primanja obavijesti',
+'notification_recv_any' => 'obavijest recv bilo koji',
+'notification_recv_approver' => 'notification recv approver',
+'notification_recv_notification' => 'obavijest recv obavijest',
+'notification_recv_owner' => 'vlasnik recv obavijesti',
+'notification_recv_reviewer' => 'notification recv recenzent',
+'notification_recv_uploader' => 'učitavač recv obavijesti',
+'notification_recv_workflow' => 'tijek rada primanja obavijesti',
+'notification_service_no_filter' => 'usluga obavijesti bez filtra',
+'notification_tmpl' => 'obavijest tmpl',
+'not_subscribed' => 'nije pretplaćen',
'november' => 'Studeni',
'now' => 'sada',
'no_action' => 'Nema zahtjevane radnje',
'no_approval_needed' => 'Nema odobrenja na čekanju.',
'no_attached_files' => 'Nema priloženih datoteka',
-'no_attributes_defined' => '',
-'no_attribute_definitions' => '',
-'no_backup_dir' => '',
+'no_attributes_defined' => 'nema definiranih atributa',
+'no_attribute_definitions' => 'nema definicija atributa',
+'no_backup_dir' => 'nema sigurnosne kopije dir',
'no_current_version' => 'Koristite na staru verziju ProsperaDMS-a. Najnovija dostupna verzija je[latestversion].',
'no_default_keywords' => 'Nema dostupnih ključnih riječi',
'no_docs_checked_out' => 'Niti jedan dokument nije odjavljen',
-'no_docs_draft' => '',
-'no_docs_expired' => '',
+'no_docs_draft' => 'nema nacrta dokumenata',
+'no_docs_expired' => 'nijedan dokument nije istekao',
'no_docs_locked' => 'Nema zaključanih dokumenata.',
-'no_docs_needs_correction' => '',
-'no_docs_obsolete' => '',
-'no_docs_rejected' => '',
+'no_docs_needs_correction' => 'nijedan dokument ne treba ispravljati',
+'no_docs_obsolete' => 'nema zastarjelih dokumenata',
+'no_docs_rejected' => 'nema odbijenih dokumenata',
'no_docs_to_approve' => 'Trenutno nema dokumenata koji zahtjevaju odobrenje.',
'no_docs_to_look_at' => 'Nema dokumenata na koje treba obratiti pozornost.',
'no_docs_to_receipt' => 'Nema potvrda o primitku dokumenta',
@@ -1148,44 +1153,45 @@ Internet poveznica: [url]',
'no_groups' => 'Nema grupa',
'no_group_members' => 'Ova grupa nema članova',
'no_linked_files' => 'Nema povezanih datoteka',
+'no_mimetype' => '',
'no_previous_versions' => 'Nema pronađenih drugih verzija',
'no_receipt_needed' => 'Nije potrebna potvrda primitka',
'no_review_needed' => 'Nema pregleda na čekanju.',
-'no_revision_date' => '',
+'no_revision_date' => 'nema datuma revizije',
'no_revision_needed' => 'Nema revizije na čekanju.',
'no_revision_planed' => 'Nema zakazane revizije dokumenta',
'no_update_cause_locked' => 'Dakle, ne možete ažurirati ovaj dokument. Molim kontaktirajte korisnika koji zaključava.',
'no_user_image' => 'Nema pronađene slike',
-'no_value_set' => '',
+'no_value_set' => 'nema postavljene vrijednosti',
'no_version_check' => 'Neuspješna provjera nove verzije ProsperaDMS-a! Uzrok može biti ako je parametar allow_url_fopen u vašoj php konfiguraciji postavljen na 0.',
'no_version_modification' => 'Nema modifikacije verzije',
-'no_workflows' => '',
+'no_workflows' => 'nema radnih procesa',
'no_workflow_available' => 'Nema dostupnog toka rada',
-'number_count' => '',
+'number_count' => 'brojati broj',
'objectcheck' => 'Provjera mapa / dokumenata',
-'objects_without_attribute' => '',
-'object_check_critical' => '',
-'object_check_warning' => '',
-'objtype_unknown' => '',
+'objects_without_attribute' => 'objekti bez atributa',
+'object_check_critical' => 'provjera objekta kritična',
+'object_check_warning' => 'upozorenje o provjeri objekta',
+'objtype_unknown' => 'tip objekta nepoznat',
'obsolete' => 'Zastarjelo',
'october' => 'Listopad',
'old' => 'Staro',
'only_jpg_user_images' => 'Kao korisničke slike mogu se koristiti samo .jpg slike',
-'operation_disallowed' => '',
-'orderby' => '',
-'orderby_date_asc' => '',
-'orderby_date_desc' => '',
-'orderby_id_asc' => '',
-'orderby_id_desc' => '',
-'orderby_name_asc' => '',
-'orderby_name_desc' => '',
-'orderby_relevance' => '',
-'orderby_unsorted' => '',
+'operation_disallowed' => 'operacija nedopuštena',
+'orderby' => 'naručiti',
+'orderby_date_asc' => 'poredak po datumu uzlaz',
+'orderby_date_desc' => 'poredak po datumu desc',
+'orderby_id_asc' => 'poredak po id-u uzl',
+'orderby_id_desc' => 'naručiti id desc',
+'orderby_name_asc' => 'poredak po nazivu uzl',
+'orderby_name_desc' => 'poredak po imenu desc',
+'orderby_relevance' => 'poredak po relevantnosti',
+'orderby_unsorted' => 'orderby nerazvrstano',
'order_by_sequence_off' => 'Sortiranje po sekvencei ne isključeno u postavkama. Ako želite da ovaj parametar ima utjecaja, morat ćete ga ponovno uključiti.',
'original_filename' => 'Izvorni naziv datoteke',
-'overall_indexing_progress' => '',
+'overall_indexing_progress' => 'ukupni napredak indeksiranja',
'owner' => 'Vlasnik',
-'parent_folder' => '',
+'parent_folder' => 'nadređena mapa',
'password' => 'Lozinka',
'password_already_used' => 'Lozinka se već koristi',
'password_expiration' => 'Istek lozinke',
@@ -1202,40 +1208,40 @@ To se može izvršiti klikom na sljedeću poveznicu:
[url_prefix]out/out.ChangePassword.php?hash=[hash]
Ako i dalje imate problema s prijavom, molimo kontaktirajte Vašeg administratora.',
-'password_forgotten_email_body_html' => '',
+'password_forgotten_email_body_html' => 'lozinka zaboravljena tijelo e-pošte html',
'password_forgotten_email_subject' => '[sitename]: Zaboravljena lozinka',
-'password_forgotten_invalid_hash' => '',
-'password_forgotten_invalid_hash_title' => '',
+'password_forgotten_invalid_hash' => 'lozinka zaboravljena nevažeći hash',
+'password_forgotten_invalid_hash_title' => 'lozinka zaboravljena nevažeći hash naslov',
'password_forgotten_send_hash' => 'Upute kako postupiti su poslane na e-mail adresu korisnika',
'password_forgotten_text' => 'Ispunite donji obrazac i slijedite upute iz e-maila koji će vam biti poslan.',
'password_forgotten_title' => 'Lozinka je poslana',
-'password_mismatch_error' => '',
-'password_mismatch_error_title' => '',
+'password_mismatch_error' => 'pogreška nepodudaranja lozinke',
+'password_mismatch_error_title' => 'pogreška nepodudaranja lozinke naslov',
'password_repeat' => 'Ponovi lozinku',
'password_send' => 'Pošalji lozinku',
'password_send_text' => 'Vaša nova lozinka je poslana na navedenu e-mail adresu, ako login i e-mail odgovaraju postojećem korisniku. Ako ne primite e-mail u narednim minutama, tada provjerite da su login i e-mail ispravni te ponovite postupak.',
'password_strength' => 'Jačina lozinke',
'password_strength_insuffient' => 'Nedovoljna jačina lozinke',
'password_wrong' => 'Pogrešna lozinka',
-'pdf_converters' => '',
-'pending_approvals' => '',
-'pending_receipt' => '',
-'pending_reviews' => '',
-'pending_revision' => '',
-'pending_workflows' => '',
+'pdf_converters' => 'pdf pretvarači',
+'pending_approvals' => 'čeka odobrenja',
+'pending_receipt' => 'čeka primitak',
+'pending_reviews' => 'pregledi na čekanju',
+'pending_revision' => 'čeka reviziju',
+'pending_workflows' => 'tijekovi rada na čekanju',
'personal_default_keywords' => 'Osobni popis ključnih riječi',
-'php_info' => '',
+'php_info' => 'php informacije',
'pl_PL' => 'Poljski',
'possible_substitutes' => 'Zamjene',
'preset_expires' => 'Ističe',
'preview' => 'Predpregled',
'preview_converters' => 'Pretpregled konverzije dokumenta',
-'preview_images_text' => '',
+'preview_images_text' => 'pretpregled slike tekst',
'preview_markdown' => 'Smanjenje',
-'preview_pdf' => '',
+'preview_pdf' => 'pretpregled pdf',
'preview_plain' => 'Obični tekst',
-'preview_png' => '',
-'preview_txt' => '',
+'preview_png' => 'pretpregled png',
+'preview_txt' => 'pretpregled txt',
'previous_state' => 'Prethodni status',
'previous_versions' => 'Prethodne verzije',
'process' => 'proces',
@@ -1245,38 +1251,38 @@ Ako i dalje imate problema s prijavom, molimo kontaktirajte Vašeg administrator
'quota_exceeded' => 'Vaša kvota na disku je premašena za [bytes].',
'quota_is_disabled' => 'Podrška kvoti je trenutno onemogućena u postavkama. Postavka korisničke kvote neće imati utjecaja dok se ponovno ne omogući.',
'quota_warning' => 'Vaš maksimalni prostor na disku je premašen za [bytes]. Molimo uklonite dokumente ili prethodne verzije.',
-'readme_loading' => '',
-'receipts_accepted' => '',
-'receipts_accepted_latest' => '',
-'receipts_not_touched' => '',
-'receipts_not_touched_latest' => '',
-'receipts_rejected' => '',
-'receipts_rejected_latest' => '',
-'receipts_without_group' => '',
-'receipts_without_user' => '',
-'receipt_deletion_email_body' => '',
-'receipt_deletion_email_body_html' => '',
-'receipt_deletion_email_subject' => '',
+'readme_loading' => 'čitaj me učitavanje',
+'receipts_accepted' => 'primici prihvaćeni',
+'receipts_accepted_latest' => 'priznanice prihvaćene najkasnije',
+'receipts_not_touched' => 'priznanice nisu dirane',
+'receipts_not_touched_latest' => 'potvrde nisu dirane najkasnije',
+'receipts_rejected' => 'primici odbijeni',
+'receipts_rejected_latest' => 'potvrde odbijene najkasnije',
+'receipts_without_group' => 'primici bez gr',
+'receipts_without_user' => 'potvrde bez korisnika',
+'receipt_deletion_email_body' => 'tijelo e-pošte za brisanje računa',
+'receipt_deletion_email_body_html' => 'tijelo brisanja računa html',
+'receipt_deletion_email_subject' => 'predmet brisanja računa',
'receipt_log' => 'Zapisi prijema',
-'receipt_request_email_body' => '',
-'receipt_request_email_body_html' => '',
-'receipt_request_email_subject' => '',
-'receipt_status' => '',
-'receipt_submit_email_body' => '',
-'receipt_submit_email_body_html' => '',
-'receipt_submit_email_subject' => '',
+'receipt_request_email_body' => 'tijelo e-pošte zahtjeva za primitak',
+'receipt_request_email_body_html' => 'tijelo zahtjeva za primitak e-pošte html',
+'receipt_request_email_subject' => 'predmet e-pošte zahtjeva za primitak',
+'receipt_status' => 'stanje primitka',
+'receipt_submit_email_body' => 'primitak podnijeti tijelo e-pošte',
+'receipt_submit_email_body_html' => 'potvrda slanja e-pošte tijelo html',
+'receipt_submit_email_subject' => 'potvrda poslati predmet e-pošte',
'receipt_summary' => 'Sažetak prijema',
-'receipt_update_failed' => '',
-'recentchanges_mail_subject' => '',
+'receipt_update_failed' => 'ažuriranje računa nije uspjelo',
+'recentchanges_mail_subject' => 'recentchanges predmet e-pošte',
'recent_uploads' => 'Poslijedni Prenosi',
-'reception' => '',
-'reception_acknowleged' => '',
-'reception_noaction' => '',
-'reception_rejected' => '',
+'reception' => 'recepcija',
+'reception_acknowleged' => 'prijem potvrđen',
+'reception_noaction' => 'prijem noaction',
+'reception_rejected' => 'prijem odbijen',
'recipients' => 'Primatelji',
-'recipient_already_removed' => '',
-'record_type' => '',
-'redraw' => '',
+'recipient_already_removed' => 'primatelj je već uklonjen',
+'record_type' => 'vrsta zapisa',
+'redraw' => 'precrtati',
'refresh' => 'Osvježi',
'rejected' => 'Odbijeno',
'released' => 'Obrađeno',
@@ -1286,7 +1292,7 @@ Ako i dalje imate problema s prijavom, molimo kontaktirajte Vašeg administrator
Dokument: [document]
Korisnik: [username]
Internet poveznica: [url]',
-'removed_file_email_body_html' => '',
+'removed_file_email_body_html' => 'uklonjena datoteka tijelo e-pošte html',
'removed_file_email_subject' => '[sitename]: [document] - Uklonjeni privitak',
'removed_recipient' => 'je uklonjen s liste primatelja.',
'removed_reviewer' => 'je uklonjen iz popisa recezenata.',
@@ -1298,19 +1304,21 @@ Tok rada: [workflow]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'removed_workflow_email_body_html' => '',
+'removed_workflow_email_body_html' => 'uklonjen radni tijek e-pošte tijelo html',
'removed_workflow_email_subject' => '[sitename]: [name] - Uklonjeni tok rada iz ove verzije dokumenta',
-'removeFolderFromDropFolder' => '',
-'remove_approval_log' => '',
+'removeFolderFromDropFolder' => 'removeFolderFromDropFolder',
+'removeFolderFromDropFolder_desc' => 'removeFolderFromDropFolder desc',
+'remove_approval_log' => 'ukloniti dnevnik odobrenja',
+'remove_from_clipboard' => 'ukloniti iz međuspremnika',
'remove_marked_files' => 'Ukloni označene datoteke',
-'remove_review_log' => '',
-'remove_task' => '',
-'reorder' => '',
+'remove_review_log' => 'ukloniti dnevnik pregleda',
+'remove_task' => 'ukloniti zadatak',
+'reorder' => 'preurediti',
'repaired' => 'popravljeno',
'repairing_objects' => 'Popravljanje dokumenata ili mapa.',
-'replace_content_email_body' => '',
-'replace_content_email_body_html' => '',
-'replace_content_email_subject' => '',
+'replace_content_email_body' => 'zamijeni sadržaj e-pošte tijelo',
+'replace_content_email_body_html' => 'zamijeni sadržaj e-pošte tijelo html',
+'replace_content_email_subject' => 'zamijeni sadržaj e-pošte predmet',
'request_workflow_action_email_body' => 'Poslovni tok je došao u stanje koje zahtijeva Vašu pažnju i aktivnost.
Dokument: [name]
Verzija: [version]
@@ -1319,10 +1327,10 @@ Trenutni status: [current_state]
Glavna mapa: [folder_path]
Korisnik: [username]
URL poveznica: [url]',
-'request_workflow_action_email_body_html' => '',
+'request_workflow_action_email_body_html' => 'zahtjev tijek radnje tijelo e-pošte html',
'request_workflow_action_email_subject' => '[sitename]: [name] - Zahtijeva se aktivnost po poslovnom toku',
'reset_checkout' => 'Dovršite odjavu',
-'restrict_access' => '',
+'restrict_access' => 'ograničiti pristup',
'results_page' => 'Stranica rezultata',
'return_from_subworkflow' => 'Povratak iz pod-toka rada',
'return_from_subworkflow_email_body' => 'Povratak iz toka rada
@@ -1333,20 +1341,20 @@ Pod-tok rada: [subworkflow]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'return_from_subworkflow_email_body_html' => '',
+'return_from_subworkflow_email_body_html' => 'povratak iz podtoka e-pošte tijelo html',
'return_from_subworkflow_email_subject' => '[sitename]: [name] - Povratak iz pod-toka rada',
'reverse_links' => 'Dokumenti, koji imaju poveznicu na trenutni dokument',
'reviewers' => 'Recezenti',
'reviewer_already_assigned' => 'je već dodijeljen kao recezent',
'reviewer_already_removed' => 'je već uklonjen iz postupka pregleda ili je već podnijet pregled.',
-'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' => 'recenzije prihvaćene',
+'reviews_accepted_latest' => 'recenzije prihvaćene najnovije',
+'reviews_not_touched' => 'recenzije nisu dirali',
+'reviews_not_touched_latest' => 'recenzije nisu dirane najnovije',
+'reviews_rejected' => 'recenzije odbijene',
+'reviews_rejected_latest' => 'recenzije odbijene najnovije',
+'reviews_without_group' => 'recenzije bez grupe',
+'reviews_without_user' => 'recenzije bez korisnika',
'review_deletion_email' => 'Izbrisan zahtjev za pregled',
'review_deletion_email_body' => 'Zahtjev za pregled izbrisan
Dokument: [name]
@@ -1354,7 +1362,7 @@ Verzija: [version]
Glavna mapa: [folder_path]
Korisnik: [username]
URL: [url]',
-'review_deletion_email_body_html' => '',
+'review_deletion_email_body_html' => 'pregled brisanje tijelo e-pošte html',
'review_deletion_email_subject' => '[sitename]: [name] - Zahtjev za recenzijom izbrisan',
'review_file' => 'Datoteka',
'review_group' => 'Grupa pregleda',
@@ -1366,7 +1374,7 @@ Verzija: [version]
Glavna mapa: [folder_path]
Korisnik: [username]
URL: [url]',
-'review_request_email_body_html' => '',
+'review_request_email_body_html' => 'tijelo zahtjeva za recenziju html',
'review_request_email_subject' => '[sitename]: [name] - Zahtjev za pregled',
'review_status' => 'Status pregleda',
'review_submit_email' => 'Predani pregled',
@@ -1378,35 +1386,35 @@ Komentar: [comment]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'review_submit_email_body_html' => '',
+'review_submit_email_body_html' => 'pregled pošalji e-mail tijelo html',
'review_submit_email_subject' => '[sitename]: [name] - Predan pregled',
'review_summary' => 'Sažetak pregleda',
'review_update_failed' => 'Greška kod izmjene statusa pregleda. Izmjena nije uspjela.',
'revise_document' => 'Revidiraj dokument',
'revise_document_on' => 'Slijedeća revizija verzije dokumenta na dan [date]',
-'revision' => '',
-'revisions_accepted' => '',
-'revisions_accepted_latest' => '',
-'revisions_not_touched' => '',
-'revisions_not_touched_latest' => '',
-'revisions_pending' => '',
-'revisions_pending_latest' => '',
-'revisions_rejected' => '',
-'revisions_rejected_latest' => '',
-'revisions_without_group' => '',
-'revisions_without_user' => '',
+'revision' => 'revizija',
+'revisions_accepted' => 'revizije prihvaćene',
+'revisions_accepted_latest' => 'revizije prihvaćene najkasnije',
+'revisions_not_touched' => 'revizije nisu dirane',
+'revisions_not_touched_latest' => 'revizije nisu dirane najnovije',
+'revisions_pending' => 'revizije u tijeku',
+'revisions_pending_latest' => 'najnovije revizije na čekanju',
+'revisions_rejected' => 'revizije odbijene',
+'revisions_rejected_latest' => 'revizije odbijene najnovije',
+'revisions_without_group' => 'revizije bez grupe',
+'revisions_without_user' => 'revizije bez korisnika',
'revision_date' => 'Datum revizije',
-'revision_deletion_email_body' => '',
-'revision_deletion_email_subject' => '',
+'revision_deletion_email_body' => 'tijelo e-pošte za brisanje revizije',
+'revision_deletion_email_subject' => 'revizija brisanje predmet e-pošte',
'revision_log' => 'Zapisi revizije',
-'revision_request_email_body' => '',
-'revision_request_email_body_html' => '',
-'revision_request_email_subject' => '',
-'revision_status' => '',
-'revision_submit_email_body' => '',
-'revision_submit_email_body_html' => '',
-'revision_submit_email_subject' => '',
-'revision_summary' => '',
+'revision_request_email_body' => 'tijelo e-pošte zahtjeva za reviziju',
+'revision_request_email_body_html' => 'tijelo zahtjeva za reviziju e-pošte html',
+'revision_request_email_subject' => 'predmet e-pošte zahtjeva za reviziju',
+'revision_status' => 'status revizije',
+'revision_submit_email_body' => 'tijelo e-pošte za podnošenje revizije',
+'revision_submit_email_body_html' => 'revizija podnesite tijelo e-pošte html',
+'revision_submit_email_subject' => 'predmet e-pošte za podnošenje revizije',
+'revision_summary' => 'revizijski sažetak',
'revisors' => 'Revizori',
'revisor_already_assigned' => 'Korisnik je već dodijeljen kao revizor',
'revisor_already_removed' => 'Revizor je uklonjen iz procesa revizije ili je već revidirao dokument.',
@@ -1418,26 +1426,26 @@ Tok rada: [workflow]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'rewind_workflow_email_body_html' => '',
+'rewind_workflow_email_body_html' => 'premotavanje tijek rada e-mail tijelo html',
'rewind_workflow_email_subject' => '[sitename]: [name] - Tok rada je vraćen na početak',
'rewind_workflow_warning' => 'Ako vratite tok radan u njegovo početno, prijašnji zapisi o tijeku rada za ovaj dokument bit će izbrisani i ne mogu se vratiti.',
'rm_attrdef' => 'Uklonite definiciju atributa',
-'rm_attrdefgroup' => '',
-'rm_attr_value' => '',
+'rm_attrdefgroup' => 'rm attrdefgroup',
+'rm_attr_value' => 'rm attr vrijednost',
'rm_default_keyword_category' => 'Uklonite kategoriju',
'rm_document' => 'Ukloni dokument',
'rm_document_category' => 'Uklonite kategoriju',
-'rm_event' => '',
+'rm_event' => 'rm događaj',
'rm_file' => 'Uklonite datoteku',
'rm_folder' => 'Uklonite mapu',
'rm_from_clipboard' => 'Uklonite iz međuspremnika',
'rm_group' => 'Uklonite ovu grupu',
-'rm_role' => '',
-'rm_task' => '',
+'rm_role' => 'rm uloga',
+'rm_task' => 'rm zadatak',
'rm_transmittal' => 'Uklanjanje preusmjerenja',
'rm_transmittalitem' => 'Uklanjanje stavke',
'rm_user' => 'Uklonite ovog korisnika',
-'rm_user_from_processes' => '',
+'rm_user_from_processes' => 'rm korisnik iz procesa',
'rm_version' => 'Uklonite verziju',
'rm_workflow' => 'Uklonite tok rada',
'rm_workflow_action' => 'Uklonite radnju toka rada',
@@ -1446,10 +1454,10 @@ Internet poveznica: [url]',
'role' => 'Uloga',
'role_admin' => 'Administrator',
'role_guest' => 'Gost',
-'role_info' => '',
+'role_info' => 'informacije o ulozi',
'role_management' => 'Upravljanje ulogama',
-'role_name' => '',
-'role_type' => '',
+'role_name' => 'ime uloge',
+'role_type' => 'tip uloge',
'role_user' => 'Korisnik',
'ro_RO' => 'Rumunjski',
'run_subworkflow' => 'Pokreni poslovni pod-tok',
@@ -1461,28 +1469,28 @@ Pod-tok rada: [subworkflow]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'run_subworkflow_email_body_html' => '',
+'run_subworkflow_email_body_html' => 'pokrenite subworkflow tijelo e-pošte html',
'run_subworkflow_email_subject' => '[sitename]: [name] - Pod-tok rada je pokrenut',
'ru_RU' => 'Ruski',
'saturday' => 'Subota',
'saturday_abbr' => 'Su',
'save' => 'Spremi',
-'scheduler_class' => '',
-'scheduler_class_description' => '',
-'scheduler_class_parameter' => '',
-'scheduler_class_tasks' => '',
+'scheduler_class' => 'klasa rasporeda',
+'scheduler_class_description' => 'opis klase planera',
+'scheduler_class_parameter' => 'parametar klase planera',
+'scheduler_class_tasks' => 'raspored zadataka klase',
'scheduler_task_mgr' => 'Rokovnik',
'search' => 'Traži',
'search_fulltext' => 'Traži u cijelom tekstu',
'search_in' => 'Traži u',
-'search_mode' => '',
+'search_mode' => 'način pretraživanja',
'search_mode_and' => 'sve riječi',
'search_mode_documents' => 'Samo dokumenti',
'search_mode_folders' => 'Samo mape',
'search_mode_or' => 'najmanje jedna riječ',
'search_no_results' => 'Nema dokumenata koji odgovaraju vašoj pretrazi',
'search_query' => 'Traži',
-'search_query_placeholder' => '',
+'search_query_placeholder' => 'rezervirano mjesto upita za pretraživanje',
'search_report' => 'Pronađeno [doccount] dokumenata i [foldercount] mapa za [searchtime] sek.',
'search_report_fulltext' => 'Pronađeno [doccount] dokumenata',
'search_resultmode' => 'Prikaz rezultata pretraživanja',
@@ -1491,23 +1499,24 @@ 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' => '',
+'seeddms_info' => 'seeddms informacije',
+'seeddms_version' => 'seeddms verzija',
'selection' => 'Odabir',
-'select_attrdef' => '',
-'select_attrdefgrp_show' => '',
+'select_attrdef' => 'odaberite attrdef',
+'select_attrdefgrp_show' => 'odaberite attrdefgrp show',
'select_attribute_value' => 'Izbari vrednost atributa',
'select_category' => 'Kliknite za odabir kategorije',
-'select_created' => '',
-'select_documents_for_process' => '',
+'select_created' => 'odaberite stvoreno',
+'select_documents_for_process' => 'odaberite dokumente za obradu',
+'select_folder' => 'odaberite mapu',
'select_group' => 'Izaberi grupu',
'select_groups' => 'Kliknite za odabir grupa',
'select_grp_approvers' => 'Kliknite za odabir validatora grupe',
-'select_grp_ind_approvers' => '',
-'select_grp_ind_notification' => '',
-'select_grp_ind_recipients' => '',
-'select_grp_ind_reviewers' => '',
-'select_grp_ind_revisors' => '',
+'select_grp_ind_approvers' => 'odaberite grp ind odobravatelje',
+'select_grp_ind_notification' => 'odaberite grp ind obavijest',
+'select_grp_ind_recipients' => 'odaberite grp ind primatelje',
+'select_grp_ind_reviewers' => 'odaberite grp ind recenzente',
+'select_grp_ind_revisors' => 'odaberite grp ind revisors',
'select_grp_notification' => 'Kliknite za odabir grupnog obavještavanja',
'select_grp_recipients' => 'Kliknite za odabir grupe primatelja',
'select_grp_reviewers' => 'Kliknite za odabir recezenta grupe',
@@ -1517,75 +1526,77 @@ Internet poveznica: [url]',
'select_ind_recipients' => 'Kliknite za odabir pojedinačnog primatelja',
'select_ind_reviewers' => 'Kliknite za odabir pojedinačnog recezenta',
'select_ind_revisors' => 'Kliknite za odabir pojedinačnog revizora',
-'select_mimetype' => '',
-'select_modified' => '',
+'select_mimetype' => 'odaberite mimetip',
+'select_modified' => 'odaberite modificirano',
'select_one' => 'Odaberite jednog',
-'select_option' => '',
-'select_owner' => '',
-'select_record_type' => '',
-'select_status' => '',
+'select_option' => 'odaberite opciju',
+'select_owner' => 'odaberite vlasnika',
+'select_record_type' => 'odaberite vrstu zapisa',
+'select_status' => 'odaberite status',
'select_user' => 'Izaberi korisnika',
'select_users' => 'Kliknite za odabir korisnika',
'select_value' => 'Odaberite vrijednost',
'select_workflow' => 'Odaberite tok rada',
-'send_email' => '',
-'send_login_data' => '',
-'send_login_data_body' => '',
-'send_login_data_subject' => '',
-'send_notification' => '',
-'send_test_mail' => '',
+'send_email' => 'poslati email',
+'send_login_data' => 'poslati podatke za prijavu',
+'send_login_data_body' => 'poslati tijelo podataka za prijavu',
+'send_login_data_subject' => 'poslati subjekt podataka za prijavu',
+'send_notification' => 'poslati obavijest',
+'send_test_mail' => 'poslati probnu poštu',
'september' => 'Rujan',
'sequence' => 'Redoslijed',
'seq_after' => 'Nakon "[prevname]"',
'seq_end' => 'Na kraju',
'seq_keep' => 'Zadrži poziciju',
'seq_start' => 'Na početak',
-'service_has_filter' => '',
-'service_list_from' => '',
-'service_list_info' => '',
-'service_list_to' => '',
-'service_name' => '',
-'sessions' => '',
-'setDateFromFile' => '',
-'setDateFromFolder' => '',
+'service_has_filter' => 'servis ima filter',
+'service_list_from' => 'lista usluga od',
+'service_list_info' => 'informacije o servisnoj listi',
+'service_list_to' => 'servisni popis za',
+'service_name' => 'naziv usluge',
+'sessions' => 'sjednice',
+'setDateFromFile' => 'setDateFromFile',
+'setDateFromFile_desc' => 'setDateFromFile desc',
+'setDateFromFolder' => 'setDateFromFolder',
+'setDateFromFolder_desc' => 'setDateFromFolder desc',
'settings' => 'Postavke',
'settings_activate_module' => 'Aktiviraj modul',
'settings_activate_php_extension' => 'Aktiviraj PHP ekstenziju',
-'settings_addManagerAsApprover' => '',
-'settings_addManagerAsApprover_desc' => '',
-'settings_addManagerAsReviewer' => '',
-'settings_addManagerAsReviewer_desc' => '',
+'settings_addManagerAsApprover' => 'postavke addManagerAsApprover',
+'settings_addManagerAsApprover_desc' => 'postavke addManagerAsApprover desc',
+'settings_addManagerAsReviewer' => 'postavke addManagerAsReviewer',
+'settings_addManagerAsReviewer_desc' => 'postavke addManagerAsReviewer desc',
'settings_adminIP' => 'Admin IP',
'settings_adminIP_desc' => 'Ako se postavljeni administrator može prijaviti samo s određenom IP adresom, ostavite prazno da izbjegnete kontrolu. NAPOMENA: radi samo s lokalnom autentifikacijom (ne LDAP)',
'settings_Advanced' => 'Napredno',
-'settings_advancedAcl' => '',
-'settings_advancedAcl_desc' => '',
-'settings_allowChangeRevAppInProcess' => '',
-'settings_allowChangeRevAppInProcess_desc' => '',
-'settings_allowReviewerOnly' => '',
-'settings_allowReviewerOnly_desc' => '',
-'settings_alwaysShowClipboard' => '',
-'settings_alwaysShowClipboard_desc' => '',
-'settings_alwaysShowMenuTasks' => '',
-'settings_alwaysShowMenuTasks_desc' => '',
+'settings_advancedAcl' => 'postavke napredneAcl',
+'settings_advancedAcl_desc' => 'postavke naprednoAcl desc',
+'settings_allowChangeRevAppInProcess' => 'postavke dopuštajuChangeRevAppInProcess',
+'settings_allowChangeRevAppInProcess_desc' => 'postavke dopuštajuChangeRevAppInProcess desc',
+'settings_allowReviewerOnly' => 'postavke dopuštajuReviewerOnly',
+'settings_allowReviewerOnly_desc' => 'postavke dopustiReviewerOnly desc',
+'settings_alwaysShowClipboard' => 'postavke alwaysShowClipboard',
+'settings_alwaysShowClipboard_desc' => 'postavke uvijek Prikaži međuspremnik desc',
+'settings_alwaysShowMenuTasks' => 'postavke alwaysShowMenuTasks',
+'settings_alwaysShowMenuTasks_desc' => 'postavke uvijekShowMenuTasks desc',
'settings_apache_mod_rewrite' => 'Apache - Modul prepisa',
-'settings_apiKey' => '',
-'settings_apiKey_desc' => '',
-'settings_apiOrigin' => '',
-'settings_apiOrigin_desc' => '',
-'settings_apiUserId' => '',
-'settings_apiUserId_desc' => '',
+'settings_apiKey' => 'postavke apiKey',
+'settings_apiKey_desc' => 'postavke apiKey desc',
+'settings_apiOrigin' => 'postavke apiOrigin',
+'settings_apiOrigin_desc' => 'postavke apiOrigin desc',
+'settings_apiUserId' => 'postavke apiUserId',
+'settings_apiUserId_desc' => 'postavke 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.',
'settings_available_languages' => 'Dostupni jezici',
-'settings_available_languages_desc' => '',
+'settings_available_languages_desc' => 'postavke dostupni jezici desc',
'settings_backupDir' => 'Mapa za sigurnosnu kopiju',
'settings_backupDir_desc' => 'Mapa gdje alat za sigurnosne kopije sprema podatke. Ako ova mapa nije postavljena ili joj se ne može pristupiti, tada se sigurnosne kopije spremaju u mapu sadržaja.',
-'settings_baseUrl' => '',
-'settings_baseUrl_desc' => '',
-'settings_batchOperations' => '',
-'settings_batchOperations_desc' => '',
+'settings_baseUrl' => 'postavke baseUrl',
+'settings_baseUrl_desc' => 'postavke baseUrl desc',
+'settings_batchOperations' => 'postavke batchOperations',
+'settings_batchOperations_desc' => 'postavke batchOperations desc',
'settings_cacheDir' => 'Mapa predmemorije',
'settings_cacheDir_desc' => 'Gdje se spremaju slike pregleda (najbolje da odaberete mapu koja nije dostupna kroz vaš web-server)',
'settings_Calendar' => 'Postavke kalendara',
@@ -1596,13 +1607,13 @@ Internet poveznica: [url]',
'settings_checkOutDir_desc' => 'Ovo je mapa gdje se sprema kopija zadnjeg sadržaja dokumenta ako je dokument odjavljen. Ako korisnicima omogućite pristup ovoj mapi oni tada mogu mijenjati datoteku i ponovno prijaviti kad dovrše izmjene.',
'settings_cmdTimeout' => 'Istek vremena za vanjske komande',
'settings_cmdTimeout_desc' => 'Ovo trajanje u sekundama određuje kada će vanjska komanda (npr. Za kreiranje full-tekst indeksa) biti terminirana.',
-'settings_conf_field_not_editable' => '',
+'settings_conf_field_not_editable' => 'postavke conf polje nije moguće uređivati',
'settings_contentDir' => 'Mapa sadržaja',
'settings_contentDir_desc' => 'Gdje se spremaju učitane datoteke (najbolje da odaberete mapu koja nije dostupna kroz vaš web-server)',
'settings_contentOffsetDir' => 'Offset mapa sadržaja',
'settings_contentOffsetDir_desc' => 'Za zaobilaželje ograničenja unutar datotečnog sustava, nova struktura mapa je a new directory structure je zasnovana i nalazi se unutar mape sadržaja. Ovo zahtjeva baznu mapu od koje se kreće. Uobičajeno da se ostavlja zadana postavka, 1048576, ali može biti bilo koji niz koji se već ne nalazi unutar mape sadržaja',
'settings_convertToPdf' => 'Pretvori dokument u PDF format za brzi prikaz',
-'settings_convertToPdf_desc' => '',
+'settings_convertToPdf_desc' => 'postavke convertToPdf desc',
'settings_cookieLifetime' => 'Životni vijek kolačića',
'settings_cookieLifetime_desc' => 'Životni vijek kolačića u sekundama. Ako je postavljeno na 0, kolačić će biti uklonjen kada se zatvori pretraživač.',
'settings_coreDir' => 'Mapa jezgre Core ProsperaDMS-a',
@@ -1613,12 +1624,12 @@ Internet poveznica: [url]',
'settings_createdirectory' => 'Izradi mapu',
'settings_currentvalue' => 'Trenutna vrijednost',
'settings_Database' => 'Postavke baze podataka',
-'settings_dateformat' => '',
-'settings_dateformat_desc' => '',
-'settings_datetimeformat' => '',
-'settings_datetimeformat_desc' => '',
-'settings_daysPastDashboard' => '',
-'settings_daysPastDashboard_desc' => '',
+'settings_dateformat' => 'postavke dateformat',
+'settings_dateformat_desc' => 'postavke dateformat desc',
+'settings_datetimeformat' => 'postavke datetimeformat',
+'settings_datetimeformat_desc' => 'postavke datetimeformat desc',
+'settings_daysPastDashboard' => 'postavke daysPastDashboard',
+'settings_daysPastDashboard_desc' => 'postavke daniPastDashboard desc',
'settings_dbDatabase' => 'Baza podataka',
'settings_dbDatabase_desc' => 'Naziv vaše baze podataka unijet tijekom postupka instalacije. Ne uređujte ovo polje dok se ne pojavi potreba, ako npr. premjestite bazu podataka.',
'settings_dbDriver' => 'Vrsta baze podataka',
@@ -1630,21 +1641,23 @@ Internet poveznica: [url]',
'settings_dbUser' => 'Korisničko ime',
'settings_dbUser_desc' => 'Korisničko ime za pristup vašoj bazi podataka unijeto tijekom postupka instalacije. Ne uređujte ovo polje bez prijeke potrebe, npr. prijenos baze podataka na novi Host.',
'settings_dbVersion' => 'Shema baze podataka je prestara',
-'settings_defaultAccessDocs' => '',
-'settings_defaultAccessDocs_desc' => '',
-'settings_defaultDocPosition' => '',
-'settings_defaultDocPosition_desc' => '',
-'settings_defaultDocPosition_val_end' => '',
-'settings_defaultDocPosition_val_start' => '',
-'settings_defaultFolderPosition' => '',
-'settings_defaultFolderPosition_desc' => '',
+'settings_defaultAccessDocs' => 'postavke defaultAccessDocs',
+'settings_defaultAccessDocs_desc' => 'postavke defaultAccessDocs desc',
+'settings_defaultDocPosition' => 'postavke defaultDocPosition',
+'settings_defaultDocPosition_desc' => 'postavke defaultDocPosition desc',
+'settings_defaultDocPosition_val_end' => 'postavke defaultDocPosition val kraj',
+'settings_defaultDocPosition_val_start' => 'postavke defaultDocPosition val početak',
+'settings_defaultFolderPosition' => 'postavke defaultFolderPosition',
+'settings_defaultFolderPosition_desc' => 'postavke defaultFolderPosition desc',
'settings_defaultSearchMethod' => 'Zadana metoda pretrage',
'settings_defaultSearchMethod_desc' => 'Zadana metoda pretrage, kada se pretraživanje pokreće putem formulara iz glavnog izbornika',
'settings_defaultSearchMethod_valdatabase' => 'baza podataka',
'settings_defaultSearchMethod_valfulltext' => 'puni tekst',
'settings_delete_install_folder' => 'Da bi koristili ProsperaDMS, morate izbrisati datoteku ENABLE_INSTALL_TOOL u mapi konfiguracije',
-'settings_disableChangePassword' => '',
-'settings_disableChangePassword_desc' => '',
+'settings_disableChangePassword' => 'postavke onemogućiPromijeni lozinku',
+'settings_disableChangePassword_desc' => 'postavke onemogućiPromijeni lozinku desc',
+'settings_disableReceiptComment' => 'postavke onemogući ReceiptComment',
+'settings_disableReceiptComment_desc' => 'postavke onemogući ReceiptComment desc',
'settings_disableSelfEdit' => 'Onemogućite samostalno uređivanje',
'settings_disableSelfEdit_desc' => 'Ako je označeno, korisnik ne može uređivati svoj vlastiti profil',
'settings_disable_install' => 'Ako je moguće, izbrišite datoteku ENABLE_INSTALL_TOOL',
@@ -1652,44 +1665,44 @@ Internet poveznica: [url]',
'settings_dropFolderDir' => 'Mapa za zonu ispuštanja',
'settings_dropFolderDir_desc' => 'Ova mapa može se koristiti za ispuštanje datoteka na datotečni sustav poslužitelja i uvoz istih od tamo umjesto učitavanja preko internet preglednika. Mapa mora sadržavati pod mapu za svakog korisnika koji ima dozvolu za uvoz datoteka na ovaj način.',
'settings_Edition' => 'Postavke izdanja',
-'settings_editOnlineFileTypes' => '',
-'settings_editOnlineFileTypes_desc' => '',
-'settings_enable2FactorAuthentication' => '',
-'settings_enable2FactorAuthentication_desc' => '',
-'settings_enableAcknowledgeWorkflow' => '',
-'settings_enableAcknowledgeWorkflow_desc' => '',
-'settings_enableAdminReceipt' => '',
-'settings_enableAdminReceipt_desc' => '',
+'settings_editOnlineFileTypes' => 'postavke editOnlineFileTypes',
+'settings_editOnlineFileTypes_desc' => 'postavke urediOnlineFileTypes desc',
+'settings_enable2FactorAuthentication' => 'postavke enable2FactorAuthentication',
+'settings_enable2FactorAuthentication_desc' => 'postavke enable2FactorAuthentication desc',
+'settings_enableAcknowledgeWorkflow' => 'postavke enableAcknowledgeWorkflow',
+'settings_enableAcknowledgeWorkflow_desc' => 'postavke enableAcknowledgeWorkflow desc',
+'settings_enableAdminReceipt' => 'postavke enableAdminReceipt',
+'settings_enableAdminReceipt_desc' => 'postavke enableAdminReceipt desc',
'settings_enableAdminRevApp' => 'Dopusti pregled/ovjeru za administratore',
'settings_enableAdminRevApp_desc' => 'Omogući ovo ako želiš da administratori budu navedeni kao recezenti/validatori i za promjenu toka rada.',
'settings_enableCalendar' => 'Omogući Kalendar',
'settings_enableCalendar_desc' => 'Omogući/onemogući kalendar',
-'settings_enableCancelCheckout' => '',
-'settings_enableCancelCheckout_desc' => '',
+'settings_enableCancelCheckout' => 'postavke enableCancelCheckout',
+'settings_enableCancelCheckout_desc' => 'postavke enableCancelCheckout desc',
'settings_enableClipboard' => 'Omogući međuspremnik',
'settings_enableClipboard_desc' => 'Omogući/onemogući međuspremnik na \'Vidi mapu\' stranici',
'settings_enableConverting' => 'Omogući pretvaranje',
'settings_enableConverting_desc' => 'Omogući/onemogući pretvaranje datoteka',
-'settings_enableDebugMode' => '',
-'settings_enableDebugMode_desc' => '',
-'settings_enableDropFolderList' => '',
-'settings_enableDropFolderList_desc' => '',
+'settings_enableDebugMode' => 'postavke enableDebugMode',
+'settings_enableDebugMode_desc' => 'postavke enableDebugMode desc',
+'settings_enableDropFolderList' => 'postavke enableDropFolderList',
+'settings_enableDropFolderList_desc' => 'postavke enableDropFolderList desc',
'settings_enableDropUpload' => 'Omogući brzo učitavanje',
'settings_enableDropUpload_desc' => 'Omogući/onemogući prostor za ubacivanje na \'Vidi mapu\' stranici za učitavanje datoteka "Povuci i ispusti" postupkom.',
'settings_enableDuplicateDocNames' => 'Omogući dvostruke nazive dokumenata',
'settings_enableDuplicateDocNames_desc' => 'Omogućuje da u mapi imate dvostruke nazive dokumenata.',
-'settings_enableDuplicateSubFolderNames' => '',
-'settings_enableDuplicateSubFolderNames_desc' => '',
+'settings_enableDuplicateSubFolderNames' => 'postavke enableDuplicateSubFolderNames',
+'settings_enableDuplicateSubFolderNames_desc' => 'postavke enableDuplicateSubFolderNames desc',
'settings_enableEmail' => 'Omogući E-mail',
'settings_enableEmail_desc' => 'Omogući/onemogući automatsku email obavijest',
-'settings_enableExtensionDownload' => '',
-'settings_enableExtensionDownload_desc' => '',
-'settings_enableExtensionImport' => '',
-'settings_enableExtensionImportFromRepository' => '',
-'settings_enableExtensionImportFromRepository_desc' => '',
-'settings_enableExtensionImport_desc' => '',
-'settings_enableFilterReceipt' => '',
-'settings_enableFilterReceipt_desc' => '',
+'settings_enableExtensionDownload' => 'postavke enableExtensionDownload',
+'settings_enableExtensionDownload_desc' => 'postavke enableExtensionDownload desc',
+'settings_enableExtensionImport' => 'postavke enableExtensionImport',
+'settings_enableExtensionImportFromRepository' => 'postavke enableExtensionImportFromRepository',
+'settings_enableExtensionImportFromRepository_desc' => 'postavke enableExtensionImportFromRepository desc',
+'settings_enableExtensionImport_desc' => 'postavke enableExtensionImport desc',
+'settings_enableFilterReceipt' => 'postavke enableFilterReceipt',
+'settings_enableFilterReceipt_desc' => 'postavke enableFilterReceipt desc',
'settings_enableFolderTree' => 'Omogući stablo mape',
'settings_enableFolderTree_desc' => 'Omogući/onemogući stablo mape na \'Vidi mapu\' stranici',
'settings_enableFullSearch' => 'Omogući pretraživanje cijelog teksta',
@@ -1700,60 +1713,62 @@ Internet poveznica: [url]',
'settings_enableGuestLogin_desc' => 'Ako želite da se bilo tko koristi Gost prijavu, označite ovu opciju. Napomena: gost prijava smije se koristiti samo u pouzdanom okruženju.',
'settings_enableHelp' => 'Omogući pomoć',
'settings_enableHelp_desc' => 'Omogući/onemogući poveznicu do pomoći u izborniku',
-'settings_enableHiddenReceipt' => '',
-'settings_enableHiddenReceipt_desc' => '',
-'settings_enableHiddenRevApp' => '',
-'settings_enableHiddenRevApp_desc' => '',
+'settings_enableHiddenReceipt' => 'postavke enableHiddenReceipt',
+'settings_enableHiddenReceipt_desc' => 'postavke enableHiddenReceipt desc',
+'settings_enableHiddenRevApp' => 'postavke enableHiddenRevApp',
+'settings_enableHiddenRevApp_desc' => 'postavke enableHiddenRevApp desc',
'settings_enableLanguageSelector' => 'Omogući Izbornik jezika',
'settings_enableLanguageSelector_desc' => 'Prikaži izbornik za jezik korisničkog sučelja nakon prijave.',
'settings_enableLargeFileUpload' => 'Omogući učitavanje velikih datoteka',
'settings_enableLargeFileUpload_desc' => 'Ako je postavljeno, učitavanje datoteke je također dostupno kroz Java aplet naziva "jumploader" bez postavljenog ograničenja veličine datoteke od strane pretraživača. To također omogućuje učitavanje nekoliko datoteka u jednom koraku. Uključivanjem ovoga isključit će se samo http kolačići.',
-'settings_enableLoginByEmail' => '',
-'settings_enableLoginByEmail_desc' => '',
+'settings_enableLoginByEmail' => 'postavke enableLoginByEmail',
+'settings_enableLoginByEmail_desc' => 'postavke enableLoginByEmail desc',
+'settings_enableMemcached' => 'postavke enableMemcached',
+'settings_enableMemcached_desc' => 'postavke enableMemcached desc',
'settings_enableMenuTasks' => 'Omogućavanje liste zadataka u izborniku',
'settings_enableMenuTasks_desc' => 'Omogućavanje/onemogućavanje stavke izbornika koja sadrži sve zadatke za korisnika. Ovo sadrži dokumente koji trebaju biti revidirani, odobreni itd.',
-'settings_enableMenuTransmittals' => '',
-'settings_enableMenuTransmittals_desc' => '',
-'settings_enableMultiUpload' => '',
-'settings_enableMultiUpload_desc' => '',
+'settings_enableMenuTransmittals' => 'postavke enableMenuTransmittals',
+'settings_enableMenuTransmittals_desc' => 'postavke enableMenuTransmittals desc',
+'settings_enableMultiUpload' => 'postavke enableMultiUpload',
+'settings_enableMultiUpload_desc' => 'postavke enableMultiUpload desc',
'settings_enableNotificationAppRev' => 'Omogući bilježenje recezenta/validatora',
'settings_enableNotificationAppRev_desc' => 'Označi za slanje obavijesti recezentu/validatoru kada je dodana nova verzija dokumenta',
'settings_enableNotificationWorkflow' => 'Omogući obavijesti o zadanom toku rada',
'settings_enableNotificationWorkflow_desc' => 'Ukoliko je ova opcija uključena, korisnici i grupe koji trebaju odraditi neku aktivnost prema definiciji poslovnog toka u slijedećoj fazi toka, će biti obaviješteni. Čak i u slučaju kad nisu dodali opciju obavještavanja za dokument.',
'settings_enableOwnerNotification' => 'Omogući obavješćivanje vlasnika',
'settings_enableOwnerNotification_desc' => 'Označi za dodavanje obavješćivanja vlasnika kada je dodan dokument.',
-'settings_enableOwnerReceipt' => '',
-'settings_enableOwnerReceipt_desc' => '',
+'settings_enableOwnerReceipt' => 'postavke enableOwnerReceipt',
+'settings_enableOwnerReceipt_desc' => 'postavke enableOwnerReceipt desc',
'settings_enableOwnerRevApp' => 'Omogući vlasnika za recezenta/validatora',
'settings_enableOwnerRevApp_desc' => 'Omogućite ovo ako želite da vlasnik dokumenta bude naveden kao recezent/validator i za promjene tokova rada.',
'settings_enablePasswordForgotten' => 'Omogući zaboravljanje lozinke',
'settings_enablePasswordForgotten_desc' => 'Ako želite omogućiti korisniku da postavi novu lozinku i pošalje ju e-mailom, označite ovu opciju.',
-'settings_enableReceiptReject' => '',
-'settings_enableReceiptReject_desc' => '',
+'settings_enableReceiptReject' => 'postavke enableReceiptReject',
+'settings_enableReceiptReject_desc' => 'postavke enableReceiptReject desc',
'settings_enableReceiptWorkflow' => 'Omogućavanje potvrđivanja prijema dokumenta',
'settings_enableReceiptWorkflow_desc' => 'Omogućite kako bi omogućili tok rada za potvrđivajne prijema dokumenta.',
'settings_enableRecursiveCount' => 'Omogući rekurzivno brojanje dokumenta/mape',
'settings_enableRecursiveCount_desc' => 'Ako je uključeno, broj dokumenata i mapa u pregledu mape će biti određen brojanjem svih objekata rekurzivnom obradom mapa i brojanjem tih dokumenata i mapa kojima je korisniku omogućen pristup.',
-'settings_enableRemoveRevApp' => '',
-'settings_enableRemoveRevApp_desc' => '',
-'settings_enableRevisionOneVoteReject' => '',
-'settings_enableRevisionOneVoteReject_desc' => '',
-'settings_enableRevisionOnVoteReject' => '',
-'settings_enableRevisionOnVoteReject_desc' => '',
+'settings_enableRemoveRevApp' => 'postavke enableRemoveRevApp',
+'settings_enableRemoveRevApp_desc' => 'postavke enableRemoveRevApp desc',
+'settings_enableRevisionOneVoteReject' => 'postavke enableRevisionOneVoteReject',
+'settings_enableRevisionOneVoteReject_desc' => 'postavke enableRevisionOneVoteReject desc',
+'settings_enableRevisionOnVoteReject' => 'postavke enableRevisionOnVoteReject',
+'settings_enableRevisionOnVoteReject_desc' => 'postavke enableRevisionOnVoteReject desc',
'settings_enableRevisionWorkflow' => 'Omogućavanje revizije dokumenata',
'settings_enableRevisionWorkflow_desc' => 'Omogućite kako bi se mogao pokrenuti tok rada za revidiranje dokumenta nakon zadanog vremenskog perioda.',
-'settings_enableSelfReceipt' => '',
-'settings_enableSelfReceipt_desc' => '',
+'settings_enableSelfReceipt' => 'postavke enableSelfReceipt',
+'settings_enableSelfReceipt_desc' => 'postavke enableSelfReceipt desc',
'settings_enableSelfRevApp' => 'Omogući pregled/ovjeru za prijavljenog korisnika',
'settings_enableSelfRevApp_desc' => 'Omogući ovo ako želite da trenutno prijavljeni korisnik bude naveden kao recezent/validator i za promjenu toka rada.',
-'settings_enableSessionList' => '',
-'settings_enableSessionList_desc' => '',
+'settings_enableSessionList' => 'postavke enableSessionList',
+'settings_enableSessionList_desc' => 'postavke enableSessionList desc',
'settings_enableThemeSelector' => 'Odabir teme',
'settings_enableThemeSelector_desc' => 'Uključuje/isključuje izbornik tema na stranici prijave.',
-'settings_enableUpdateReceipt' => '',
-'settings_enableUpdateReceipt_desc' => '',
-'settings_enableUpdateRevApp' => '',
-'settings_enableUpdateRevApp_desc' => '',
+'settings_enableUpdateReceipt' => 'postavke enableUpdateReceipt',
+'settings_enableUpdateReceipt_desc' => 'postavke enableUpdateReceipt desc',
+'settings_enableUpdateRevApp' => 'postavke enableUpdateRevApp',
+'settings_enableUpdateRevApp_desc' => 'postavke enableUpdateRevApp desc',
'settings_enableUserImage' => 'Omogući sliku korisnika',
'settings_enableUserImage_desc' => 'Omogući slike korisnika',
'settings_enableUsersView' => 'Omogući pregled korisnika',
@@ -1762,19 +1777,21 @@ Internet poveznica: [url]',
'settings_enableVersionDeletion_desc' => 'Omogući/onemogući brisanje prethodnih verzija dokumenta redovnim korisnicima. Administrator uvijek može izbrisati stare verzije.',
'settings_enableVersionModification' => 'Omogući mijenjanje verzija',
'settings_enableVersionModification_desc' => 'Omogući/onemogući mijenjanje verzija dokumenta redovnim korisnicima nakon učitavanja verzije. Administrator uvijek može promijeniti verziju nakon učitavanja.',
-'settings_enableWebdavReplaceDoc' => '',
-'settings_enableWebdavReplaceDoc_desc' => '',
-'settings_enableXsendfile' => '',
-'settings_enableXsendfile_desc' => '',
+'settings_enableWebdavReplaceDoc' => 'postavke enableWebdavReplaceDoc',
+'settings_enableWebdavReplaceDoc_desc' => 'postavke enableWebdavReplaceDoc desc',
+'settings_enableXsendfile' => 'postavke enableXsendfile',
+'settings_enableXsendfile_desc' => 'postavke enableXsendfile desc',
'settings_encryptionKey' => 'Ključ za šifriranje',
'settings_encryptionKey_desc' => 'Ovaj string se koristi za izradu jedinstvenog identifikatora koji će biti dodan kao skriveno polje u formularu kako bi se spriječili CSRF napadi.',
'settings_error' => 'Greška',
+'settings_excludeFoldersDashboard' => 'postavke excludeFoldersDashboard',
+'settings_excludeFoldersDashboard_desc' => 'postavke excludeFoldersDashboard desc',
'settings_expandFolderTree' => 'Proširi stablo mape',
'settings_expandFolderTree_desc' => 'Proširi stablo mape',
'settings_expandFolderTree_val0' => 'započni sa skrivenim stablom',
'settings_expandFolderTree_val1' => 'započni sa prikazanim stablom i prvom proširenom razinom',
'settings_expandFolderTree_val2' => 'započni sa potpuno proširenim vidljivom stablom',
-'settings_ExtensionMgr' => '',
+'settings_ExtensionMgr' => 'postavke ExtensionMgr',
'settings_Extensions' => 'Ekstenzije',
'settings_extraPath' => 'Extra PHP sadrži putanju',
'settings_extraPath_desc' => 'Putanja do dodatnog softvera. To je mapa koja sadrži npr. adodb mapu ili dodatne Pear pakete',
@@ -1786,30 +1803,30 @@ Internet poveznica: [url]',
'settings_fullSearchEngine_desc' => 'Postavite metodu koja će se koristiti za pretragu punog teksta',
'settings_fullSearchEngine_vallucene' => 'Zend Lucene',
'settings_fullSearchEngine_valsqlitefts' => 'SQLiteFTS',
-'settings_globalApprover' => '',
-'settings_globalApprover_desc' => '',
-'settings_globalGroupApprover' => '',
-'settings_globalGroupApprover_desc' => '',
-'settings_globalGroupReviewer' => '',
-'settings_globalGroupReviewer_desc' => '',
-'settings_globalReviewer' => '',
-'settings_globalReviewer_desc' => '',
-'settings_global_approver_is_admin' => '',
-'settings_global_reviewer_is_admin' => '',
+'settings_globalApprover' => 'postavke globalApprover',
+'settings_globalApprover_desc' => 'postavke globalApprover desc',
+'settings_globalGroupApprover' => 'postavke globalGroupApprover',
+'settings_globalGroupApprover_desc' => 'postavke globalGroupApprover desc',
+'settings_globalGroupReviewer' => 'postavke globalGroupReviewer',
+'settings_globalGroupReviewer_desc' => 'postavke globalGroupReviewer desc',
+'settings_globalReviewer' => 'postavke globalReviewer',
+'settings_globalReviewer_desc' => 'postavke globalReviewer desc',
+'settings_global_approver_is_admin' => 'postavke globalni odobravatelj je admin',
+'settings_global_reviewer_is_admin' => 'Globalni recenzent postavki je admin',
'settings_guestID' => 'ID gosta',
'settings_guestID_desc' => 'ID gost korisnika koja se koristi kada je prijavljen kao gost (uglavnom se ne treba mijenjati)',
-'settings_guestid_is_admin' => '',
-'settings_guestid_is_disabled' => '',
+'settings_guestid_is_admin' => 'postavke guestid je admin',
+'settings_guestid_is_disabled' => 'postavke guestid je onemogućen',
'settings_httpRoot' => 'Http korijen',
'settings_httpRoot_desc' => 'U URL-u, putanja na što se odnosi, nakon domene. Ne sadrži http:// prefiks ili naziv web hosta. Npr. ako je puni URL http://www.example.com/seeddms/, postavi \'/seeddms/\'. Ako je URL http://www.example.com/, postavi \'/\'',
-'settings_incItemsPerPage' => '',
-'settings_incItemsPerPage_desc' => '',
+'settings_incItemsPerPage' => 'postavke incItemsPerPage',
+'settings_incItemsPerPage_desc' => 'postavke incItemsPerPage desc',
'settings_initialDocumentStatus' => 'Početni status dokumenta',
'settings_initialDocumentStatus_desc' => 'Ovo je status koji će biti postavljen za dokument prilikom dodavanja.',
'settings_initialDocumentStatus_draft' => 'Nacrt',
'settings_initialDocumentStatus_released' => 'oslobođeno',
-'settings_inlineEditing' => '',
-'settings_inlineEditing_desc' => '',
+'settings_inlineEditing' => 'postavke inlineEditing',
+'settings_inlineEditing_desc' => 'postavke inlineUređivanje desc',
'settings_installADOdb' => 'Instaliraj ADOdb',
'settings_install_disabled' => 'Datoteka ENABLE_INSTALL_TOOL je izbrisana. Sada se možete prijaviti u ProsperaDMS i nastaviti konfiguraciju.',
'settings_install_pear_package_log' => 'Instaliraj Pear paket \'Log\'',
@@ -1818,62 +1835,64 @@ Internet poveznica: [url]',
'settings_install_welcome_text' => 'Prije nego počnete instalirati ProsperaDMS uvjerite se da ste izradili datoteku \'ENABLE_INSTALL_TOOL\' u vašoj mapi konfiguracije, jer u suprotnom instalacija neće raditi. Na Unix sustavu to se može lako učiniti s \'touch conf/ENABLE_INSTALL_TOOL\'. Nakon završteka instalacije izbrišite datoteku.
ProsperaDMS ima jako male zahtjeve. Trebat ćete mysql bazu podataka ili sqlite podršku i web server s omogućenim php-om. Pear paket Log također treba biti instaliran. Za lucene potpuno pretraživanje teksta, također će vam trebati Zend framework instaliran na disku gdje ga se može pronaći php-om. Za WebDAV server tađer ćete trebati HTTP_WebDAV_Server. Putanja do njega se može kasnije postaviti tijekom instalacije.
Ako želite izraditi bazu podataka prije nego započnete instalaciju, tada je ručno napravite s vama omiljenim alatom, po želji izradite korisnika baze podataka s pristupom bazi podataka i uvezite jedno od odlagališta baza podataka u mapu konfiguracije. Naravno to za vas može napraviti instalacijska skripta, ali će trebati pristup bazi podataka s pravima za izradu baza podataka.
',
'settings_install_welcome_title' => 'Dobrodošli u instalaciju ProsperaDMS-a',
'settings_install_zendframework' => 'Instalirajte Zend Framework, ako namjeravate koristiti pogon za pretraživanje cijelog teksta',
-'settings_invalid_guestid' => '',
+'settings_invalid_guestid' => 'postavke nevažeći guestid',
'settings_language' => 'Zadani jezik',
'settings_language_desc' => 'Zadani jezik (jezik podmapa u mapi "jezici")',
'settings_libraryFolder' => 'Mapa biblioteke',
'settings_libraryFolder_desc' => 'Mapa u koju se mogu kopirati dokumenti za kreiranje novih dokumenata',
'settings_logFileEnable' => 'Omogući log datoteku',
'settings_logFileEnable_desc' => 'Omogući/onemogući log datoteku',
-'settings_logFileMaxLevel' => '',
-'settings_logFileMaxLevel_desc' => '',
+'settings_logFileMaxLevel' => 'postavke logFileMaxLevel',
+'settings_logFileMaxLevel_desc' => 'postavke logFileMaxLevel desc',
+'settings_logFileRestApiMaxLevel' => 'postavke logFileRestApiMaxLevel',
+'settings_logFileRestApiMaxLevel_desc' => 'postavke logFileRestApiMaxLevel desc',
'settings_logFileRotation' => 'Log File Rotation',
'settings_logFileRotation_desc' => 'The log file rotation',
'settings_loginFailure' => 'Neuspješna prijava',
'settings_loginFailure_desc' => 'Onemogući korisnički račun nakon n neuspješnih prijava.',
-'settings_logLevelAlert' => '',
-'settings_logLevelCritical' => '',
-'settings_logLevelDebug' => '',
-'settings_logLevelEmergency' => '',
-'settings_logLevelError' => '',
-'settings_logLevelInfo' => '',
-'settings_logLevelNotice' => '',
-'settings_logLevelWarning' => '',
+'settings_logLevelAlert' => 'postavke logLevelAlert',
+'settings_logLevelCritical' => 'postavke logLevelCritical',
+'settings_logLevelDebug' => 'postavke logLevelDebug',
+'settings_logLevelEmergency' => 'postavke logLevelEmergency',
+'settings_logLevelError' => 'postavke logLevelError',
+'settings_logLevelInfo' => 'postavke logLevelInfo',
+'settings_logLevelNotice' => 'postavke logLevelNotice',
+'settings_logLevelWarning' => 'postavke logLevelWarning',
'settings_luceneClassDir' => 'Lucene ProsperaDMS mapa',
'settings_luceneClassDir_desc' => 'Putanja do ProsperaDMS_Lucene (opcija). Ostavite ovo prazno ako ste instalirali ProsperaDMS_Lucene na mjestu gdje se može pronaći PHP-om, npr. Extra PHP Include-Path',
'settings_luceneDir' => 'Mapa za indeksiranje cijelog teksta',
'settings_luceneDir_desc' => 'Putanja to Lucene indeksa',
-'settings_manager_approver_is_admin' => '',
-'settings_manager_reviewer_is_admin' => '',
-'settings_markdownComments' => '',
-'settings_markdownComments_desc' => '',
+'settings_manager_approver_is_admin' => 'odobravatelj upravitelja postavki je admin',
+'settings_manager_reviewer_is_admin' => 'recenzent upravitelja postavki je admin',
+'settings_markdownComments' => 'postavke markdownKomentari',
+'settings_markdownComments_desc' => 'postavke markdownKomentari desc',
'settings_maxDirID' => 'Max Directory ID',
'settings_maxDirID_desc' => 'Maksimalni broj podmapa po nadređenoj mapi. Zadano: 0.',
'settings_maxExecutionTime' => 'Max. vrijeme izvršenja (s)',
'settings_maxExecutionTime_desc' => 'Ovo postavlja maksimalno vrijeme u sekundama u kojem je skripti dopušteno da se pokrene prije nego se prekine rasčlanjivanjem',
-'settings_maxItemsPerPage' => '',
-'settings_maxItemsPerPage_desc' => '',
+'settings_maxItemsPerPage' => 'postavke maxItemsPerPage',
+'settings_maxItemsPerPage_desc' => 'postavke maxItemsPerPage desc',
'settings_maxRecursiveCount' => 'Max. broj rekurzivnog dokumenta/mape',
'settings_maxRecursiveCount_desc' => 'To je maksimalni broj dokumenata ili mapa koji će biti označen pristupnim pravima, pri rekurzivnom brojanju objekata. Ako se taj broj premaši, broj dokumenata i mapa u pregledu mape će biti procjenjen.',
'settings_maxSizeForFullText' => 'Maksimalna veličina dokumenta za instant indeksiranje',
-'settings_maxSizeForFullText_desc' => '',
-'settings_maxUploadSize' => '',
-'settings_maxUploadSize_desc' => '',
+'settings_maxSizeForFullText_desc' => 'postavke maxSizeForFullText desc',
+'settings_maxUploadSize' => 'postavke maxUploadSize',
+'settings_maxUploadSize_desc' => 'postavke maxUploadSize desc',
'settings_more_settings' => 'Konfiguriraj više postavki. Zadana prijava: admin/admin',
-'settings_noDocumentFormFields' => '',
-'settings_noDocumentFormFields_desc' => '',
-'settings_noFolderFormFields' => '',
-'settings_noFolderFormFields_desc' => '',
+'settings_noDocumentFormFields' => 'postavke noDocumentFormFields',
+'settings_noDocumentFormFields_desc' => 'postavke noDocumentFormFields desc',
+'settings_noFolderFormFields' => 'postavke noFolderFormFields',
+'settings_noFolderFormFields_desc' => 'postavke noFolderFormFields desc',
'settings_notfound' => 'Nije pronađeno',
'settings_Notification' => 'Postavke bilježenja',
'settings_notwritable' => 'Konfiguracija se ne može pohraniti jer datoteka konfiguracije nema mogućnost upisivanja.',
'settings_no_content_dir' => 'Mapa sadržaja',
'settings_onePageMode' => 'Mod jedne strane',
-'settings_onePageMode_desc' => '',
+'settings_onePageMode_desc' => 'postavke onePageMode desc',
'settings_overrideMimeType' => 'Premosti tip datoteke',
'settings_overrideMimeType_desc' => 'Premošćivanje tipa datoteke određenog od strane pretraživača ako je datoteka učitana. Novi tip datoteke se određuje od strane DMS sustava.',
-'settings_overrideTheme' => '',
-'settings_overrideTheme_desc' => '',
+'settings_overrideTheme' => 'postavke overrideTheme',
+'settings_overrideTheme_desc' => 'postavke nadjačatiOpis teme',
'settings_partitionSize' => 'Veličina djelomične datoteke',
'settings_partitionSize_desc' => 'Veličine djelomičnih datoteka u bajtovima, učitane s jumploader-om. Ne postavljajte vrijednot veću od max. veličine učitavanja koju je postavio server.',
'settings_passwordExpiration' => 'Istek lozinke',
@@ -1897,26 +1916,26 @@ Internet poveznica: [url]',
'settings_presetExpirationDate_desc' => 'Svi novo učitani dokumenti će datum isteka imati postavljen na ovu vrijednost. Unešeni datum se može odrediti razumljivom PHP strtotime() funkcijom, npr. +5 tjedana.',
'settings_previewWidthDetail' => 'Širina pretpregleda slika (detalj)',
'settings_previewWidthDetail_desc' => 'Širina pretpregleda slike prikazanog na stranici detalja',
-'settings_previewWidthDropFolderList' => '',
-'settings_previewWidthDropFolderList_desc' => '',
+'settings_previewWidthDropFolderList' => 'postavke previewWidthDropFolderList',
+'settings_previewWidthDropFolderList_desc' => 'postavke previewWidthDropFolderList desc',
'settings_previewWidthList' => 'Širina pretpregleda slika (popis)',
'settings_previewWidthList_desc' => 'Širina pretpregleda slika prikazanih u popisima',
-'settings_previewWidthMenuList' => '',
-'settings_previewWidthMenuList_desc' => '',
+'settings_previewWidthMenuList' => 'postavke previewWidthMenuList',
+'settings_previewWidthMenuList_desc' => 'postavke previewWidthMenuList desc',
'settings_printDisclaimer' => 'Ispiši odricanje od odgovornosti',
'settings_printDisclaimer_desc' => 'Ako je omogućeno, poruka odricanja od odgovornosti će se ispisati na dnu svake stranice',
-'settings_proxyUPassword' => '',
-'settings_proxyUPassword_desc' => '',
-'settings_proxyUrl' => '',
-'settings_proxyUrl_desc' => '',
-'settings_proxyUser' => '',
-'settings_proxyUser_desc' => '',
+'settings_proxyUPassword' => 'postavke proxyUPassword',
+'settings_proxyUPassword_desc' => 'postavke proxyUPassword desc',
+'settings_proxyUrl' => 'postavke proxyUrl',
+'settings_proxyUrl_desc' => 'postavke proxyUrl desc',
+'settings_proxyUser' => 'postavke proxyUser',
+'settings_proxyUser_desc' => 'postavke proxyUser desc',
'settings_quota' => 'Korisnička kvota',
'settings_quota_desc' => 'Maksimalni broj bajtova na disku koji korisnik može koristiti. Postavite na 0 za neograničeni prostor na disku. Ova vrijednost može biti postavljena svakom korisniku u njegovom profilu.',
-'settings_removeFromDropFolder' => '',
-'settings_removeFromDropFolder_desc' => '',
-'settings_repositoryUrl' => '',
-'settings_repositoryUrl_desc' => '',
+'settings_removeFromDropFolder' => 'postavke removeFromDropFolder',
+'settings_removeFromDropFolder_desc' => 'postavke removeFromDropFolder desc',
+'settings_repositoryUrl' => 'postavke repositoryUrl',
+'settings_repositoryUrl_desc' => 'postavke repositoryUrl desc',
'settings_restricted' => 'Ograničeni pristup',
'settings_restricted_desc' => 'Omogući prijavu korisnicima samo ako imaju pristup u lokalnu bazu podataka (bez obzira na uspješnu autentifikaciju s LDAP-om)',
'settings_rootDir' => 'Root mapa',
@@ -1926,29 +1945,29 @@ Internet poveznica: [url]',
'settings_SaveError' => 'Greška pri spremanju datoteke konfiguracije',
'settings_Server' => 'Postavke servera',
'settings_showFullPreview' => 'Prikaži cijeli dokument',
-'settings_showFullPreview_desc' => '',
+'settings_showFullPreview_desc' => 'postavke showFullPreview desc',
'settings_showMissingTranslations' => 'Prikaži prijevode koji nedostaju',
'settings_showMissingTranslations_desc' => 'Navedi sve prijevode koji nedostaju na stranici na dnu stranice. Prijavljeni korisnik će moći podnijeti prijedlog za prijevode koji nedostaju koji će biti pohranjen u csv datoteku. Ne uključujte ovu funkciju ako ste u proizvodnoj okolini!',
-'settings_showSingleSearchHit' => '',
-'settings_showSingleSearchHit_desc' => '',
+'settings_showSingleSearchHit' => 'postavke showSingleSearchHit',
+'settings_showSingleSearchHit_desc' => 'postavke showSingleSearchHit desc',
'settings_Site' => 'Stranica',
'settings_siteDefaultPage' => 'Zadana stranica',
'settings_siteDefaultPage_desc' => 'Zadana stranica kod prijave. Ako je prazno, zadano je out/out.ViewFolder.php',
'settings_siteName' => 'Naziv stranice',
'settings_siteName_desc' => 'Naziv stranice koji se koristi u naslovima stranice. Zadano: ProsperaDMS',
'settings_SMTP' => 'Postavke SMTP servera',
-'settings_smtpForceFrom' => '',
-'settings_smtpForceFrom_desc' => '',
-'settings_smtpLazySSL' => '',
-'settings_smtpLazySSL_desc' => '',
+'settings_smtpForceFrom' => 'postavke smtpForceFrom',
+'settings_smtpForceFrom_desc' => 'postavke smtpForceFrom desc',
+'settings_smtpLazySSL' => 'postavke smtpLazySSL',
+'settings_smtpLazySSL_desc' => 'postavke smtpLazySSL desc',
'settings_smtpPassword' => 'Lozinka za pristup SMTP serveru',
'settings_smtpPassword_desc' => 'Lozinka za pristup SMTP serveru',
'settings_smtpPort' => 'Port SMTP servera',
'settings_smtpPort_desc' => 'Port SMTP servera, zadano 25',
'settings_smtpSendFrom' => 'Pošalji od',
'settings_smtpSendFrom_desc' => 'Pošaji od',
-'settings_smtpSendTestMail' => '',
-'settings_smtpSendTestMail_desc' => '',
+'settings_smtpSendTestMail' => 'postavke smtpSendTestMail',
+'settings_smtpSendTestMail_desc' => 'postavke smtpSendTestMail desc',
'settings_smtpServer' => 'Hostname SMTP servera',
'settings_smtpServer_desc' => 'Hostname SMTP servera',
'settings_smtpUser' => 'Korisnik SMTP servera',
@@ -1970,19 +1989,19 @@ Internet poveznica: [url]',
'settings_strictFormCheck' => 'Provjera striktnog obrasca',
'settings_strictFormCheck_desc' => 'Provjeravanje striktnog obrasca. Ako je postavljeno na "true", tada će svim poljima u obrascu biti provjerena vrijednost. Ako je postavljeno na "false", tada (uglavnom) će polja komentara i ključnih riječi postati izborna. Komentari se uvijek zahtjevaju kada se podnose pregledi ili obilaženje statusa dokumenta',
'settings_suggestionvalue' => 'Predložena vrijednost',
-'settings_suggestTerms' => '',
-'settings_suggestTerms_desc' => '',
+'settings_suggestTerms' => 'postavke predlažeUvjeti',
+'settings_suggestTerms_desc' => 'postavke predložitiUvjeti desc',
'settings_System' => 'Sustav',
-'settings_tasksInMenu' => '',
-'settings_tasksInMenu_approval' => '',
-'settings_tasksInMenu_checkedout' => '',
-'settings_tasksInMenu_desc' => '',
-'settings_tasksInMenu_needscorrection' => '',
-'settings_tasksInMenu_receipt' => '',
-'settings_tasksInMenu_rejected' => '',
-'settings_tasksInMenu_review' => '',
-'settings_tasksInMenu_revision' => '',
-'settings_tasksInMenu_workflow' => '',
+'settings_tasksInMenu' => 'postavke tasksInMenu',
+'settings_tasksInMenu_approval' => 'postavke tasksInMenu odobrenje',
+'settings_tasksInMenu_checkedout' => 'postavke tasksInMenu odjava',
+'settings_tasksInMenu_desc' => 'postavke zadaciUIzborniku desc',
+'settings_tasksInMenu_needscorrection' => 'postavke tasksInMenu treba ispravak',
+'settings_tasksInMenu_receipt' => 'postavke tasksInMenu potvrda',
+'settings_tasksInMenu_rejected' => 'postavke tasksInMenu odbijene',
+'settings_tasksInMenu_review' => 'postavke tasksInMenu pregled',
+'settings_tasksInMenu_revision' => 'postavke tasksInMenu revizija',
+'settings_tasksInMenu_workflow' => 'postavke tasksInMenu tijek rada',
'settings_theme' => 'Zadana tema',
'settings_theme_desc' => 'Zadani stil (naziv podmape u mapi "stilovi")',
'settings_titleDisplayHack' => 'Prikaz razdvojenog naslova',
@@ -1993,151 +2012,152 @@ Internet poveznica: [url]',
'settings_updateNotifyTime' => 'Ažuriraj vrijeme obavijesti',
'settings_updateNotifyTime_desc' => 'Korisnici se obavještavaju o promjenama dokumenta koje su se dogodile unutar zadnjih \'Update Notify Time\' sekundi',
'settings_upgrade_php' => 'Ažuriraj PHP najmanje na verziju 5.6.38',
-'settings_uploadedAttachmentIsPublic' => '',
-'settings_uploadedAttachmentIsPublic_desc' => '',
-'settings_useHomeAsRootFolder' => '',
-'settings_useHomeAsRootFolder_desc' => '',
+'settings_uploadedAttachmentIsPublic' => 'postavke uploadedAttachmentIsPublic',
+'settings_uploadedAttachmentIsPublic_desc' => 'postavke uploadedAttachmentIsPublic desc',
+'settings_useHomeAsRootFolder' => 'postavke useHomeAsRootFolder',
+'settings_useHomeAsRootFolder_desc' => 'postavke useHomeAsRootFolder desc',
'settings_versioningFileName' => 'Naziv datoteke verzije dokumenta',
'settings_versioningFileName_desc' => 'Naziv datoteke s informacijom o verziji kreirane alatom za stvaranje sigurnosne kopije',
'settings_versiontolow' => 'Na nižu verziju',
'settings_viewOnlineFileTypes' => 'Vidi online vrste datoteka',
'settings_viewOnlineFileTypes_desc' => 'Datoteke s jednim od sljedećih završetaka mogu se pregledati online (KORISTITE SAMO MALA SLOVA)',
-'settings_webdav' => '',
+'settings_webdav' => 'postavke webdav',
'settings_workflowMode' => 'Način rada toka rada',
'settings_workflowMode_desc' => 'Napredni tok rada vam omogućuje da odredite vaše vlastito izdanje toka rada za verzije dokumenta.',
'settings_workflowMode_valadvanced' => 'napredno',
-'settings_workflowMode_valnone' => '',
+'settings_workflowMode_valnone' => 'postavke workflowMode valnone',
'settings_workflowMode_valtraditional' => 'tradicionalno',
'settings_workflowMode_valtraditional_only_approval' => 'uobičajeno (bez revizije)',
'settings_zendframework' => 'Zend okruženje',
-'set_expiration_date_help' => '',
+'set_expiration_date_help' => 'pomoć za postavljanje datuma isteka',
'set_expiry' => 'Postavi istek',
'set_owner' => 'Postavi vlasnika',
'set_owner_error' => 'Greška pri postavljanju vlasnika',
'set_password' => 'Postavi lozinku',
'set_workflow' => 'Postavi tok rada',
-'show_extension_changelog' => '',
-'show_extension_readme' => '',
-'show_extension_version_list' => '',
+'show_extension_changelog' => 'prikaži dnevnik promjena proširenja',
+'show_extension_readme' => 'prikaži proširenje readme',
+'show_extension_version_list' => 'prikaži popis verzija proširenja',
'signed_in_as' => 'Prijavljen kao',
'sign_in' => 'Prijava u sustav',
'sign_out' => 'Odjava',
'sign_out_user' => 'Odjavi korisnika',
-'site_brand' => '',
+'site_brand' => 'marka stranice',
+'skip_default_export_cols' => 'preskoči zadane izvozne stupce',
'sk_SK' => 'Slovački',
-'sort_by_date' => '',
-'sort_by_expiration_date' => '',
-'sort_by_name' => '',
-'sort_by_sequence' => '',
+'sort_by_date' => 'poredati po datumu',
+'sort_by_expiration_date' => 'poredati po roku trajanja',
+'sort_by_name' => 'poredati po imenu',
+'sort_by_sequence' => 'poredati po nizu',
'space_used_on_data_folder' => 'Prostor iskorišten na podatkovnoj mapi',
'splash_added_to_clipboard' => 'Dodano u međuspremnik',
-'splash_add_access' => '',
+'splash_add_access' => 'splash dodati pristup',
'splash_add_attribute' => 'Dodan novi atribut',
-'splash_add_category' => '',
+'splash_add_category' => 'splash dodati kategoriju',
'splash_add_group' => 'Dodana nova grupa',
'splash_add_group_member' => 'Dodan novi član grupe',
-'splash_add_keyword' => '',
-'splash_add_keyword_category' => '',
-'splash_add_notify' => '',
-'splash_add_role' => '',
-'splash_add_task' => '',
-'splash_add_to_transmittal' => '',
-'splash_add_transmittal' => '',
+'splash_add_keyword' => 'splash dodati ključnu riječ',
+'splash_add_keyword_category' => 'splash dodati kategoriju ključnih riječi',
+'splash_add_notify' => 'splash dodati obavijestiti',
+'splash_add_role' => 'splash dodati ulogu',
+'splash_add_task' => 'splash dodati zadatak',
+'splash_add_to_transmittal' => 'splash dodati prijenosu',
+'splash_add_transmittal' => 'splash dodati transmittal',
'splash_add_user' => 'Dodan novi korisnik',
-'splash_cancel_checkout' => '',
-'splash_checked_in' => '',
-'splash_cleared_cache' => '',
+'splash_cancel_checkout' => 'splash poništiti odjavu',
+'splash_checked_in' => 'splash prijavljen',
+'splash_cleared_cache' => 'prskanjem očišćena predmemorija',
'splash_cleared_clipboard' => 'Očišćen međuspremnik',
-'splash_delete_access' => '',
+'splash_delete_access' => 'splash izbrisati pristup',
'splash_document_added' => 'Dokument dodan',
'splash_document_checkedout' => 'Dokument odjavljen',
-'splash_document_deleted' => '',
+'splash_document_deleted' => 'splash dokument izbrisan',
'splash_document_edited' => 'Dokument pohranjen',
-'splash_document_indexed' => '',
+'splash_document_indexed' => 'splash dokument indeksiran',
'splash_document_locked' => 'Dokument zaključan',
-'splash_document_name_changed' => '',
+'splash_document_name_changed' => 'ime splash dokumenta promijenjeno',
'splash_document_unlocked' => 'Dokument otključan',
-'splash_document_updated' => '',
-'splash_edit_access' => '',
+'splash_document_updated' => 'splash dokument ažuriran',
+'splash_edit_access' => 'splash pristup uređivanju',
'splash_edit_attribute' => 'Atribut pohranjen',
-'splash_edit_category' => '',
-'splash_edit_event' => '',
+'splash_edit_category' => 'splash uredi kategoriju',
+'splash_edit_event' => 'splash uredi događaj',
'splash_edit_group' => 'Groupa pohranjena',
-'splash_edit_keyword' => '',
-'splash_edit_keyword_category' => '',
-'splash_edit_role' => '',
-'splash_edit_task' => '',
-'splash_edit_transmittal' => '',
+'splash_edit_keyword' => 'splash uredi ključnu riječ',
+'splash_edit_keyword_category' => 'splash uredi kategoriju ključnih riječi',
+'splash_edit_role' => 'splash uredi ulogu',
+'splash_edit_task' => 'zadatak uređivanja prskanja',
+'splash_edit_transmittal' => 'prskanje uredi transmittal',
'splash_edit_user' => 'Korisnik pohranjen',
-'splash_error_add_to_transmittal' => '',
-'splash_error_checkin_ended' => '',
-'splash_error_rm_download_link' => '',
-'splash_error_saving_file' => '',
-'splash_error_send_download_link' => '',
-'splash_expiration_date_cleared' => '',
-'splash_expiration_date_set' => '',
-'splash_extension_getlist' => '',
-'splash_extension_import' => '',
-'splash_extension_refresh' => '',
-'splash_extension_upload' => '',
-'splash_folder_added' => '',
-'splash_folder_deleted' => '',
+'splash_error_add_to_transmittal' => 'splash error dodati u transmittal',
+'splash_error_checkin_ended' => 'splash error checkin završio',
+'splash_error_rm_download_link' => 'splash error rm link za preuzimanje',
+'splash_error_saving_file' => 'splash pogreška pri spremanju datoteke',
+'splash_error_send_download_link' => 'splash error pošalji vezu za preuzimanje',
+'splash_expiration_date_cleared' => 'splash datum isteka izbrisan',
+'splash_expiration_date_set' => 'splash datum isteka postavljen',
+'splash_extension_getlist' => 'splash proširenje getlist',
+'splash_extension_import' => 'splash extension import',
+'splash_extension_refresh' => 'splash extension osvježiti',
+'splash_extension_upload' => 'splash proširenje upload',
+'splash_folder_added' => 'dodana mapa splash',
+'splash_folder_deleted' => 'splash mapa izbrisana',
'splash_folder_edited' => 'Pohrani izmjene mape',
-'splash_importfs' => '',
-'splash_inherit_access' => '',
+'splash_importfs' => 'splash importfs',
+'splash_inherit_access' => 'splash naslijediti pristup',
'splash_invalid_folder_id' => 'Nevažeći ID mape',
'splash_invalid_searchterm' => 'Nevažeći traženi pojam',
-'splash_invalid_search_service' => '',
-'splash_link_document' => '',
-'splash_mimetype_changed' => '',
+'splash_invalid_search_service' => 'splash nevažeća usluga pretraživanja',
+'splash_link_document' => 'splash link dokument',
+'splash_mimetype_changed' => 'splash mimetype promijenjen',
'splash_moved_clipboard' => 'Međuspremnik je premješten u trenutnu mapu',
-'splash_move_document' => '',
-'splash_move_folder' => '',
-'splash_notinherit_access' => '',
-'splash_receipt_update_success' => '',
+'splash_move_document' => 'splash premjestiti dokument',
+'splash_move_folder' => 'splash premjestiti folder',
+'splash_notinherit_access' => 'splash notinherit pristup',
+'splash_receipt_update_success' => 'splash potvrda ažuriranje uspješno',
'splash_removed_from_clipboard' => 'Uklonjeno iz međuspremnika',
'splash_rm_attribute' => 'Atribut uklonjen',
-'splash_rm_attr_value' => '',
-'splash_rm_category' => '',
+'splash_rm_attr_value' => 'splash rm attr vrijednost',
+'splash_rm_category' => 'splash rm kategorija',
'splash_rm_document' => 'Dokument uklonjen',
-'splash_rm_download_link' => '',
+'splash_rm_download_link' => 'splash rm link za preuzimanje',
'splash_rm_folder' => 'Mapa izbrisana',
'splash_rm_group' => 'Grupa uklonjena',
'splash_rm_group_member' => 'Član grupe uklonjen',
-'splash_rm_keyword' => '',
-'splash_rm_keyword_category' => '',
-'splash_rm_notify' => '',
-'splash_rm_role' => '',
-'splash_rm_transmittal' => '',
+'splash_rm_keyword' => 'splash rm ključna riječ',
+'splash_rm_keyword_category' => 'splash rm kategorija ključnih riječi',
+'splash_rm_notify' => 'prskati rm obavijestiti',
+'splash_rm_role' => 'splash rm uloga',
+'splash_rm_transmittal' => 'prskanje rm transmittal',
'splash_rm_user' => 'Korisnik uklonjen',
-'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' => 'splash rm korisnički procesi',
+'splash_rm_workflow' => 'splash rm tijek rada',
+'splash_rm_workflow_action' => 'splash rm workflow radnja',
+'splash_rm_workflow_state' => 'splash rm stanje tijeka rada',
+'splash_saved_file' => 'splash spremljena datoteka',
+'splash_save_user_data' => 'splash spremiti korisničke podatke',
+'splash_send_download_link' => 'splash poslati vezu za preuzimanje',
+'splash_send_login_data' => 'splash poslati podatke za prijavu',
+'splash_setowner' => 'prskanje setowner',
'splash_settings_saved' => 'Postavke pohranjene',
-'splash_set_default_access' => '',
+'splash_set_default_access' => 'splash postaviti zadani pristup',
'splash_substituted_user' => 'Zamjenski korisnik',
'splash_switched_back_user' => 'Prebačeno nazad na izvornog korisnika',
'splash_toogle_group_manager' => 'Zamjenjen upravitelj grupe',
-'splash_transfer_content' => '',
-'splash_transfer_document' => '',
-'splash_transfer_objects' => '',
-'splash_trigger_workflow' => '',
-'startdate' => '',
+'splash_transfer_content' => 'splash prijenos sadržaja',
+'splash_transfer_document' => 'splash transfer dokument',
+'splash_transfer_objects' => 'objekti prijenosa prskanja',
+'splash_trigger_workflow' => 'tijek rada okidača prskanja',
+'startdate' => 'početni datum',
'state_and_next_state' => 'Status/Slijedeći status',
'statistic' => 'Statistika',
-'statistics_mail_subject' => '',
+'statistics_mail_subject' => 'predmet statistike pošte',
'status' => 'Status',
'status_approval_rejected' => 'Skica odbijena',
'status_approved' => 'Odobreno',
'status_approver_removed' => 'Validator uklonjen iz postupka',
-'status_change' => '',
-'status_needs_correction' => '',
+'status_change' => 'promjena statusa',
+'status_needs_correction' => 'stanje treba ispraviti',
'status_not_approved' => 'Nije odobreno',
'status_not_receipted' => 'Još nije primljeno',
'status_not_reviewed' => 'Nije pregledano',
@@ -2153,67 +2173,68 @@ Internet poveznica: [url]',
'status_revision_sleeping' => 'na čekanju',
'status_revisor_removed' => 'Revizor uklonjen s liste',
'status_unknown' => 'Nepoznato',
+'storage' => '',
'storage_size' => 'Veličina pohrane',
-'subfolder_duplicate_name' => '',
-'submit_2_fact_auth' => '',
+'subfolder_duplicate_name' => 'dupli naziv podmape',
+'submit_2_fact_auth' => 'dostaviti 2 činjenica auth',
'submit_approval' => 'Pošaljite odobrenje',
'submit_login' => 'PRIJAVI SE',
'submit_password' => 'Postavite novu lozinku',
'submit_password_forgotten' => 'Započnite postupak',
'submit_receipt' => 'Pošalji prijem',
'submit_review' => 'Pošaljite ovjeru',
-'submit_revision' => '',
+'submit_revision' => 'podnijeti reviziju',
'submit_userinfo' => 'Pošaljite info',
-'submit_webauthn_login' => '',
-'submit_webauthn_register' => '',
-'subsribe_timelinefeed' => '',
+'submit_webauthn_login' => 'podnijeti webauthn prijavu',
+'submit_webauthn_register' => 'podnijeti webauthn registar',
+'subsribe_timelinefeed' => 'pretplatiti se na vremensku linijufeed',
'substitute_to_user' => 'Prebaci na \'[username]\'',
'substitute_user' => 'Zamjenski korisnik',
-'success_add_aro' => '',
-'success_add_permission' => '',
-'success_remove_permission' => '',
-'success_toogle_permission' => '',
+'success_add_aro' => 'uspjeh dodati aro',
+'success_add_permission' => 'uspjeh dodati dozvolu',
+'success_remove_permission' => 'uspjeh ukloniti dozvolu',
+'success_toogle_permission' => 'uspjeh preklopi dopuštenje',
'sunday' => 'Nedjelja',
'sunday_abbr' => 'Ne',
'sv_SE' => 'Švedski',
'switched_to' => 'Promjenjeno u',
-'takeOverAttributeValue' => '',
+'takeOverAttributeValue' => 'takeOverAttributeValue',
'takeOverGrpApprover' => 'Preuzimanje grupe odobravatelja iz zadnje verzije.',
-'takeOverGrpApprovers' => '',
+'takeOverGrpApprovers' => 'takeOverGrpApprovers',
'takeOverGrpReviewer' => 'Preuzimanje grupe revizora iz zadnje verzije.',
-'takeOverGrpReviewers' => '',
+'takeOverGrpReviewers' => 'takeOverGrpReviewers',
'takeOverIndApprover' => 'Preuzimanje pojedinačnog odobravatelja iz zadnje verzije.',
-'takeOverIndApprovers' => '',
+'takeOverIndApprovers' => 'takeOverIndApprovers',
'takeOverIndReviewer' => 'Preuzimanje pojedinačnog revizora iz zadnje verzije.',
-'takeOverIndReviewers' => '',
-'target_equals_source_folder' => '',
+'takeOverIndReviewers' => 'takeOverIndReviewers',
+'target_equals_source_folder' => 'cilj je jednak izvornoj mapi',
'tasks' => 'Zadaci',
-'task_core_expireddocs_days' => '',
-'task_core_expireddocs_dryrun' => '',
-'task_core_expireddocs_email' => '',
-'task_core_expireddocs_peruser' => '',
-'task_core_importdropfolder_dryrun' => '',
-'task_core_importdropfolder_dryrun_desc' => '',
-'task_core_importdropfolder_keepfile' => '',
-'task_core_importdropfolder_keepfile_desc' => '',
-'task_core_importdropfolder_recursive' => '',
-'task_core_importdropfolder_targetfolder' => '',
-'task_core_importdropfolder_targetfolder_desc' => '',
-'task_core_importdropfolder_users' => '',
-'task_core_indexingdocs_recreate' => '',
-'task_core_recentchanges_days' => '',
-'task_core_recentchanges_lists' => '',
-'task_core_recentchanges_users' => '',
-'task_core_statistic_users' => '',
-'task_description' => '',
-'task_disabled' => '',
-'task_failures' => '',
-'task_frequency' => '',
-'task_frequency_placeholder' => '',
-'task_last_run' => '',
-'task_name' => '',
-'task_next_run' => '',
-'temp_jscode' => '',
+'task_core_expireddocs_days' => 'jezgra zadatka expireddocs dana',
+'task_core_expireddocs_dryrun' => 'jezgra zadatka expireddocs dryrun',
+'task_core_expireddocs_email' => 'jezgra zadatka expireddocs e-pošta',
+'task_core_expireddocs_peruser' => 'zadatak jezgre expireddocs peruser',
+'task_core_importdropfolder_dryrun' => 'jezgra zadatka importdropfolder dryrun',
+'task_core_importdropfolder_dryrun_desc' => 'jezgra zadatka importdropfolder dryrun desc',
+'task_core_importdropfolder_keepfile' => 'jezgra zadatka importdropfolder keepfile',
+'task_core_importdropfolder_keepfile_desc' => 'jezgra zadatka importdropfolder keepfile desc',
+'task_core_importdropfolder_recursive' => 'jezgra zadatka importdropfolder rekurzivan',
+'task_core_importdropfolder_targetfolder' => 'jezgra zadatka importdropfolder targetfolder',
+'task_core_importdropfolder_targetfolder_desc' => 'jezgra zadatka importdropfolder targetfolder desc',
+'task_core_importdropfolder_users' => 'task core importdropfolder korisnici',
+'task_core_indexingdocs_recreate' => 'task core indexingdocs recreate',
+'task_core_recentchanges_days' => 'jezgra zadatka recentchanges dani',
+'task_core_recentchanges_lists' => 'popisi nedavnih promjena jezgre zadatka',
+'task_core_recentchanges_users' => 'jezgra zadatka recentchanges korisnici',
+'task_core_statistic_users' => 'korisnici osnovne statistike zadatka',
+'task_description' => 'opis zadatka',
+'task_disabled' => 'zadatak onemogućen',
+'task_failures' => 'neuspjesi zadataka',
+'task_frequency' => 'učestalost zadatka',
+'task_frequency_placeholder' => 'mjesto za frekvenciju zadatka',
+'task_last_run' => 'zadnji zadatak',
+'task_name' => 'naziv zadatka',
+'task_next_run' => 'sljedeći zadatak',
+'temp_jscode' => 'privremeni jscode',
'testmail_body' => 'Ova poruka služi samo za testiranje konfiguracije ProsperaDMS-a',
'testmail_subject' => 'Testna poruka',
'theme' => 'Tema',
@@ -2224,37 +2245,37 @@ Internet poveznica: [url]',
'timeline_add_version' => 'Nova verzija [version]',
'timeline_full_add_file' => '[document]
Novi prilog',
'timeline_full_add_version' => '[document]
Nova verzija [version]',
-'timeline_full_scheduled_revision' => '',
+'timeline_full_scheduled_revision' => 'vremenska linija puna planirana revizija',
'timeline_full_status_change' => '[document]
Verzija [version]: [status]',
-'timeline_scheduled_revision' => '',
+'timeline_scheduled_revision' => 'vremenski raspored planirana revizija',
'timeline_selected_item' => 'Odabrani dokument',
'timeline_skip_add_file' => 'dodan prilog',
-'timeline_skip_scheduled_revision' => '',
+'timeline_skip_scheduled_revision' => 'vremenska traka preskoči planiranu reviziju',
'timeline_skip_status_change_-1' => 'odbijeno',
-'timeline_skip_status_change_-2' => '',
+'timeline_skip_status_change_-2' => 'promjena statusa preskakanja vremenske trake -2',
'timeline_skip_status_change_-3' => 'isteklo',
'timeline_skip_status_change_0' => 'na čekanju za pregled',
'timeline_skip_status_change_1' => 'na čekanju za odobrenje',
'timeline_skip_status_change_2' => 'oslobođeno',
'timeline_skip_status_change_3' => 's tokom rada',
-'timeline_skip_status_change_4' => '',
-'timeline_skip_status_change_5' => '',
+'timeline_skip_status_change_4' => 'promjena statusa preskakanja vremenske trake 4',
+'timeline_skip_status_change_5' => 'promjena statusa preskakanja vremenske trake 5',
'timeline_status_change' => 'Verzija [version]: [status]',
-'title' => '',
+'title' => 'titula',
'to' => 'Do',
'toggle_manager' => 'Zamjeni upravitelja',
-'toggle_qrcode' => '',
-'total' => '',
+'toggle_qrcode' => 'prebaci qrcode',
+'total' => 'ukupno',
'to_before_from' => 'Datum završetka ne može biti prije datuma početka',
-'transfer_content' => '',
+'transfer_content' => 'prijenos sadržaja',
'transfer_document' => 'Prijenos dokumenta',
'transfer_no_read_access' => 'Korisnik nema pravo čitanja u ovom folderu',
-'transfer_no_users' => '',
+'transfer_no_users' => 'prijenos nema korisnika',
'transfer_no_write_access' => 'Korisnik nema pravo pisanja u ovom folderu',
-'transfer_objects' => '',
-'transfer_objects_to_user' => '',
-'transfer_processes_to_user' => '',
-'transfer_process_to_user' => '',
+'transfer_objects' => 'prijenosni objekti',
+'transfer_objects_to_user' => 'prijenos objekata korisniku',
+'transfer_processes_to_user' => 'prijenos procesa korisniku',
+'transfer_process_to_user' => 'proces prijenosa do korisnika',
'transfer_to_user' => 'Prijenos korisniku',
'transition_triggered_email' => 'Zatražena promjena toka rada',
'transition_triggered_email_body' => 'Zatražena promjena toka rada
@@ -2267,12 +2288,12 @@ Trenutni status toka: [current_state]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'transition_triggered_email_body_html' => '',
+'transition_triggered_email_body_html' => 'tijelo e-pošte izazvano prijelazom',
'transition_triggered_email_subject' => '[sitename]: [name] - Zatražena promjena toka rada',
'transmittal' => 'Proslijeđivanje',
'transmittalitem_removed' => 'Stavka za proslijeđivanje je uklonjena',
'transmittalitem_updated' => 'Dokument izmijenjen na zadnju verziju',
-'transmittals' => '',
+'transmittals' => 'prenosioci',
'transmittal_comment' => 'Komentar',
'transmittal_name' => 'Naziv',
'transmittal_size' => 'Veličina',
@@ -2281,12 +2302,12 @@ Internet poveznica: [url]',
'tr_TR' => 'Turski',
'tuesday' => 'Utorak',
'tuesday_abbr' => 'Ut',
-'types_generic' => '',
-'type_of_hook' => '',
-'type_to_filter' => '',
+'types_generic' => 'vrste generički',
+'type_of_hook' => 'vrsta udice',
+'type_to_filter' => 'tip za filtriranje',
'type_to_search' => 'Unesi za pretragu',
'uk_UA' => 'Ukrajinski',
-'undefined' => '',
+'undefined' => 'nedefinirano',
'under_folder' => 'U mapi',
'unknown_attrdef' => 'Nepoznata definicija atributa',
'unknown_command' => 'Naredba nije prepoznata.',
@@ -2295,7 +2316,7 @@ Internet poveznica: [url]',
'unknown_id' => 'nepoznati ID',
'unknown_keyword_category' => 'Nepoznata kategorija',
'unknown_owner' => 'Nepoznati ID vlasnika',
-'unknown_status' => '',
+'unknown_status' => 'nepoznat status',
'unknown_user' => 'Nepoznati ID korisnika',
'unlinked_content' => 'Nepovezani sadržaj',
'unlinked_documents' => 'Nepovezani dokumenti',
@@ -2305,12 +2326,12 @@ Internet poveznica: [url]',
'unlock_cause_locking_user' => 'I dalje ga možete ažurirati jer ste ga vi zaključali. Zaključavanje će automatski biti ukinuto.',
'unlock_document' => 'Otključaj',
'update' => 'Ažuriraj',
-'updated' => '',
-'updated_documents' => '',
+'updated' => 'ažuriran',
+'updated_documents' => 'ažurirani dokumenti',
'update_approvers' => 'Ažuriraj popis validatora',
'update_document' => 'Ažuriraj dokument',
'update_fulltext_index' => 'Ažuriraj indeksiranje cijelog teksta',
-'update_fulltext_messages' => '',
+'update_fulltext_messages' => 'ažuriraj poruke s punim tekstom',
'update_info' => 'Info ažuriranje',
'update_locked_msg' => 'Ovaj dokument je zaključan.',
'update_recipients' => 'Izmjena liste primatelja',
@@ -2320,11 +2341,11 @@ Internet poveznica: [url]',
'uploaded_by' => 'Učitao',
'uploading_failed' => 'Neuspješno učitavanje jedne od vaših datoteka. Molimo provjerite maksimalnu veličinu datoteke za učitavanje.',
'uploading_maxsize' => 'Učitana datoteke premašuje maksimalnu veličinu datoteke za učitavanje.',
-'uploading_postmaxsize' => '',
+'uploading_postmaxsize' => 'učitavanje postmaxsize',
'uploading_zerosize' => 'Datoteka koja se učitava je prazna. Učitavanje je otkazano.',
'used_discspace' => 'Iskorišteni prostor na disku',
'user' => 'Korisnik',
-'userdata_file' => '',
+'userdata_file' => 'datoteka korisničkih podataka',
'userid_groupid' => 'ID Korisnika/ID Grupe',
'users' => 'Korisnici',
'users_and_groups' => 'Korisnici/Grupe',
@@ -2334,16 +2355,16 @@ Internet poveznica: [url]',
'user_group_management' => 'Upravljanje korisnicima/grupama',
'user_image' => 'Slika',
'user_info' => 'Korisničke informacije',
-'user_is_mandatory_approver' => '',
-'user_is_mandatory_reviewer' => '',
+'user_is_mandatory_approver' => 'korisnik je obavezni odobravatelj',
+'user_is_mandatory_reviewer' => 'korisnik je obvezni recenzent',
'user_list' => 'Popis korisnika',
'user_login' => 'Korisničko ime',
'user_management' => 'Upravljanje korisnicima',
'user_name' => 'Puni naziv',
-'user_previously_removed_from_approvers' => '',
-'user_previously_removed_from_recipients' => '',
-'user_previously_removed_from_reviewers' => '',
-'user_previously_removed_from_revisors' => '',
+'user_previously_removed_from_approvers' => 'korisnik prethodno uklonjen iz odobravatelja',
+'user_previously_removed_from_recipients' => 'korisnik prethodno uklonjen iz primatelja',
+'user_previously_removed_from_reviewers' => 'korisnik prethodno uklonjen iz recenzenata',
+'user_previously_removed_from_revisors' => 'korisnik prethodno uklonjen iz redaktora',
'use_comment_of_document' => 'Koristi komentar dokumenta',
'use_default_categories' => 'Koristi predefinirane kategorije',
'use_default_keywords' => 'Koristi predefinirane ključne riječi',
@@ -2353,10 +2374,10 @@ Internet poveznica: [url]',
'versioning_file_creation_warning' => 'Ovo radnjom možete izraditi datoteku koja sadrži informacije o verzijama cijele DMS mape. Nakon izrade, svaka datoteka će biti pohranjena unutar podatkovne mape.',
'versioning_info' => 'Info o verzijama',
'versiontolow' => 'Na nižu verziju',
-'version_comment' => '',
-'version_comment_changed_email_body' => '',
-'version_comment_changed_email_body_html' => '',
-'version_comment_changed_email_subject' => '',
+'version_comment' => 'komentar verzije',
+'version_comment_changed_email_body' => 'komentar verzije promijenjen tijelo e-pošte',
+'version_comment_changed_email_body_html' => 'komentar verzije promijenjen tijelo e-pošte html',
+'version_comment_changed_email_subject' => 'komentar verzije promijenjen predmet e-pošte',
'version_deleted_email' => 'Izbrisana verzija',
'version_deleted_email_body' => 'Izbrisana verzija
Dokument: [name]
@@ -2364,57 +2385,57 @@ Verzija: [version]
Glavna mapa: [folder_path]
Korisnik: [username]
Internet poveznica: [url]',
-'version_deleted_email_body_html' => '',
+'version_deleted_email_body_html' => 'verzija izbrisano tijelo e-pošte html',
'version_deleted_email_subject' => '[sitename]: [name] - Izbrisana verzija',
'version_info' => 'Informacije o verziji',
'view' => 'Pregled',
'view_document' => 'Detalji dokumenta',
-'view_folder' => '',
+'view_folder' => 'pogledaj mapu',
'view_online' => 'Online pregled',
'warning' => 'Upozorenje',
-'warning_remove_approval_log' => '',
-'warning_remove_review_log' => '',
-'webauthn' => '',
-'webauthn_auth' => '',
-'webauthn_crossplatform_info' => '',
-'webauthn_info' => '',
-'webauthn_login_test' => '',
-'webauthn_registration' => '',
-'webauth_crossplatform' => '',
+'warning_remove_approval_log' => 'upozorenje ukloniti dnevnik odobrenja',
+'warning_remove_review_log' => 'upozorenje ukloniti dnevnik pregleda',
+'webauthn' => 'webauthn',
+'webauthn_auth' => 'webauthn auth',
+'webauthn_crossplatform_info' => 'webauthn informacije o više platformi',
+'webauthn_info' => 'webauthn info',
+'webauthn_login_test' => 'webauthn test prijave',
+'webauthn_registration' => 'webauthn registracija',
+'webauth_crossplatform' => 'webauth crossplatform',
'wednesday' => 'Srijeda',
'wednesday_abbr' => 'Sr',
'weeks' => 'tjedni',
'week_view' => 'Pregled po tjednima',
'workflow' => 'Tok rada',
-'workflows_involded' => '',
+'workflows_involded' => 'uključeni tijekovi rada',
'workflow_actions_management' => 'Upravljanje radnjama toka rada',
'workflow_action_in_use' => 'Ova radnju trenutno koriste tokovi rada.',
'workflow_action_name' => 'Naziv',
'workflow_editor' => 'Urednik toka rada',
'workflow_group_summary' => 'Pregled grupe',
-'workflow_has_cycle' => '',
+'workflow_has_cycle' => 'tijek rada ima ciklus',
'workflow_initstate' => 'Početni status',
'workflow_in_use' => 'Dokumenti trenutno koriste ovaj tok rada.',
-'workflow_layoutdata_saved' => '',
-'workflow_log' => '',
+'workflow_layoutdata_saved' => 'podaci o izgledu tijeka rada spremljeni',
+'workflow_log' => 'dnevnik tijeka rada',
'workflow_management' => 'Upravljanje toka rada',
'workflow_name' => 'Naziv',
-'workflow_no_doc_rejected_state' => '',
-'workflow_no_doc_released_state' => '',
-'workflow_no_initial_state' => '',
+'workflow_no_doc_rejected_state' => 'tijek rada bez dokumenta odbijeno stanje',
+'workflow_no_doc_released_state' => 'tijek rada bez izdanog dokumenta stanje',
+'workflow_no_initial_state' => 'tijek rada bez početnog stanja',
'workflow_no_states' => 'Prije dodavanja toka rada najprije morate odrediti statuse toka rada.',
-'workflow_save_layout' => '',
-'workflow_state' => '',
+'workflow_save_layout' => 'tijek rada spremi izgled',
+'workflow_state' => 'stanje tijeka rada',
'workflow_states_management' => 'Upravljanje statusima toka rada',
'workflow_state_docstatus' => 'Statusi dokumenta',
'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_title' => 'naslov tijeka rada',
+'workflow_transition_without_user_group' => 'prijelaz tijeka rada bez grupe korisnika',
'workflow_user_summary' => 'Pregled korisnika',
-'wrong_checksum' => '',
-'wrong_filetype' => '',
+'wrong_checksum' => 'pogrešan kontrolni zbroj',
+'wrong_filetype' => 'pogrešan tip datoteke',
'x_more_objects' => '[number] više objekata',
'year_view' => 'Pregled po godini',
'yes' => 'Da',
diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc
index 628b2c6fa..057386e8b 100644
--- a/languages/hu_HU/lang.inc
+++ b/languages/hu_HU/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'Kétfaktoros azonosítás',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'A rendszernek két faktoros hitelesítése van. Szükséged lesz a Google Authenticator-ra a mobil telefonodon. Lejebb látható két QR kód. A jobb oldali a saját jelszavát, a baloldali egy új titkos jelszót tartalmaz. Ha új jelszót szeretne beállítani, szkennelje be újra a Goolge Authenticator-al.',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -560,6 +561,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -690,6 +693,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => 'Bővítmények',
'extension_changelog' => 'Változásnapló',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Kiterjesztések betöltése ...',
@@ -1143,6 +1148,7 @@ URL: [url]',
'no_groups' => 'Nincsenek csoportok',
'no_group_members' => 'Ennek a csoportnak nincsenek tagjai',
'no_linked_files' => 'Nincsenek hivatkozott állományok',
+'no_mimetype' => '',
'no_previous_versions' => 'Nem találhatók más változatok',
'no_receipt_needed' => '',
'no_review_needed' => 'Nincs folyamatban lévő felülvizsgálat.',
@@ -1296,7 +1302,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Dokumentum változatból eltávolított munkafolyamat',
'removeFolderFromDropFolder' => '',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Megjelölt állományok eltávolítása',
'remove_review_log' => '',
'remove_task' => '',
@@ -1477,6 +1485,7 @@ URL: [url]',
'select_category' => 'Kattintson a kategória kiválasztásához',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Csoport kiválasztása',
'select_groups' => 'Kattintson a csoportok kijelöléséhez',
'select_grp_approvers' => 'Kattintson a csoport jóváhagyó kijelöléséhez',
@@ -1524,7 +1533,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Beállítások',
'settings_activate_module' => 'Modul aktiválása',
'settings_activate_php_extension' => 'PHP kiterjesztés aktiválása',
@@ -1622,6 +1633,8 @@ URL: [url]',
'settings_delete_install_folder' => 'A SeedDMS használatához törölnie kell a konfigurációs könyvtárban található ENABLE_INSTALL_TOOL állományt.',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Saját adatok szerkesztésének tiltása',
'settings_disableSelfEdit_desc' => 'Ha be van jelölve a felhasználó nem szerkesztheti saját profilját',
'settings_disable_install' => 'Törölje az ENABLE_INSTALL_TOOL állományt, ha lehetséges',
@@ -1687,6 +1700,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => 'Ha beállítja az állományok feltöltése elérhető lesz egy jumploadernek hívott java appleten keresztül a böngészőprogram állomány méret korlátja nélkül. Ez engedélyezi több állomány feltöltését egy lépésben.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Feladatok menüpont engedélyezése',
'settings_enableMenuTasks_desc' => 'Engedélyezi / letiltja a menüelemet, amely a felhasználó összes feladatát tartalmazza. Ez olyan dokumentumokat tartalmaz, amelyeket felül kell vizsgálni, jóvá kell hagyni stb.',
'settings_enableMenuTransmittals' => '',
@@ -1746,6 +1761,8 @@ URL: [url]',
'settings_encryptionKey' => 'Titkosító kulcs',
'settings_encryptionKey_desc' => 'Ez a karaktersorozat használható egyedi azonosító létrehozásához amely rejtett mezőként lesz hozzáadva az űrlapokhoz a CSRF támadások megelőzésére.',
'settings_error' => 'Hiba',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Mappa fastruktúra kibontása',
'settings_expandFolderTree_desc' => 'Mappa fastruktúra kibontása',
'settings_expandFolderTree_val0' => 'indulás rejtett fastruktúrával',
@@ -1804,6 +1821,8 @@ URL: [url]',
'settings_logFileEnable_desc' => 'Naplóállomány engedélyezése/tiltása',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Naplóállomány forgatása',
'settings_logFileRotation_desc' => 'A naplóállomány forgatása',
'settings_loginFailure' => 'Bejelentkezési hiba',
@@ -2001,6 +2020,7 @@ URL: [url]',
'sign_out' => 'Kijelentkezés',
'sign_out_user' => 'Kijelentkezés',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Szlovák',
'sort_by_date' => '',
'sort_by_expiration_date' => '',
@@ -2130,6 +2150,7 @@ URL: [url]',
'status_revision_sleeping' => '',
'status_revisor_removed' => '',
'status_unknown' => 'Ismeretlen',
+'storage' => '',
'storage_size' => 'Tároló mérete',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/id_ID/lang.inc b/languages/id_ID/lang.inc
index d5a5e4a59..9077a2997 100644
--- a/languages/id_ID/lang.inc
+++ b/languages/id_ID/lang.inc
@@ -19,10 +19,11 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
-// Translators: Admin (485), atoz-chevara (835)
+// Translators: Admin (489), atoz-chevara (835)
$text = array(
'2_factor_auth' => '',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '',
'2_fact_auth_current_secret' => 'Kunci rahasi saat ini',
'2_fact_auth_new_secret' => '',
@@ -381,7 +382,7 @@ URL: [url]',
'dashboard' => '',
'databasesearch' => 'Pencarian Basis data',
'database_schema_version' => 'Versi skema basis data',
-'data_loading' => '',
+'data_loading' => 'Harap tunggu, data sedang disiapkan.',
'date' => 'Tanggal',
'days' => 'hari',
'debug' => 'Debug',
@@ -615,6 +616,8 @@ URL: [url]',
'download_header_document_name' => 'Nama dokumen',
'download_header_document_no' => 'Nomor Dokumen',
'download_header_filename' => 'Nama berkas',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => 'Int. versi',
'download_header_reviewer' => 'Pengulas',
'download_header_review_comment' => '',
@@ -686,7 +689,7 @@ URL: [url]',
'empty_notify_list' => 'Tidak ada entri',
'enable_extension' => 'Aktifkan ekstensi',
'enddate' => '',
-'en_GB' => '',
+'en_GB' => 'Inggris (GB)',
'equal_transition_states' => 'Status awal dan akhir sama',
'error' => 'Galat',
'error_add_aro' => 'Kesalahan saat menambahkan objek permintaan akses',
@@ -746,6 +749,8 @@ URL: [url]',
'export_user_list_csv' => 'Ekspor pengguna sebagai CSV',
'extension_archive' => 'Ekstensi',
'extension_changelog' => '',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => 'Perpanjangan tidak aktif sekarang',
'extension_is_on_now' => '',
'extension_loading' => 'Memuat ekstensi...',
@@ -962,7 +967,7 @@ URL: [url]',
'index_processing' => '',
'index_waiting' => 'Mengunggu',
'individuals' => 'Perorangan',
-'individuals_in_groups' => '',
+'individuals_in_groups' => 'Anggota di grup',
'ind_review_removed' => 'Perubahan status, karena ulasan pengguna [name] telah dihapus.',
'info_recipients_tab_not_released' => '',
'info_rm_user_from_processes_none' => '',
@@ -1236,6 +1241,7 @@ URL: [url]',
'no_groups' => 'Tidak ada kelompok',
'no_group_members' => 'Kelompok ini tidak memiliki anggota',
'no_linked_files' => 'Tidak ada berkas yang ditautkan',
+'no_mimetype' => '',
'no_previous_versions' => 'Tidak ada versi lain yang ditemukan',
'no_receipt_needed' => 'Saat ini tidak ada dokumen yang memerlukan konfirmasi tanda terima.',
'no_review_needed' => 'Tidak ada tinjauan yang tertunda.',
@@ -1405,7 +1411,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '',
'removeFolderFromDropFolder' => 'Hapus folder setelah diimpor',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => 'Hapus persetujuan',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Hapus file yang ditandai',
'remove_review_log' => 'Hapus ulasan',
'remove_task' => '',
@@ -1560,6 +1568,7 @@ URL: [url]',
'select_category' => 'Klik untuk memilih kategori',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Pilih group',
'select_groups' => 'Klik untuk memilih groups',
'select_grp_approvers' => 'Klik untuk memilih group approver',
@@ -1614,7 +1623,9 @@ Jika Anda tidak menerima kata sandi, silakan gunakan fitur lupa kata sandi di ha
'service_name' => '',
'sessions' => 'Pengguna Online',
'setDateFromFile' => 'Ambil alih tanggal dari file yang diimpor',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'Ambil alih tanggal dari folder yang diimpor',
+'setDateFromFolder_desc' => '',
'settings' => 'Pengaturan',
'settings_activate_module' => 'Aktifkan modul',
'settings_activate_php_extension' => 'Aktifkan ekstensi PHP',
@@ -1712,6 +1723,8 @@ Jika Anda tidak menerima kata sandi, silakan gunakan fitur lupa kata sandi di ha
'settings_delete_install_folder' => 'Untuk menggunakan SeedDMS, Anda harus menghapus file ENABLE_INSTALL_TOOL di direktori konfigurasi',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => '',
'settings_disableSelfEdit_desc' => 'Jika dicentang, pengguna tidak dapat mengedit profilnya sendiri',
'settings_disable_install' => '',
@@ -1777,6 +1790,8 @@ Jika Anda tidak menerima kata sandi, silakan gunakan fitur lupa kata sandi di ha
'settings_enableLargeFileUpload_desc' => 'Jika disetel, unggah berkas juga tersedia melalui java applet yang disebut jumploader tanpa batas ukuran berkas yang ditetapkan oleh peramban. Ini juga memungkinkan untuk mengunggah beberapa berkas dalam satu langkah. Mengaktifkan ini akan mematikan cookie http saja.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Aktifkan daftar task di menu',
'settings_enableMenuTasks_desc' => '',
'settings_enableMenuTransmittals' => '',
@@ -1836,6 +1851,8 @@ Jika Anda tidak menerima kata sandi, silakan gunakan fitur lupa kata sandi di ha
'settings_encryptionKey' => '',
'settings_encryptionKey_desc' => '',
'settings_error' => 'Galat',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => '',
'settings_expandFolderTree_desc' => '',
'settings_expandFolderTree_val0' => '',
@@ -1894,6 +1911,8 @@ Jika Anda tidak menerima kata sandi, silakan gunakan fitur lupa kata sandi di ha
'settings_logFileEnable_desc' => '',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => '',
'settings_logFileRotation_desc' => '',
'settings_loginFailure' => 'Gagal masuk',
@@ -2091,6 +2110,7 @@ Jika Anda tidak menerima kata sandi, silakan gunakan fitur lupa kata sandi di ha
'sign_out' => 'Keluar',
'sign_out_user' => '',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovakia',
'sort_by_date' => 'Urutkan berdasarkan tanggal',
'sort_by_expiration_date' => 'Urutkan berdasarkan tanggal kadaluwarsa',
@@ -2220,6 +2240,7 @@ Jika Anda tidak menerima kata sandi, silakan gunakan fitur lupa kata sandi di ha
'status_revision_sleeping' => 'tertunda',
'status_revisor_removed' => '',
'status_unknown' => 'Tidak diketahui',
+'storage' => '',
'storage_size' => 'Ukuran penyimpanan',
'subfolder_duplicate_name' => 'Duplikasi nama subfolder',
'submit_2_fact_auth' => '',
diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc
index 9ec80118e..0ac19b910 100644
--- a/languages/it_IT/lang.inc
+++ b/languages/it_IT/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'Autorizzazione a due fattori',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'Questo sistema usa autenticazione a due fattori. Sarà necessario il “Google Authenticator” sul tuo telephono cellulare. Qui potete vedere due codici QR. Quello di destra è il tuo segreto. è sulla sinistra chè un nuovo segreto. Se si imposta un nuovo segreto per assicurarsi si deve scansione con “Google Authenticator” di nuovo.',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -570,6 +571,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -700,6 +703,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => 'Archivio estensioni',
'extension_changelog' => 'Registro delle modifiche delle estensioni',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Caricamento estensioni...',
@@ -1150,6 +1155,7 @@ URL: [url]',
'no_groups' => 'Nessun gruppo',
'no_group_members' => 'Questo gruppo non ha membri',
'no_linked_files' => 'Nessun file collegato',
+'no_mimetype' => '',
'no_previous_versions' => 'Nessun\'altra versione trovata',
'no_receipt_needed' => 'Rete disco',
'no_review_needed' => 'Nessuna revisione in corso.',
@@ -1314,7 +1320,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Flusso di lavoro rimosso dalla versione del documento',
'removeFolderFromDropFolder' => 'Rimuovi la cartella di pubblicazione dopo l\'importazione',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Rimuovi i files contrassegnati',
'remove_review_log' => '',
'remove_task' => '',
@@ -1518,6 +1526,7 @@ URL: [url]',
'select_category' => 'Clicca per selezionare la categoria',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Seleziona gruppo',
'select_groups' => 'Clicca per selezionare i gruppi',
'select_grp_approvers' => 'Seleziona gruppo approvatore',
@@ -1570,7 +1579,9 @@ Name: [username]
'service_name' => '',
'sessions' => 'Utenti online',
'setDateFromFile' => 'Prende la data dal file importato',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'Prende la data dalla cartella importata',
+'setDateFromFolder_desc' => '',
'settings' => 'Impostazioni',
'settings_activate_module' => 'Attivazione modulo',
'settings_activate_php_extension' => 'Attivazione estensione PHP',
@@ -1668,6 +1679,8 @@ Name: [username]
'settings_delete_install_folder' => 'Per poter usare SeedDMS, devi cancellare il file ENABLE_INSTALL_TOOL nella cartella di configurazione.',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Disabilita auto-modifica',
'settings_disableSelfEdit_desc' => 'Se selezionato l\'utente non può modificare il proprio profilo',
'settings_disable_install' => 'Prova ad eliminare il file ENABLE_INSTALL_TOOL se possibile',
@@ -1733,6 +1746,8 @@ Name: [username]
'settings_enableLargeFileUpload_desc' => 'Se selezionato, il caricamento (upload) dei files può essere effettuato anche attraverso un\'applet Java chiamata Jumploader evitando il limite di dimensioni file imposto dal browser; Jumploader permette anche il caricamento di diversi files contemporaneamente.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Abilita compito delle attività nel menù',
'settings_enableMenuTasks_desc' => 'Abilita/disabilita la voce di menu che contiene tutte le attività degli utenti. Questo conterrà i documenti che devono essere rivisti, approvati, etc.',
'settings_enableMenuTransmittals' => '',
@@ -1792,6 +1807,8 @@ Name: [username]
'settings_encryptionKey' => 'Chiave di criptazione',
'settings_encryptionKey_desc' => 'La chiave viene usata per creare un identificatore unico da aggiungere come campo nascosto ad un formulario per protezione da attacchi CSRF.',
'settings_error' => 'Errore',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Espandi l\'albero delle cartelle',
'settings_expandFolderTree_desc' => 'Espandi la struttura ad albero delle cartelle',
'settings_expandFolderTree_val0' => 'Inizia con l\'albero nascosto',
@@ -1850,6 +1867,8 @@ Name: [username]
'settings_logFileEnable_desc' => 'Abilita/disabilita il file di registro',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Rotazione del file di registro',
'settings_logFileRotation_desc' => 'Abilita/disabilita la rotazione del file di registro',
'settings_loginFailure' => 'Login fallito',
@@ -2047,6 +2066,7 @@ Name: [username]
'sign_out' => 'Disconnettiti',
'sign_out_user' => 'Disconnetti l\'utente',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovacco',
'sort_by_date' => 'Ordina per data',
'sort_by_expiration_date' => '',
@@ -2176,6 +2196,7 @@ Name: [username]
'status_revision_sleeping' => 'in attesa',
'status_revisor_removed' => 'Revisore rimosso dalla lista',
'status_unknown' => 'Sconosciuto',
+'storage' => '',
'storage_size' => 'Spazio di archiviazione',
'subfolder_duplicate_name' => 'Nome sottocartella duplicato',
'submit_2_fact_auth' => 'Salva segreto',
diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc
index 70c7d978e..3342d2fed 100644
--- a/languages/ko_KR/lang.inc
+++ b/languages/ko_KR/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '이중 인증',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -566,6 +567,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -696,6 +699,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => '',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => '',
@@ -1150,6 +1155,7 @@ URL [url]',
'no_groups' => '그룹이 없음',
'no_group_members' => '그룹 회원 이 없습니다.',
'no_linked_files' => '연결되지 않은 파일',
+'no_mimetype' => '',
'no_previous_versions' => '다른 버전을 찾을 수 없습니다',
'no_receipt_needed' => '접수가 필요하지 않습니다',
'no_review_needed' => '검토중인 자료가 없습니다.',
@@ -1295,7 +1301,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename] : [name] - 문서 버전에서 제거 된 워크플로우',
'removeFolderFromDropFolder' => '',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => '마크 파일을 제거',
'remove_review_log' => '',
'remove_task' => '',
@@ -1494,6 +1502,7 @@ URL : [url]',
'select_category' => '범주를 선택합니다',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => '',
'select_groups' => '그룹을 선택합니다',
'select_grp_approvers' => '그룹 승인을 선택합니다',
@@ -1541,7 +1550,9 @@ URL : [url]',
'service_name' => '',
'sessions' => '',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => '설정',
'settings_activate_module' => '모듈 활성화',
'settings_activate_php_extension' => 'PHP 확장 활성화',
@@ -1639,6 +1650,8 @@ URL : [url]',
'settings_delete_install_folder' => 'SeedDMS을 사용하려면 구성 디렉토리의 파일 ENABLE_INSTALL_TOOL을 삭제해야합니다',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => '자체 수정 불가',
'settings_disableSelfEdit_desc' => '확인시 사용자가 자신의 프로필을 편집 할 수 없음',
'settings_disable_install' => 'ENABLE_INSTALL_TOOL 삭제',
@@ -1704,6 +1717,8 @@ URL : [url]',
'settings_enableLargeFileUpload_desc' => '설정하면, 브라우저가 설정 한 파일 크기 제한없이 jumploader라는 파일 업로드 자바 애플릿을 통해 사용할 수 있습니다. 또한 한 번에 여러 파일을 업로드 할 수 있습니다.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => '메뉴의 작업 목록 허용',
'settings_enableMenuTasks_desc' => '사용자의 모든 작업이 포함되어있는 메뉴 항목을 활성/비활성 합니다. 이것은 검토, 승인등이 필요한 문서를 포함 합니다',
'settings_enableMenuTransmittals' => '',
@@ -1763,6 +1778,8 @@ URL : [url]',
'settings_encryptionKey' => '암호화 키',
'settings_encryptionKey_desc' => '이 문자열은 CSRF 공격을 방지하기 위해 formular에 숨겨진 필드로 추가되는 고유 식별자를 만드는 데 사용된다.',
'settings_error' => '오류',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => '폴더 트리 확장',
'settings_expandFolderTree_desc' => '폴더 트리 확장',
'settings_expandFolderTree_val0' => '숨겨진 Tree로 시작',
@@ -1821,6 +1838,8 @@ URL : [url]',
'settings_logFileEnable_desc' => '로그 파일 활성 / 비활성화',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => '로그 파일 회전',
'settings_logFileRotation_desc' => '로그 파일 회전',
'settings_loginFailure' => '로그인 실패',
@@ -2018,6 +2037,7 @@ URL : [url]',
'sign_out' => '로그 아웃',
'sign_out_user' => '사용자가 로그 아웃',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => '슬로바키아어',
'sort_by_date' => '',
'sort_by_expiration_date' => '',
@@ -2147,6 +2167,7 @@ URL : [url]',
'status_revision_sleeping' => '보류',
'status_revisor_removed' => '감사자 목록에서 제거',
'status_unknown' => '알 수없는',
+'storage' => '',
'storage_size' => '저장 크기',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc
index 2709a4f36..1b1ed5d16 100644
--- a/languages/lo_LA/lang.inc
+++ b/languages/lo_LA/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'ການກວດສອບແບບ 2 ປັດໃຈ',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'ລະບົບນີ້ໄຊ້ການກວດສອບແບບ 02 ປັດໃຈ. ເຈົ້າຈະຕ້ອງມີ Google Authenticator ໃນໂທລະສັບມືຖືຂອງທ່ານ. ດ້ານລຸ່ມແມ່ນມີ QR Codes ສອງແບບ ທາງດ້ານຂວາຈະມີຄວາມເປັນສ່ວນຕົວຂອງເຈົ້າ, ສ່ວນດ້ານຊ້າຍຂອງເຈົ້າແມ່ນຈະສາມາດຕັ້ງຄ່າຄວາມເປັນສ່ວນຕົວໄຫມ່. ຖ້າເຈົ້າຕັ້ງຄ່າຄວາມເປັນສ່ວນຕົວໄຫມ່ຮຽບຮ້ອຍ ແລ້ວນັ້ນໃຫ້ແນ່ໃຈວ່າໄດ້ສະແກນອີກຄັ້ງດ້ວຍ Google Authenticator',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -563,6 +564,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -693,6 +696,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => '',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => '',
@@ -1147,6 +1152,7 @@ URL: [url]',
'no_groups' => 'ບໍ່ມີກຸ່ມ',
'no_group_members' => 'ກຸ່ມນີ້ຍັງບໍ່ມີສະມາຊິກ',
'no_linked_files' => 'ບໍ່ມີໄຟລທີ່ເຊື່ອມໂຍງ',
+'no_mimetype' => '',
'no_previous_versions' => 'ບໍ່ພົບເວີຊັນອື່ນ',
'no_receipt_needed' => 'ປະຈຸບັນນີ້ບໍ່ມີເອກະສານທີ່ຈະຕ້ອງຢືນຢັນກ່ຽວກັບການຮັບສິນຄ້າ',
'no_review_needed' => 'ບໍ່ມີເອກະສານທີຍັງຄ້າງທີລໍຖ້າກວດຄືນ',
@@ -1311,7 +1317,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]:[name] - ຍ້າຍການເຮັດວຽກ (ເວີກໂຟລ) ອອກຈາກເວີຊັ້ນຂອງເອກະສານ',
'removeFolderFromDropFolder' => 'ຍ້າຍໂຟລເດີຫຼັງຈາກນຳຂໍ້ມູນເຂົ້າ',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'ລົບໄຟລທີມີເຄື່ອງໝາຍໄວ້',
'remove_review_log' => '',
'remove_task' => '',
@@ -1515,6 +1523,7 @@ URL: [url]',
'select_category' => 'ຄິກເພື່ອເລືອກປະເພດ',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => '',
'select_groups' => 'ຄິກເລືອກກຸ່ມ',
'select_grp_approvers' => 'ຄິກເພືອເລືອກຜູ້ອະນຸມັດກຸ່ມ',
@@ -1567,7 +1576,9 @@ URL: [url]',
'service_name' => '',
'sessions' => 'ຜູ້ໄຊ້ອອນລາຍ',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'ການຕັ້ງຄ່າ',
'settings_activate_module' => 'ເປີດໄຊ້ງານໂມດູນ',
'settings_activate_php_extension' => 'ຂະຫຍາຍພື້ນທີການໄຊ້ງານຂອງ PHP',
@@ -1665,6 +1676,8 @@ URL: [url]',
'settings_delete_install_folder' => 'ໃນການໄຊ້ SeedDMS, ເຈົ້າຈະຕ້ອງລົບໄຟລ ເປີດໄຊ້ງານ_ຕິດຕັ້ງ_ເຄື່ອງມືໃນການບໍລິຫານ ການກຳນົດຄ່າ',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'ແກ້ໄຂການປິດໄຊ້ງານດ້ວຍຕົວເອງ',
'settings_disableSelfEdit_desc' => 'ກວດຄືນເບິ່ງວ່າຍ້ອນຫຍັງຜູ້ນຳໄຊ້ຈື່ງບໍ່ສາມາດແກ້ໄຂໂປລໄຟລຂອງພວກເຂົາໄດ້',
'settings_disable_install' => 'ຖ້າເປັນໄປໄດ້ ລົບໄຟລເປີດໄຊ້ງານ-ຕິດຕັ້ງ-ເຄື່ອງມື ຖ້າເປັນໄປໄດ້',
@@ -1730,6 +1743,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => 'ການຕັ້ງຄ່າອັບໂຫລດໄຟລຈະມີໃຫ້ບໍລິການຜ່ານທາງດ້ານຂວາຂອງເອັບເຟັກທີ່ເອີ້ນວ່າ jumploader ໂດຍບໍ່ມີຂິດຈຳກັດຂອງຂະໜາດໄຟລທີກຳນົດໂດຍບາວເຊີ ນອກຈາກນີຍັງຊ່ວຍໃນການອັບໂຫລດໄຟລຫຼາຍໄຟລໃນຂັນຕອນດຽວການເປີດຄຸນລັກສະນະນີ້ຈະປິດຄຸກກີ້ສະເພາະ Http ເທົ່ານັ້ນ',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'ເປີດການໄຊ້ງານ',
'settings_enableMenuTasks_desc' => 'ເປີດ/ປິດ ລາຍການເມນູທີ່ມີວຽກທັງໝົດສຳລັບຜູ້ໄຊ້ເອກະສານນີ້ມີເອກະສານທີຈ້ອງໄດ້ຮັບການກວດສອບ',
'settings_enableMenuTransmittals' => '',
@@ -1789,6 +1804,8 @@ URL: [url]',
'settings_encryptionKey' => 'ກະແຈການເຂົ້າລະຫັດລັບ',
'settings_encryptionKey_desc' => 'ສະຕິງນີ້ໄຊ້ສຳຫຼັບສ້າງຕົວ',
'settings_error' => 'ຄວາມຜິດພາດ',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'ຂະຫຍານທີໂຟລເດີ',
'settings_expandFolderTree_desc' => 'ຂະຫຍານທີໂຟລເດີ',
'settings_expandFolderTree_val0' => 'ການເລີ່ມຕົ້ນດ້ວຍສາຂາຍ່ອຍ',
@@ -1847,6 +1864,8 @@ URL: [url]',
'settings_logFileEnable_desc' => 'ເປີດ/ປິດ ໃຊ້ວຽກໄຟລບັນທຶກ',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'ການໝຸນແຟ້ມບັນທືກ',
'settings_logFileRotation_desc' => 'ການໝຸນແຟ້ມບັນທືກ',
'settings_loginFailure' => 'ຄວາມລົ້ມເຫຼວໃນການເຂົາເຖີງ',
@@ -2044,6 +2063,7 @@ URL: [url]',
'sign_out' => 'ອອກຈາກລະບົບ',
'sign_out_user' => 'ອອກຈາກລະບົບຜູ້ໄຊ້',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'ສະໂລວາເກຍ',
'sort_by_date' => '',
'sort_by_expiration_date' => '',
@@ -2173,6 +2193,7 @@ URL: [url]',
'status_revision_sleeping' => 'ຢູ່ລະຫວ່າງດຳເນີນການ',
'status_revisor_removed' => 'ແກ້ໄຂຄຳອະທິບາຍອອກຈາກລາຍການ',
'status_unknown' => 'ບໍ່ຮູ້',
+'storage' => '',
'storage_size' => 'ຂະໜາດພື້ນທີ່ເກັບຂໍ້ມູນ',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => 'ເກັບຄວາມລັບໄວ້',
diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc
index f6a3f27c6..8af9fcf26 100644
--- a/languages/nb_NO/lang.inc
+++ b/languages/nb_NO/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '2-trinns autentisering',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'Dette systemet håndhever 2-faktor autentisering. Du trenger Google Authenticator på mobiltelefonen din. Nedenfor ser du to QR-koder. Den rette er din nåværende hemmelighet. På venstre side kan du angi en ny hemmelighet. Hvis du angir en ny hemmelighet, må du huske å skanne den på nytt med Google Authenticator.',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -577,6 +578,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -707,6 +710,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => 'Utvidelse',
'extension_changelog' => 'Endringslogg',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Laster inn utvidelser ...',
@@ -1168,6 +1173,7 @@ URL: [url]',
'no_groups' => 'Ingen grupper',
'no_group_members' => 'Denne gruppen har ingen medlemmer',
'no_linked_files' => 'Ingen koblede filer',
+'no_mimetype' => '',
'no_previous_versions' => 'Ingen andre versjoner funnet',
'no_receipt_needed' => 'Det er for øyeblikket ingen dokumenter som krever kvitteringsbekreftelse.',
'no_review_needed' => 'Ingen gjennomgang i påvente.',
@@ -1326,7 +1332,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Fjernet arbeidsflyt fra dokumentversjonen',
'removeFolderFromDropFolder' => 'Fjern mappe etter import',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Fjern markerte filer',
'remove_review_log' => '',
'remove_task' => '',
@@ -1530,6 +1538,7 @@ URL: [url]',
'select_category' => 'Klikk for å velge kategori',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Klikk for å velge gruppe',
'select_groups' => 'Klikk for å velge grupper',
'select_grp_approvers' => 'Klikk for å velge gruppe godkjennere',
@@ -1580,7 +1589,9 @@ Bruker: [username]
'service_name' => '',
'sessions' => 'Brukere innlogget',
'setDateFromFile' => 'Overta dato fra importert fil',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'Overta dato fra importert mappe',
+'setDateFromFolder_desc' => '',
'settings' => 'Innstillinger',
'settings_activate_module' => 'Aktiver modul',
'settings_activate_php_extension' => 'Aktiver PHP-utvidelse',
@@ -1678,6 +1689,8 @@ Bruker: [username]
'settings_delete_install_folder' => 'For å bruke SeedDMS, må du slette filen ENABLE_INSTALL_TOOL i konfigurasjonsmappen',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Deaktiver selvredigering',
'settings_disableSelfEdit_desc' => 'Hvis merket kan brukeren ikke redigere sin egen profil',
'settings_disable_install' => 'Slett filen ENABLE_INSTALL_TOOL hvis mulig',
@@ -1743,6 +1756,8 @@ Bruker: [username]
'settings_enableLargeFileUpload_desc' => 'Hvis det er satt, er filopplasting også tilgjengelig via en java-applet som heter jumploader uten en filstørrelsesgrense som er angitt av nettleseren. Det gjør det også mulig å laste opp flere filer på ett trinn. Hvis du slår på dette, slås bare av cookies.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Aktiver oppgaveliste i menyen',
'settings_enableMenuTasks_desc' => 'Aktiver/deaktiver menypunktet som inneholder alle oppgaver for brukeren. Denne inneholder dokumenter som må gjennomgås, godkjennes osv.',
'settings_enableMenuTransmittals' => '',
@@ -1802,6 +1817,8 @@ Bruker: [username]
'settings_encryptionKey' => 'Krypteringsnøkkel',
'settings_encryptionKey_desc' => 'Denne strengen brukes til å lage en unik identifikator som blir lagt til som et skjult felt til et skjema for å forhindre CSRF-angrep.',
'settings_error' => 'Feil',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Utvid mappetreet',
'settings_expandFolderTree_desc' => 'Utvid mappetreet',
'settings_expandFolderTree_val0' => 'starte med treet gjemt',
@@ -1860,6 +1877,8 @@ Bruker: [username]
'settings_logFileEnable_desc' => 'Aktiver/deaktiver loggfil',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Loggfil rotasjon',
'settings_logFileRotation_desc' => 'Loggfil rotasjon',
'settings_loginFailure' => 'Påloggingsfeil',
@@ -2057,6 +2076,7 @@ Bruker: [username]
'sign_out' => 'Logg ut',
'sign_out_user' => 'Logg ut bruker',
'site_brand' => 'Nettsted merke/logo',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovakisk',
'sort_by_date' => 'Sorter etter dato',
'sort_by_expiration_date' => '',
@@ -2186,6 +2206,7 @@ Bruker: [username]
'status_revision_sleeping' => 'avventer',
'status_revisor_removed' => 'Revisor fjernet fra listen',
'status_unknown' => 'Ukjent',
+'storage' => '',
'storage_size' => 'Lagrings størrelse',
'subfolder_duplicate_name' => 'Dupliser navnet på undermappen',
'submit_2_fact_auth' => 'Lagre hemmelighet',
diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc
index bc880cf9c..a927056cf 100644
--- a/languages/nl_NL/lang.inc
+++ b/languages/nl_NL/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '2-factor-authenticatie',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'Dit systeem werkt met 2-factor-authenticatie. U heeft de Google Authenticator nodig op uw mobiele telfoon. Hieronder staan 2 QR-codes. De rechter is uw huidige geheime code. Met de linker kunt u een nieuwe geheime code instellen. Denk erom de nieuwe code opnieuw te scannen met Googke Authenticator.',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -570,6 +571,8 @@ URL: [url]',
'download_header_document_name' => 'Naam document',
'download_header_document_no' => 'Document nr.',
'download_header_filename' => 'Filenaam',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => 'Interne versie',
'download_header_reviewer' => 'Beoordelaar',
'download_header_review_comment' => 'Commentaar bij beoordeling',
@@ -700,6 +703,8 @@ URL: [url]',
'export_user_list_csv' => 'Exporteer gebruikers in csv-formaat',
'extension_archive' => 'Extensies',
'extension_changelog' => 'Overzicht van wijzigingen',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => 'Extensie uitgeschakeld',
'extension_is_on_now' => 'Extensie ingeschakeld',
'extension_loading' => 'Laden van extensies ...',
@@ -1160,6 +1165,7 @@ URL: [url]',
'no_groups' => 'Geen groepen',
'no_group_members' => 'Deze groep heeft geen leden',
'no_linked_files' => 'Geen gekoppelde bestanden',
+'no_mimetype' => '',
'no_previous_versions' => 'Geen andere versie(s) gevonden',
'no_receipt_needed' => 'Geen ontvangstbericht nodig',
'no_review_needed' => 'Geen review bezig.',
@@ -1324,7 +1330,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Workflow verwijderd van document versie',
'removeFolderFromDropFolder' => 'Map verwijderen uit Dropfilder',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Geselecteerde bestanden worden verwijderd',
'remove_review_log' => '',
'remove_task' => '',
@@ -1527,6 +1535,7 @@ URL: [url]',
'select_category' => 'klik om categorie te selecteren',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Selecteer groep',
'select_groups' => 'Klik om groep te selecteren',
'select_grp_approvers' => 'Klik om beoordelaars te selecteren',
@@ -1579,7 +1588,9 @@ Name: [username]
'service_name' => '',
'sessions' => 'sessies',
'setDateFromFile' => 'Gebruik de datum van de geïmporteerde file',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'Gebruik de datum van de geïmporteerde map',
+'setDateFromFolder_desc' => '',
'settings' => 'Instellingen',
'settings_activate_module' => 'Activeer module',
'settings_activate_php_extension' => 'Activeer PHP uitbreiding',
@@ -1677,6 +1688,8 @@ Name: [username]
'settings_delete_install_folder' => 'Om SeedDMS te kunnen gebruiken moet het bestand ENABLE_INSTALL_TOOL uit de configuratiemap verwijderd worden.',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Uitschakelen Eigenprofiel wijzigen',
'settings_disableSelfEdit_desc' => 'Indien aangevinkt kan de gebruiker zijn eigen profiel niet wijzigen.',
'settings_disable_install' => 'Verwijder het bestand ENABLE_INSTALL_TOOL indien mogelijk',
@@ -1742,6 +1755,8 @@ Name: [username]
'settings_enableLargeFileUpload_desc' => 'Indien ingeschakeld, is bestandsupload ook beschikbaar via een java applet jumploader genaamd zonder een bestandsgrootte limiet door de browser. Het staat ook toe om meerdere bestanden in een keer te versturen.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Menu-taken aanzetten',
'settings_enableMenuTasks_desc' => 'Menu-taken aanzetten',
'settings_enableMenuTransmittals' => '',
@@ -1801,6 +1816,8 @@ Name: [username]
'settings_encryptionKey' => 'Sleutel voor encryptie',
'settings_encryptionKey_desc' => 'Deze string wordt gebruikt om een unieke identificatie als onzichtbaar veld aan een formulier toe te voegen om CSRF aanvallen tegen te gaan.',
'settings_error' => 'Fout',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Uitvouwen mappenstructuur',
'settings_expandFolderTree_desc' => 'Uitvouwen mappenstructuur',
'settings_expandFolderTree_val0' => 'begin met verborgen structuur',
@@ -1859,6 +1876,8 @@ Name: [username]
'settings_logFileEnable_desc' => 'Inschakelen/uitschakelen logbestand',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Rotering Logbestand',
'settings_logFileRotation_desc' => 'Rotering Logbestand',
'settings_loginFailure' => 'Login-fout',
@@ -2056,6 +2075,7 @@ Name: [username]
'sign_out' => 'Log uit',
'sign_out_user' => 'Log gebruiker uit',
'site_brand' => 'Merk van de site',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slowaaks',
'sort_by_date' => 'Sorteren op datum',
'sort_by_expiration_date' => 'Sorteren op vervaldatum',
@@ -2185,6 +2205,7 @@ Name: [username]
'status_revision_sleeping' => 'Slapend',
'status_revisor_removed' => 'Verwijderd',
'status_unknown' => 'Onbekend',
+'storage' => '',
'storage_size' => 'Omvang opslag',
'subfolder_duplicate_name' => 'Dubble mapnaam',
'submit_2_fact_auth' => '2-factor-authentificatie verstuurd',
diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc
index 4678dcf5b..90bb29747 100644
--- a/languages/pl_PL/lang.inc
+++ b/languages/pl_PL/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'Uwierzytelnianie dwuetapowe',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'Uwierzytelnianie dwuetapowe',
'2_fact_auth_current_secret' => 'Obecny poufny kod',
'2_fact_auth_new_secret' => 'Nowy poufny kod',
@@ -553,6 +554,8 @@ URL: [url]',
'download_header_document_name' => 'Nazwa dokumentu',
'download_header_document_no' => 'Numer dokumentu',
'download_header_filename' => 'Nazwa pliku',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => 'Wersja wewnętrzna',
'download_header_reviewer' => 'Recenzent',
'download_header_review_comment' => 'Komentarz recezenta',
@@ -683,6 +686,8 @@ URL: [url]',
'export_user_list_csv' => 'Eksportuj użytkowników do pliku CSV',
'extension_archive' => 'Rozszerzenie',
'extension_changelog' => 'Log Zmian',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Wgrywam dodatki...',
@@ -1137,6 +1142,7 @@ URL: [url]',
'no_groups' => 'Brak grup',
'no_group_members' => 'Ta grupa nie ma członków',
'no_linked_files' => 'Brak powiązanych dokumentów',
+'no_mimetype' => '',
'no_previous_versions' => 'Nie znaleziono poprzednich wersji',
'no_receipt_needed' => 'Brak dokumentów w trakcie potwierdzenia',
'no_review_needed' => 'Brak dokumentów w trakcie opiniowania',
@@ -1290,7 +1296,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Usunięty przepływ dokumentu z wersji dokumentu',
'removeFolderFromDropFolder' => 'Usuń folder po imporcie',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Usuń zaznaczone pliki',
'remove_review_log' => '',
'remove_task' => '',
@@ -1458,6 +1466,7 @@ URL: [url]',
'select_category' => 'Kliknij by wybrać kategorię',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Wybierz grupę',
'select_groups' => 'Kliknij by wybrać grupy',
'select_grp_approvers' => 'Kliknij by wybrać grupę zatwierdzającą',
@@ -1510,7 +1519,9 @@ Name: [username]
'service_name' => '',
'sessions' => 'Sesja',
'setDateFromFile' => 'Przejmij datę z importowanego pliku',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'Przejmij datę z importowanego folderu',
+'setDateFromFolder_desc' => '',
'settings' => 'Ustawienia',
'settings_activate_module' => 'Aktywuj moduł',
'settings_activate_php_extension' => 'Aktywuj rozszerzenie PHP',
@@ -1608,6 +1619,8 @@ Name: [username]
'settings_delete_install_folder' => 'Aby móc używać SeedDMS, musisz usunąć plik ENABLE_INSTALL_TOOL znajdujący się w katalogu konfiguracyjnym',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'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',
@@ -1673,6 +1686,8 @@ Name: [username]
'settings_enableLargeFileUpload_desc' => 'Jeśli zaznaczone, wczytywanie plików będzie możliwe również przez aplet javy bez limitu rozmiaru plików. Aplet pozwala również na wczytywanie wielu plików jednocześnie.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'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, itd.',
'settings_enableMenuTransmittals' => '',
@@ -1732,6 +1747,8 @@ Name: [username]
'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',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Rozwiń drzewo katalogów',
'settings_expandFolderTree_desc' => 'Rozwiń drzewo katalogów',
'settings_expandFolderTree_val0' => 'Rozpocznij z ukrytym drzewem',
@@ -1790,6 +1807,8 @@ Name: [username]
'settings_logFileEnable_desc' => 'Włącz/Wyłącz plik dziennika',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Rotowanie pliku dziennika',
'settings_logFileRotation_desc' => 'Rotowanie pliku dziennika',
'settings_loginFailure' => 'Błędy logowania',
@@ -1987,6 +2006,7 @@ Name: [username]
'sign_out' => 'Wyloguj',
'sign_out_user' => 'Wyloguj użytkownika',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'słowacki',
'sort_by_date' => 'Sortuj według daty',
'sort_by_expiration_date' => 'Sortuj według daty ważności',
@@ -2116,6 +2136,7 @@ Name: [username]
'status_revision_sleeping' => 'Oczekujące',
'status_revisor_removed' => 'Revisor usunięty z listy',
'status_unknown' => 'Nieznany',
+'storage' => '',
'storage_size' => 'Zajętość dysku',
'subfolder_duplicate_name' => 'Zduplikowana nazwa podfolderu',
'submit_2_fact_auth' => 'Zapisz sekretne hasło',
diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc
index 6a3990787..4dcf36d27 100644
--- a/languages/pt_BR/lang.inc
+++ b/languages/pt_BR/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'Autenticação de dois fatores',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'Este sistema impõe a autenticação de 2 fatores. Você precisará do Google Authenticator no seu celular. Abaixo você vê dois códigos QR. O caminho certo é o seu atual segredo. À esquerda, você pode definir um novo segredo. Se você definir um novo segredo, verifique novamente com o Google Authenticator.',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -577,6 +578,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -707,6 +710,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => 'Extensão',
'extension_changelog' => 'Alterações no Log',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Carregando Extensões',
@@ -1167,6 +1172,7 @@ URL: [url]',
'no_groups' => 'Sem grupos',
'no_group_members' => 'Este grupo não tem membros',
'no_linked_files' => 'Não há arquivos vinculados',
+'no_mimetype' => '',
'no_previous_versions' => 'Nenhuma outra versão encontrada',
'no_receipt_needed' => 'Atualmente, não há documentos que exijam uma confirmação de recebimento.',
'no_review_needed' => 'Nenhuma revisão pendente.',
@@ -1331,7 +1337,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Fluxo de trabalho removido da versão do documento',
'removeFolderFromDropFolder' => 'Remover pasta após a importação',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Remover arquivos marcados',
'remove_review_log' => '',
'remove_task' => '',
@@ -1534,6 +1542,7 @@ URL: [url]',
'select_category' => 'Clique para selecionar a categoria',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Selecione o grupo',
'select_groups' => 'Clique para selecionar os grupos',
'select_grp_approvers' => 'Clique para selecionar o grupo aprovador',
@@ -1586,7 +1595,9 @@ Nome: [username]
'service_name' => '',
'sessions' => 'Online',
'setDateFromFile' => 'Assumir a data do arquivo importado',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'Assumir a data da pasta importada',
+'setDateFromFolder_desc' => '',
'settings' => 'Configurações',
'settings_activate_module' => 'Ativar módulo',
'settings_activate_php_extension' => 'Ativar extensão PHP',
@@ -1684,6 +1695,8 @@ Nome: [username]
'settings_delete_install_folder' => 'Para utilizar Sistema GED, você deve excluir o arquivo ENABLE_INSTALL_TOOL do diretório de configuração',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Desativar Auto Editar',
'settings_disableSelfEdit_desc' => 'Se selecionado o usuário não poderá editar seu próprio perfil',
'settings_disable_install' => 'Elimine o arquivo ENABLE_INSTALL_TOOL se possível',
@@ -1749,6 +1762,8 @@ Nome: [username]
'settings_enableLargeFileUpload_desc' => 'Se selecionado, o upload de arquivo também estará disponível através de um applet java chamado jumploader sem limite de tamanho de arquivo definido pelo navegador. Ele também permite fazer o upload de vários arquivos de uma só vez.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Ativar lista de tarefas no menu',
'settings_enableMenuTasks_desc' => 'Ativar / desativar o item de menu que contém todas as tarefas do usuário. Contém documentos que precisam ser revisados, aprovados etc.',
'settings_enableMenuTransmittals' => '',
@@ -1808,6 +1823,8 @@ Nome: [username]
'settings_encryptionKey' => 'Chave de criptografia',
'settings_encryptionKey_desc' => 'Esta cadeia é usada para a criação de um identificador único a ser adicionado como um campo oculto para formular, a fim de evitar ataques CSRF.',
'settings_error' => 'Erro',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Expandir a árvore de pastas',
'settings_expandFolderTree_desc' => 'Expanda a Árvore de Pastas',
'settings_expandFolderTree_val0' => 'começar com a árvore escondida',
@@ -1866,6 +1883,8 @@ Nome: [username]
'settings_logFileEnable_desc' => 'Ativar/Dasativar arquivo log',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Rotação do Arquivo Log',
'settings_logFileRotation_desc' => 'A rotação de arquivo de log',
'settings_loginFailure' => 'Falha de login',
@@ -2063,6 +2082,7 @@ Nome: [username]
'sign_out' => 'Sair',
'sign_out_user' => 'Sair usuário',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Eslovaco',
'sort_by_date' => 'classificar por data',
'sort_by_expiration_date' => '',
@@ -2192,6 +2212,7 @@ Nome: [username]
'status_revision_sleeping' => 'Pendente',
'status_revisor_removed' => 'Revisor removido da lista',
'status_unknown' => 'Desconhecido',
+'storage' => '',
'storage_size' => 'Tamanho de armazenamento',
'subfolder_duplicate_name' => 'nome duplicado da subpasta',
'submit_2_fact_auth' => 'Salvar senha',
diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc
index 5bbb8bb58..2e34965ce 100644
--- a/languages/ro_RO/lang.inc
+++ b/languages/ro_RO/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -565,6 +566,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -695,6 +698,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => '',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Se incarca extensiile',
@@ -1149,6 +1154,7 @@ URL: [url]',
'no_groups' => 'Nu există grupe',
'no_group_members' => 'Acest grup nu are membri',
'no_linked_files' => 'Nici un fișiere asociate',
+'no_mimetype' => '',
'no_previous_versions' => 'Nu sunt alte versiuni gasite',
'no_receipt_needed' => '',
'no_review_needed' => 'Nici o revizuire în așteptare.',
@@ -1302,7 +1308,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Workflow eliminat din versiunea documentului',
'removeFolderFromDropFolder' => '',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Eliminați fișierele marcate',
'remove_review_log' => '',
'remove_task' => '',
@@ -1501,6 +1509,7 @@ URL: [url]',
'select_category' => 'Click pentru a selecta categoria',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Selecteaza grupul',
'select_groups' => 'Click pentru a selecta grupuri',
'select_grp_approvers' => 'Click pentru a selecta grupul de aprobatori',
@@ -1548,7 +1557,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Setări',
'settings_activate_module' => 'Activați modulul',
'settings_activate_php_extension' => 'Activați extensia PHP',
@@ -1646,6 +1657,8 @@ URL: [url]',
'settings_delete_install_folder' => 'Pentru a utiliza SeedDMS, trebuie să ștergeți fișierul ENABLE_INSTALL_TOOL din directorul de configurare',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Dezactivați Auto Editarea',
'settings_disableSelfEdit_desc' => 'Dacă este bifată, utilizatorul nu va putea să-și editeze profilul',
'settings_disable_install' => 'Ștergeți fișierul ENABLE_INSTALL_TOOL dacă este posibil',
@@ -1711,6 +1724,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => 'Dacă este setat, incărcarea este de asemenea disponibilă prin intermediul unui applet Java numit jumploader fără limită de dimensiune a fișierului stabilită de browser. De asemenea, permite încărcarea mai multor fișiere într-un singur pas. Activand aceasta optiune va dezactiva optiunea http only cookies.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => '',
'settings_enableMenuTasks_desc' => '',
'settings_enableMenuTransmittals' => '',
@@ -1770,6 +1785,8 @@ URL: [url]',
'settings_encryptionKey' => 'Cheia de criptare',
'settings_encryptionKey_desc' => 'Acest șir este utilizat pentru crearea unui identificator unic ce este adăugat ca un câmp ascuns pentru un formular, cu scopul de a preveni atacurile CSRF.',
'settings_error' => 'Eroare',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Expandați ierarhia Folderului',
'settings_expandFolderTree_desc' => 'Expandați ierarhia Folderului',
'settings_expandFolderTree_val0' => 'începeți cu ierarhia ascunsă',
@@ -1828,6 +1845,8 @@ URL: [url]',
'settings_logFileEnable_desc' => 'Activare/dezactivare log fișier',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Rotire Log fișiser',
'settings_logFileRotation_desc' => 'Rotirea Log-ului fișierului',
'settings_loginFailure' => 'Eșec Autentificare',
@@ -2025,6 +2044,7 @@ URL: [url]',
'sign_out' => 'Sign out',
'sign_out_user' => 'Sign out utilizator',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovacă',
'sort_by_date' => 'Sortare dupa data',
'sort_by_expiration_date' => '',
@@ -2154,6 +2174,7 @@ URL: [url]',
'status_revision_sleeping' => 'in asteptare',
'status_revisor_removed' => 'Revizuitor eliminat din lista',
'status_unknown' => 'Necunoscut',
+'storage' => '',
'storage_size' => 'Dimensiunea de stocare',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc
index b930cc732..d4e71bb93 100644
--- a/languages/ru_RU/lang.inc
+++ b/languages/ru_RU/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'Двухфакторная аутентификация',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'Использовать усиленную проверку подлинности',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -565,6 +566,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -695,6 +698,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => 'Журнал изменений',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Загрузка расширений',
@@ -1148,6 +1153,7 @@ URL: [url]',
'no_groups' => 'Нет групп',
'no_group_members' => 'Группа не имеет членов',
'no_linked_files' => 'Нет связанных документов',
+'no_mimetype' => '',
'no_previous_versions' => 'Нет предыдущих версий',
'no_receipt_needed' => 'Нет документов, нуждающихся в подтверждении получения',
'no_review_needed' => 'Рецензия не требуется',
@@ -1304,7 +1310,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: удалён процесс из версии документа «[name]»',
'removeFolderFromDropFolder' => '',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Удалить выбранные файлы',
'remove_review_log' => '',
'remove_task' => '',
@@ -1508,6 +1516,7 @@ URL: [url]',
'select_category' => 'Выберите категорию',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Выберите группу',
'select_groups' => 'Выберите группы',
'select_grp_approvers' => 'Выберите утверждающую группу',
@@ -1555,7 +1564,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Настройки',
'settings_activate_module' => 'Активировать модуль',
'settings_activate_php_extension' => 'Активировать расширение PHP',
@@ -1653,6 +1664,8 @@ URL: [url]',
'settings_delete_install_folder' => 'Удалите ENABLE_INSTALL_TOOL в каталоге конфигурации, для того что бы начать использовать систему',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Отключить собственное редактирование',
'settings_disableSelfEdit_desc' => 'Если включено, пользователи не смогут изменять информацию о себе.',
'settings_disable_install' => 'Удалить ENABLE_INSTALL_TOOL, если возможно',
@@ -1718,6 +1731,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => 'Если включено, загрузка файлов доступна так же через Java-апплет, называемый jumploader, без ограничения размера файла. Это также позволит загружать несколько файлов за раз.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Включить список задач в меню',
'settings_enableMenuTasks_desc' => 'Включить/отключить пункт меню, который содержит все задачи пользователя. Там содержатся документы, которые нуждаются в рецензии, утверждении и т.д.',
'settings_enableMenuTransmittals' => '',
@@ -1777,6 +1792,8 @@ URL: [url]',
'settings_encryptionKey' => 'Ключ шифрования',
'settings_encryptionKey_desc' => 'Строка используется для создания уникального идентификатора, добавляемого как скрытые поля к формулярам, для предотвращения CSRF-атак.',
'settings_error' => 'Ошибка',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Разворачивать дерево каталогов',
'settings_expandFolderTree_desc' => 'Разворачивать дерево каталогов.',
'settings_expandFolderTree_val0' => 'Начинать со свёрнутого дерева',
@@ -1835,6 +1852,8 @@ URL: [url]',
'settings_logFileEnable_desc' => 'Включить/отключить журнал.',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Ротация журнала',
'settings_logFileRotation_desc' => 'Ротация файла журнала.',
'settings_loginFailure' => 'Не удалось войти',
@@ -2032,6 +2051,7 @@ URL: [url]',
'sign_out' => 'Выйти',
'sign_out_user' => 'Пользовательский выход',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovak',
'sort_by_date' => 'Сортировка по дате',
'sort_by_expiration_date' => '',
@@ -2161,6 +2181,7 @@ URL: [url]',
'status_revision_sleeping' => 'В ожидании рецензии',
'status_revisor_removed' => 'Ревизор удален из списка',
'status_unknown' => 'Неизвестный',
+'storage' => '',
'storage_size' => 'Размер хранилища',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc
index abb9b9bc6..005bef052 100644
--- a/languages/sk_SK/lang.inc
+++ b/languages/sk_SK/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '2-faktorové overovanie',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'This system enforces 2 factor authentication. You will need the Google Authenticator on your mobile phone. Below you see two QR codes. The right one is your current secret. On the left you can set a new secret. If you set a new secret make sure to rescan it with Google Authenticator.',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -577,6 +578,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -707,6 +710,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => 'Rozšírenie',
'extension_changelog' => 'Denník zmien',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Nahrávajú sa rozšírenia ...',
@@ -1168,6 +1173,7 @@ URL: [url]',
'no_groups' => 'Žiadne skupiny',
'no_group_members' => 'Táto skupina nemá žiadnych členov',
'no_linked_files' => 'No linked files',
+'no_mimetype' => '',
'no_previous_versions' => 'Neboli nájdené žiadne iné verzie',
'no_receipt_needed' => 'There are currently no documents requiring a receipt confirmation.',
'no_review_needed' => 'No review pending.',
@@ -1332,7 +1338,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Removed workflow from document version',
'removeFolderFromDropFolder' => 'Po importe odstrániť zložku',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Odstrániť označené súbory',
'remove_review_log' => '',
'remove_task' => '',
@@ -1536,6 +1544,7 @@ URL: [url]',
'select_category' => 'Vyber kategóriu',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Vybrať skupinu',
'select_groups' => 'Kliknutím vyberte skupiny',
'select_grp_approvers' => 'Kliknutím vyberte schvaľovateľa skupiny',
@@ -1588,7 +1597,9 @@ Meno: [username]
'service_name' => '',
'sessions' => 'Používatelia online',
'setDateFromFile' => 'Prebrať dátumy z importovaných súborov',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => 'Prebrať dátumy z importovaných zložiek',
+'setDateFromFolder_desc' => '',
'settings' => 'Nastavenia',
'settings_activate_module' => 'Aktivovať modul',
'settings_activate_php_extension' => 'Aktivovať PHP rozšírenie',
@@ -1686,6 +1697,8 @@ Meno: [username]
'settings_delete_install_folder' => 'In order to use SeedDMS, you must delete the file ENABLE_INSTALL_TOOL in the configuration directory',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Disable Self Edit',
'settings_disableSelfEdit_desc' => 'If checked user cannot edit his own profile',
'settings_disable_install' => 'Delete file ENABLE_INSTALL_TOOL if possible',
@@ -1751,6 +1764,8 @@ Meno: [username]
'settings_enableLargeFileUpload_desc' => 'If set, file upload is also available through a java applet called jumploader without a file size limit set by the browser. It also allows to upload several files in one step. Turning this on will turn off http only cookies.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Enable task list in menu',
'settings_enableMenuTasks_desc' => 'Enable/Disable the menu item which contains all tasks for the user. This contains documents, that need to be reviewed, approved, etc.',
'settings_enableMenuTransmittals' => '',
@@ -1810,6 +1825,8 @@ Meno: [username]
'settings_encryptionKey' => 'Encryption key',
'settings_encryptionKey_desc' => 'This string is used for creating a unique identifier being added as a hidden field to a form in order to prevent CSRF attacks.',
'settings_error' => 'Chyba',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Rozbaliť',
'settings_expandFolderTree_desc' => 'Rozbaliť strom zložiek',
'settings_expandFolderTree_val0' => 'začať so skrytou stromovou štruktúrou',
@@ -1868,6 +1885,8 @@ Meno: [username]
'settings_logFileEnable_desc' => 'Povoliť/zakázať log súbor',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Log File Rotation',
'settings_logFileRotation_desc' => 'The log file rotation',
'settings_loginFailure' => 'Prihlásenie zlyhalo',
@@ -2065,6 +2084,7 @@ Meno: [username]
'sign_out' => 'odhlásiť',
'sign_out_user' => 'Odhlásiť používateľa',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovenčina',
'sort_by_date' => '',
'sort_by_expiration_date' => '',
@@ -2194,6 +2214,7 @@ Meno: [username]
'status_revision_sleeping' => 'pending',
'status_revisor_removed' => 'Revisor removed from list',
'status_unknown' => 'Neznámy',
+'storage' => '',
'storage_size' => 'Objem dát',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => 'Save secret',
diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc
index a35605926..9931d2858 100644
--- a/languages/sv_SE/lang.inc
+++ b/languages/sv_SE/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '2-faktors autentisering',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => 'För stöd av 2-faktors autentisering behöver du Google Authenticator installerad på din mobiltelefon.
Nedan ser du två QR-koder. Den högra är din hemliga kod och till vänster kan du skapa en ny kod. Om du skapar en ny kod måste du skanna den på nytt med Google Authenticator.',
'2_fact_auth_current_secret' => '',
@@ -571,6 +572,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -701,6 +704,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => '',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => '',
@@ -1155,6 +1160,7 @@ URL: [url]',
'no_groups' => 'Inga grupper',
'no_group_members' => 'Denna grupp har inga medlemmar',
'no_linked_files' => 'Inga länkade filer',
+'no_mimetype' => '',
'no_previous_versions' => 'Inga andra versioner hittades.',
'no_receipt_needed' => 'Det finns inga dokument som saknar mottagningsbevis.',
'no_review_needed' => 'Det finns inga dokument som du behöver granska.',
@@ -1305,7 +1311,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Arbetsflöde borttaget från dokumentversion',
'removeFolderFromDropFolder' => 'Radera katalog efter import',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Ta bort markerade filer',
'remove_review_log' => '',
'remove_task' => '',
@@ -1509,6 +1517,7 @@ URL: [url]',
'select_category' => 'Klicka för att välja en kategori',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Välj grupp',
'select_groups' => 'Välj grupper',
'select_grp_approvers' => 'Välj en grupp som ska godkänna',
@@ -1561,7 +1570,9 @@ Kommentar: [comment]',
'service_name' => '',
'sessions' => 'Användare online',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Inställningar',
'settings_activate_module' => 'Aktivera modul',
'settings_activate_php_extension' => 'Aktivera PHP-extension',
@@ -1659,6 +1670,8 @@ Kommentar: [comment]',
'settings_delete_install_folder' => 'För att kunna använda LetoDMS måste du ta bort filen ENABLE_INSTALL_TOOL som finns i konfigurationsmappen.',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Inaktivera själveditering',
'settings_disableSelfEdit_desc' => 'Om ikryssad kan användare inte ändra sin egen profil.',
'settings_disable_install' => 'Ta bort filen ENABLE_INSTALL_TOOL, om det är möjligt.',
@@ -1724,6 +1737,8 @@ Kommentar: [comment]',
'settings_enableLargeFileUpload_desc' => 'Om aktiverad, kan filer laddas upp via javaapplet med namnet jumploader, utan begränsningar i filstorlek. Flera filer kan även laddas upp samtidigt i ett steg.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Aktivera uppgiftslista i menyn',
'settings_enableMenuTasks_desc' => 'Aktiverar ett menyobjekt som visar användarens uppgifter, såsom dokument som behöver granskas eller godkännas.',
'settings_enableMenuTransmittals' => '',
@@ -1783,6 +1798,8 @@ Kommentar: [comment]',
'settings_encryptionKey' => 'Krypteringsnyckel',
'settings_encryptionKey_desc' => 'Denna sträng används för att generera en unik identifierare, som är inrymd som ett dolt fält i ett formulär. Det används för att förhindra CSRF-attacker.',
'settings_error' => 'Fel',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Expandera katalogträd',
'settings_expandFolderTree_desc' => 'Expandera katalogträd',
'settings_expandFolderTree_val0' => 'Börja med dolt träd',
@@ -1841,6 +1858,8 @@ Kommentar: [comment]',
'settings_logFileEnable_desc' => 'Aktivera/Inaktivera loggfil',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Loggfils-rotation',
'settings_logFileRotation_desc' => 'Loggfils-rotation',
'settings_loginFailure' => 'Fel vid inloggning',
@@ -2038,6 +2057,7 @@ Kommentar: [comment]',
'sign_out' => 'Logga ut',
'sign_out_user' => 'Logga ut användare',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovakiska',
'sort_by_date' => '',
'sort_by_expiration_date' => '',
@@ -2167,6 +2187,7 @@ Kommentar: [comment]',
'status_revision_sleeping' => 'Vilande',
'status_revisor_removed' => 'Reviderare borttagen från listan',
'status_unknown' => 'Okänd',
+'storage' => '',
'storage_size' => 'Lagringsstorlek',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => 'Spara hemlighet',
diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc
index 06652db3a..d129dd215 100644
--- a/languages/tr_TR/lang.inc
+++ b/languages/tr_TR/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => 'İki faktörlü yetkilendirme',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -559,6 +560,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -689,6 +692,8 @@ URL: [url]',
'export_user_list_csv' => 'Kullanıcıları CSV olarak dışa aktar',
'extension_archive' => '',
'extension_changelog' => 'Değişiklik Listesi',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => 'Uzantı yüklendi',
@@ -1141,6 +1146,7 @@ URL: [url]',
'no_groups' => 'Grup yok',
'no_group_members' => 'Bu grubun hiç üyesi yok',
'no_linked_files' => 'Link verilmiş dosya yok',
+'no_mimetype' => '',
'no_previous_versions' => 'Başka versiyon yok',
'no_receipt_needed' => '',
'no_review_needed' => 'Bekleyen kontrol yok.',
@@ -1296,7 +1302,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - Doküman versiyonundan iş akışı silindi',
'removeFolderFromDropFolder' => '',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'İşaretli dosyaları sil',
'remove_review_log' => '',
'remove_task' => '',
@@ -1478,6 +1486,7 @@ URL: [url]',
'select_category' => 'Kategori seçmek için tıklayın',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => 'Grup Seç',
'select_groups' => 'Grup seçmek için tıklayın',
'select_grp_approvers' => 'Grup onaylayıcı seçmek için tıklayın',
@@ -1525,7 +1534,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Ayarlar',
'settings_activate_module' => 'Modülü etkinleştir',
'settings_activate_php_extension' => 'PHP uzantısını etkinleştir',
@@ -1623,6 +1634,8 @@ URL: [url]',
'settings_delete_install_folder' => 'SeedDMS kullanabilmeniz için konfigürasyon (conf) dizini içindeki ENABLE_INSTALL_TOOL dosyasını silmelisiniz',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Kendi kendine Düzenlemeyi Kapat',
'settings_disableSelfEdit_desc' => 'Seçilirse kullanıcı kendi profil ayarlarını değiştiremez.',
'settings_disable_install' => 'ENABLE_INSTALL_TOOL dosyasını silmeyi dene',
@@ -1688,6 +1701,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => 'Etkinleştirilirse, büyük dosyalar dosya limitine bakılmaksızın jumploader isimli java applet aracılığıyla yüklenebilir. Bu ayrıca bir seferde birden çok dosya yüklemeyi de sağlar. Bu açıldığında sadece http çerezleri kapanmış olur.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => '',
'settings_enableMenuTasks_desc' => '',
'settings_enableMenuTransmittals' => '',
@@ -1747,6 +1762,8 @@ URL: [url]',
'settings_encryptionKey' => 'Şifreleme anahtarı',
'settings_encryptionKey_desc' => 'Bu string, CSRF ataklarını önlemek için eşsiz id olarak kaydedilir.',
'settings_error' => 'Hata',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Klasör Ağacını Genişlet',
'settings_expandFolderTree_desc' => 'Klasör Ağacını Genişlet',
'settings_expandFolderTree_val0' => 'ağaç yapısı gizli olarak başlat',
@@ -1805,6 +1822,8 @@ URL: [url]',
'settings_logFileEnable_desc' => 'Log dosyasını etkinleştir/devredışı bırak',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Log Dosyası rotasyonu',
'settings_logFileRotation_desc' => 'Log dosyasını seçeceğiniz zaman dilimine göre ayrı ayrı kaydet',
'settings_loginFailure' => 'Hatalı giriş sayısı',
@@ -2002,6 +2021,7 @@ URL: [url]',
'sign_out' => 'Çıkış',
'sign_out_user' => 'Kullanıcı hesabından çıkış',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovakça',
'sort_by_date' => 'Tarihe göre sırala',
'sort_by_expiration_date' => '',
@@ -2131,6 +2151,7 @@ URL: [url]',
'status_revision_sleeping' => '',
'status_revisor_removed' => '',
'status_unknown' => 'Bilinmeyen',
+'storage' => '',
'storage_size' => 'Depo boyutu',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc
index ac84bed85..88800f451 100644
--- a/languages/uk_UA/lang.inc
+++ b/languages/uk_UA/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -564,6 +565,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -694,6 +697,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '',
'extension_changelog' => '',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => '',
@@ -1147,6 +1152,7 @@ URL: [url]',
'no_groups' => 'Немає груп',
'no_group_members' => 'Група не має членів',
'no_linked_files' => 'Немає пов\'язаних документів',
+'no_mimetype' => '',
'no_previous_versions' => 'Немає попередніх версій',
'no_receipt_needed' => 'Немає документів, які потребують підтвердження отримання',
'no_review_needed' => 'Рецензія не потрібна',
@@ -1303,7 +1309,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: видалено процес з версії документа «[name]»',
'removeFolderFromDropFolder' => '',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => 'Видалити обрані файли',
'remove_review_log' => '',
'remove_task' => '',
@@ -1500,6 +1508,7 @@ URL: [url]',
'select_category' => 'Оберіть категорію',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => '',
'select_groups' => 'Оберіть групи',
'select_grp_approvers' => 'Оберіть групу затверджувачів',
@@ -1547,7 +1556,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '',
'setDateFromFile' => '',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '',
+'setDateFromFolder_desc' => '',
'settings' => 'Налаштування',
'settings_activate_module' => 'Активувати модуль',
'settings_activate_php_extension' => 'Активувати розширення PHP',
@@ -1645,6 +1656,8 @@ URL: [url]',
'settings_delete_install_folder' => 'Видаліть ENABLE_INSTALL_TOOL в каталозі конфігурації для того, щоби почати використовувати систему',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => 'Відключити власне редагування',
'settings_disableSelfEdit_desc' => 'Якщо ввімкнено, користувачі не зможуть змінювати інформацію про себе.',
'settings_disable_install' => 'Видалити ENABLE_INSTALL_TOOL, якщо можливо',
@@ -1710,6 +1723,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => 'Якщо увімкнено, завантаження файлів доступне також через Java-аплет jumploader без обмеження розміру файлів. Це також дозволить завантажувати кілька файлів за раз.',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => 'Включити список завдань в меню',
'settings_enableMenuTasks_desc' => 'Включити/відключити пункт меню, який містить всі завдання користувача. Там містяться документи, які потребують рецензії, затвердження і т.ін.',
'settings_enableMenuTransmittals' => '',
@@ -1769,6 +1784,8 @@ URL: [url]',
'settings_encryptionKey' => 'Ключ шифрування',
'settings_encryptionKey_desc' => 'Рядок використовується для створення унікального ідентифікатора, який додається як приховане поле до формулярів, для запобігання CSRF-атак.',
'settings_error' => 'Помилка',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => 'Розгортати дерево каталогів',
'settings_expandFolderTree_desc' => 'Розгортати дерево каталогів.',
'settings_expandFolderTree_val0' => 'Починати із згорнутого дерева',
@@ -1827,6 +1844,8 @@ URL: [url]',
'settings_logFileEnable_desc' => 'Увімкнути/вимкнути протоколювання (лог).',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => 'Ротація журналу (протоколу)',
'settings_logFileRotation_desc' => 'Ротація файлу журналу.',
'settings_loginFailure' => 'Не вдалося увійти',
@@ -2024,6 +2043,7 @@ URL: [url]',
'sign_out' => 'Вийти',
'sign_out_user' => 'Вихід користувача',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => 'Slovak',
'sort_by_date' => '',
'sort_by_expiration_date' => '',
@@ -2153,6 +2173,7 @@ URL: [url]',
'status_revision_sleeping' => 'Ревізію призупинено',
'status_revisor_removed' => 'Ревізора видалено зі списку',
'status_unknown' => 'Невідомий',
+'storage' => '',
'storage_size' => 'Розмір сховища',
'subfolder_duplicate_name' => '',
'submit_2_fact_auth' => '',
diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc
index ce7664fd5..df72c6603 100644
--- a/languages/zh_CN/lang.inc
+++ b/languages/zh_CN/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '双重认证',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '该系统启用双重认证。您需要在手机上进行 Google 认证。下面你会看到两个 QR 码。正确的是你目前的密码。在左边你可以设置一个新的密码。如果您设置了新的密码,请重新扫描并通过 Google 认证。',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -559,6 +560,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -697,6 +700,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '扩展',
'extension_changelog' => '更新日志',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => '加载扩展',
@@ -1151,6 +1156,7 @@ URL: [url]',
'no_groups' => '无组别',
'no_group_members' => '该组没有成员',
'no_linked_files' => '无链接文件',
+'no_mimetype' => '',
'no_previous_versions' => '无其它版本',
'no_receipt_needed' => '目前没有需要收据确认的文件',
'no_review_needed' => '无待校对的文件',
@@ -1309,7 +1315,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - 已从文档版本中移除工作流',
'removeFolderFromDropFolder' => '导入后删除文件夹',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => '删除选中的文件',
'remove_review_log' => '',
'remove_task' => '',
@@ -1483,6 +1491,7 @@ URL: [url]',
'select_category' => '选中分类',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => '选择用户组',
'select_groups' => '点击选择组',
'select_grp_approvers' => '点击选择组审批组',
@@ -1535,7 +1544,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '在线用户',
'setDateFromFile' => '导入文件接收日期',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '导入文件夹接收日期',
+'setDateFromFolder_desc' => '',
'settings' => '设置',
'settings_activate_module' => '启用模块',
'settings_activate_php_extension' => '启用 PHP 扩展',
@@ -1633,6 +1644,8 @@ URL: [url]',
'settings_delete_install_folder' => '在使用 DMS 前,您必须先删除配置目录(config)下的 ENABLE_INSTALL_TOOL 文件',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => '禁用自编辑',
'settings_disableSelfEdit_desc' => '若勾选,则用户不能编辑自己的档案信息',
'settings_disable_install' => '如有可能,则删除 ENABLE_INSTALL_TOOL 文件',
@@ -1698,6 +1711,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => '如果设置了文件上传,也可以通过一个名为jumploader的浏览器java小程序来实现文件上传。它还允许一次上传多个文件。打开此选项将关闭网页cookie。',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => '在菜单中启用任务列表',
'settings_enableMenuTasks_desc' => '启用/禁用包含用户所有任务的菜单项。其中包含需要审核、批准的文件等。',
'settings_enableMenuTransmittals' => '',
@@ -1757,6 +1772,8 @@ URL: [url]',
'settings_encryptionKey' => '加密密钥',
'settings_encryptionKey_desc' => '这个字符串用于创建一个唯一的标识符,并作为一个隐藏字段添加到表单中以防止CSRF攻击。',
'settings_error' => '错误',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => '展开文件夹树',
'settings_expandFolderTree_desc' => '展开文件夹树',
'settings_expandFolderTree_val0' => '启动时隐藏树形结构',
@@ -1815,6 +1832,8 @@ URL: [url]',
'settings_logFileEnable_desc' => '启用 / 禁用日志文件',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => '设置日志文件时间段',
'settings_logFileRotation_desc' => '日志文件时间段切换',
'settings_loginFailure' => '登录失败',
@@ -2012,6 +2031,7 @@ URL: [url]',
'sign_out' => '登出',
'sign_out_user' => '退出登录',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => '斯洛伐克语',
'sort_by_date' => '日期排序',
'sort_by_expiration_date' => '',
@@ -2141,6 +2161,7 @@ URL: [url]',
'status_revision_sleeping' => '等待',
'status_revisor_removed' => '从名单中删除校订人',
'status_unknown' => '未知',
+'storage' => '',
'storage_size' => '存储大小',
'subfolder_duplicate_name' => '重复的文件夹',
'submit_2_fact_auth' => '保存秘钥',
diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc
index f8cc6faf9..30ad3fc27 100644
--- a/languages/zh_TW/lang.inc
+++ b/languages/zh_TW/lang.inc
@@ -23,6 +23,7 @@
$text = array(
'2_factor_auth' => '2階段認證',
+'2_factor_auth_code' => '',
'2_factor_auth_info' => '此系統強制執行2階段身份驗證。您將需要在手機上使用Google Authenticator。在下面,您可以看到兩個QR碼。正確的是您當前的秘密。在左側,您可以設置一個新的秘密。如果您設置了新的機密,請確保使用Google Authenticator重新掃描它。',
'2_fact_auth_current_secret' => '',
'2_fact_auth_new_secret' => '',
@@ -577,6 +578,8 @@ URL: [url]',
'download_header_document_name' => '',
'download_header_document_no' => '',
'download_header_filename' => '',
+'download_header_folder_name' => '',
+'download_header_folder_no' => '',
'download_header_internal_version' => '',
'download_header_reviewer' => '',
'download_header_review_comment' => '',
@@ -707,6 +710,8 @@ URL: [url]',
'export_user_list_csv' => '',
'extension_archive' => '擴充',
'extension_changelog' => '修改紀錄',
+'extension_config' => '',
+'extension_info' => '',
'extension_is_off_now' => '',
'extension_is_on_now' => '',
'extension_loading' => '擴充套件讀取中',
@@ -1168,6 +1173,7 @@ URL: [url]',
'no_groups' => '無組別',
'no_group_members' => '該組沒有成員',
'no_linked_files' => '無連結檔',
+'no_mimetype' => '',
'no_previous_versions' => '無其它版本',
'no_receipt_needed' => '當前沒有需要收據確認的文件。',
'no_review_needed' => '無待校對的文件',
@@ -1330,7 +1336,9 @@ URL: [url]',
'removed_workflow_email_body_html' => '',
'removed_workflow_email_subject' => '[sitename]: [name] - 從文檔版本中刪除了工作流程',
'removeFolderFromDropFolder' => '導入後刪除文件夾',
+'removeFolderFromDropFolder_desc' => '',
'remove_approval_log' => '',
+'remove_from_clipboard' => '',
'remove_marked_files' => '刪除勾選的檔案',
'remove_review_log' => '',
'remove_task' => '',
@@ -1534,6 +1542,7 @@ URL: [url]',
'select_category' => '選中分類',
'select_created' => '',
'select_documents_for_process' => '',
+'select_folder' => '',
'select_group' => '選擇群',
'select_groups' => '點擊選擇組',
'select_grp_approvers' => '請點選審核人員群組',
@@ -1586,7 +1595,9 @@ URL: [url]',
'service_name' => '',
'sessions' => '在線用戶',
'setDateFromFile' => '從導入的文件接管日期',
+'setDateFromFile_desc' => '',
'setDateFromFolder' => '從導入的文件夾接管日期',
+'setDateFromFolder_desc' => '',
'settings' => '設置',
'settings_activate_module' => '激活模塊',
'settings_activate_php_extension' => '激活PHP擴展',
@@ -1684,6 +1695,8 @@ URL: [url]',
'settings_delete_install_folder' => '為了使用SeedDMS,必須在配置目錄中刪除文件ENABLE_INSTALL_TOOL',
'settings_disableChangePassword' => '',
'settings_disableChangePassword_desc' => '',
+'settings_disableReceiptComment' => '',
+'settings_disableReceiptComment_desc' => '',
'settings_disableSelfEdit' => '禁用自我編輯',
'settings_disableSelfEdit_desc' => '如果選中,則用戶無法編輯自己的個人資料',
'settings_disable_install' => '如果可能,刪除文件ENABLE_INSTALL_TOOL',
@@ -1749,6 +1762,8 @@ URL: [url]',
'settings_enableLargeFileUpload_desc' => '如果設置了該選項,則還可以通過一個名為Jumploader的Java小程序來上傳文件,而瀏覽器沒有設置文件大小限制。它還允許一步上傳幾個文件。啟用此功能將關閉僅HTTP cookie。',
'settings_enableLoginByEmail' => '',
'settings_enableLoginByEmail_desc' => '',
+'settings_enableMemcached' => '',
+'settings_enableMemcached_desc' => '',
'settings_enableMenuTasks' => '在菜單中啟用任務列表',
'settings_enableMenuTasks_desc' => '啟用/禁用包含用戶所有任務的菜單項。其中包含需要審查,批准等的文件。',
'settings_enableMenuTransmittals' => '',
@@ -1808,6 +1823,8 @@ URL: [url]',
'settings_encryptionKey' => '加密金鑰',
'settings_encryptionKey_desc' => '該字符串用於創建唯一的標識符,該標識符作為隱藏字段添加到表單中,以防止CSRF攻擊。',
'settings_error' => '錯誤',
+'settings_excludeFoldersDashboard' => '',
+'settings_excludeFoldersDashboard_desc' => '',
'settings_expandFolderTree' => '展開文件樹',
'settings_expandFolderTree_desc' => '展開文件樹',
'settings_expandFolderTree_val0' => '從隱藏的樹開始',
@@ -1866,6 +1883,8 @@ URL: [url]',
'settings_logFileEnable_desc' => '啟用/禁用日誌文件',
'settings_logFileMaxLevel' => '',
'settings_logFileMaxLevel_desc' => '',
+'settings_logFileRestApiMaxLevel' => '',
+'settings_logFileRestApiMaxLevel_desc' => '',
'settings_logFileRotation' => '日誌文件輪換',
'settings_logFileRotation_desc' => '日誌文件輪換',
'settings_loginFailure' => '登錄失敗',
@@ -2063,6 +2082,7 @@ URL: [url]',
'sign_out' => '登出',
'sign_out_user' => '登出使用者',
'site_brand' => '',
+'skip_default_export_cols' => '',
'sk_SK' => '斯洛伐克語',
'sort_by_date' => '依日期排序',
'sort_by_expiration_date' => '',
@@ -2192,6 +2212,7 @@ URL: [url]',
'status_revision_sleeping' => '待定',
'status_revisor_removed' => '修訂者已從清單中刪除',
'status_unknown' => '未知',
+'storage' => '',
'storage_size' => '存儲大小',
'subfolder_duplicate_name' => '子文件夾名稱重複',
'submit_2_fact_auth' => '保存秘密',
diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php
index 0d5790dff..03f47c1fa 100644
--- a/op/op.AddDocument.php
+++ b/op/op.AddDocument.php
@@ -498,9 +498,20 @@ foreach($file_ary as $file) {
if($controller->hasHook('cleanUpDocument')) {
$controller->callHook('cleanUpDocument', $document, $file);
}
- // Send notification to subscribers of folder.
if($notifier) {
+ // Send notification to subscribers of folder.
$notifier->sendNewDocumentMail($document, $user);
+
+ // Send notifcation to recipients of document
+ $content = $document->getLatestContent();
+ $status = $content->getStatus();
+ if ($status["status"] == S_RELEASED) {
+ if ($settings->_enableNotificationAppRev) {
+ if ($notifier) {
+ $notifier->sendToAllReceiptMail($content, $user);
+ }
+ }
+ }
}
if($settings->_removeFromDropFolder) {
if(file_exists($userfiletmp)) {
diff --git a/op/op.AddFile.php b/op/op.AddFile.php
index 77ba5bc2d..2cbbb5b45 100644
--- a/op/op.AddFile.php
+++ b/op/op.AddFile.php
@@ -51,6 +51,47 @@ if ($document->getAccessMode($user, 'addDocumentFile') < M_READWRITE) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
+function reArrayFiles(&$file_post) {
+ $file_ary = array();
+ $file_count = count($file_post['name']);
+ $file_keys = array_keys($file_post);
+
+ for ($i=0; $i<$file_count; $i++) {
+ if($file_post['error'][$i] != 4) { // no file uploaded
+ foreach ($file_keys as $key) {
+ $file_ary[$i][$key] = $file_post[$key][$i];
+ }
+ $file_ary[$i]['source'] = 'upload';
+ }
+ }
+
+ return $file_ary;
+}
+
+if(!empty($_FILES['userfile'])) {
+ $file_ary = reArrayFiles($_FILES['userfile']);
+} else {
+ $file_ary = array();
+}
+
+if($settings->_dropFolderDir) {
+ if(isset($_POST["dropfolderfileaddfileform"]) && $_POST["dropfolderfileaddfileform"]) {
+ $fullfile = $settings->_dropFolderDir.'/'.$user->getLogin().'/'.$_POST["dropfolderfileaddfileform"];
+ if(file_exists($fullfile)) {
+ $finfo = finfo_open(FILEINFO_MIME_TYPE);
+ $mimetype = finfo_file($finfo, $fullfile);
+ $file_ary[] = array(
+ 'tmp_name' => $fullfile,
+ 'type' => $mimetype,
+ 'name' => $_POST["dropfolderfileaddfileform"],
+ 'size' => filesize($fullfile),
+ 'error' => 0,
+ 'source' => 'dropfolder'
+ );
+ }
+ }
+}
+
$prefix = 'userfile';
if(isset($_POST[$prefix.'-fine-uploader-uuids']) && $_POST[$prefix.'-fine-uploader-uuids']) {
$uuids = explode(';', $_POST[$prefix.'-fine-uploader-uuids']);
@@ -60,34 +101,43 @@ if(isset($_POST[$prefix.'-fine-uploader-uuids']) && $_POST[$prefix.'-fine-upload
if(file_exists($fullfile)) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $fullfile);
- $_FILES["userfile"]['tmp_name'][] = $fullfile;
- $_FILES["userfile"]['type'][] = $mimetype;
- $_FILES["userfile"]['name'][] = isset($names[$i]) ? $names[$i] : $uuid;
- $_FILES["userfile"]['size'][] = filesize($fullfile);
- $_FILES["userfile"]['error'][] = 0;
+ $file_ary[] = array(
+ 'tmp_name' => $fullfile,
+ 'type' => $mimetype,
+ 'name' => isset($names[$i]) ? $names[$i] : $uuid,
+ 'size' => filesize($fullfile),
+ 'error' => 0,
+ 'source' => 'upload',
+ );
}
}
}
+if(!$file_ary) {
+ UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_failed"));
+}
+
$maxuploadsize = SeedDMS_Core_File::parse_filesize($settings->_maxUploadSize);
-for ($file_num=0;$file_num $document->getName())),getMLText("uploading_zerosize"));
+foreach($file_ary as $file) {
+ if($file['error']==1) {
+ UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_maxsize"));
}
- if ($maxuploadsize && $_FILES["userfile"]["size"][$file_num] > $maxuploadsize) {
- UI::exitError(getMLText("folder_title", array("documentname" => $document->getName())),getMLText("uploading_maxsize"));
- }
- if (is_uploaded_file($_FILES["userfile"]["tmp_name"][$file_num]) && $_FILES['userfile']['error'][$file_num] != 0){
+ if($file['error']!=0) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_failed"));
}
- if($_FILES["userfile"]["error"][$file_num]) {
- UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured"));
+ if ($file["size"]==0) {
+ UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_zerosize"));
}
+ if ($maxuploadsize && $file["size"] > $maxuploadsize) {
+ UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_maxsize"));
+ }
+}
- if(count($_FILES["userfile"]["tmp_name"]) == 1 && !empty($_POST['name']))
+foreach($file_ary as $file) {
+ if(count($file_ary) == 1 && !empty($_POST['name']))
$name = $_POST["name"];
else
- $name = $_FILES["userfile"]['name'][$file_num];
+ $name = $file['name'];
$comment = $_POST["comment"];
$version = (int) $_POST["version"];
$public = (isset($_POST["public"]) && $_POST["public"] == 'true') ? 1 : 0;
@@ -99,9 +149,9 @@ for ($file_num=0;$file_numsendSubmittedApprovalMail($latestContent, $user, $approvelog ? $approvelog[0] : false);
if($controller->oldstatus != $controller->newstatus)
$notifier->sendChangedDocumentStatusMail($latestContent, $user, $controller->oldstatus);
+ if ($controller->newstatus == S_RELEASED) {
+ if ($settings->_enableNotificationAppRev) {
+ if ($notifier) {
+ $notifier->sendToAllReceiptMail($content, $user);
+ }
+ }
+ }
}
}
diff --git a/op/op.AttributeMgr.php b/op/op.AttributeMgr.php
index 8eccffc1d..e025ab38f 100644
--- a/op/op.AttributeMgr.php
+++ b/op/op.AttributeMgr.php
@@ -218,6 +218,3 @@ else if ($action == "removeattrvalue") {
}
header("Location:../out/out.AttributeMgr.php?attrdefid=".$attrdefid);
-
-?>
-
diff --git a/op/op.ChangePassword.php b/op/op.ChangePassword.php
index 9c386635e..ad711b4b2 100644
--- a/op/op.ChangePassword.php
+++ b/op/op.ChangePassword.php
@@ -28,16 +28,6 @@ include("../inc/inc.ClassSession.php");
include("../inc/inc.DBInit.php");
include("../inc/inc.ClassUI.php");
-function _printMessage($heading, $message) {
-
- UI::htmlStartPage($heading, "password");
- UI::globalBanner();
- UI::pageNavigation($heading);
- UI::contentContainer($message."" . getMLText("login") . "
\n");
- UI::htmlEndPage();
- return;
-}
-
/* Check if the form data comes from a trusted request */
if(!checkFormKey('changepassword')) {
UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token"));
diff --git a/op/op.CheckInDocument.php b/op/op.CheckInDocument.php
index e540e73ab..4ae63cbce 100644
--- a/op/op.CheckInDocument.php
+++ b/op/op.CheckInDocument.php
@@ -250,10 +250,38 @@ default:
$attributes = $_POST["attributes_version"];
foreach($attributes as $attrdefid=>$attribute) {
$attrdef = $dms->getAttributeDefinition($attrdefid);
+ if(null === ($ret = $controller->callHook('validateAttribute', $attrdef, $attribute))) {
if($attribute) {
switch($attrdef->getType()) {
case SeedDMS_Core_AttributeDefinition::type_date:
- $attribute = date('Y-m-d', makeTsFromDate($attribute));
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): string => date('Y-m-d', makeTsFromDate($value)), $attribute);
+ else
+ $attribute = date('Y-m-d', makeTsFromDate($attribute));
+ break;
+ case SeedDMS_Core_AttributeDefinition::type_folder:
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): object => $dms->getFolder((int) $value), $attribute);
+ else
+ $attribute = $dms->getFolder((int) $attribute);
+ break;
+ case SeedDMS_Core_AttributeDefinition::type_document:
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): object => $dms->getDocument((int) $value), $attribute);
+ else
+ $attribute = $dms->getDocument((int) $attribute);
+ break;
+ case SeedDMS_Core_AttributeDefinition::type_user:
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): object => $dms->getUser((int) $value), $attribute);
+ else
+ $attribute = $dms->getUser((int) $attribute);
+ break;
+ case SeedDMS_Core_AttributeDefinition::type_group:
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): object => $dms->getGroup((int) $value), $attribute);
+ else
+ $attribute = $dms->getGroup((int) $attribute);
break;
}
if(!$attrdef->validate($attribute, null, true)) {
@@ -263,6 +291,10 @@ default:
} elseif($attrdef->getMinValues() > 0) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("attr_min_values", array("attrname"=>$attrdef->getName())));
}
+ } else {
+ if($ret === false)
+ return false;
+ }
}
} else {
$attributes = array();
diff --git a/op/op.CheckOutDocument.php b/op/op.CheckOutDocument.php
index 1e22c7ffc..d7b1c6856 100644
--- a/op/op.CheckOutDocument.php
+++ b/op/op.CheckOutDocument.php
@@ -75,5 +75,3 @@ $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_documen
add_log_line();
header("Location:../out/out.ViewDocument.php?documentid=".$documentid);
-?>
-
diff --git a/op/op.CreateSubFolderIndex.php b/op/op.CreateSubFolderIndex.php
deleted file mode 100644
index 1a58535e5..000000000
--- a/op/op.CreateSubFolderIndex.php
+++ /dev/null
@@ -1,114 +0,0 @@
-isAdmin()) {
- UI::contentContainer("Permission denied.
");
- UI::htmlPageEnd();
- exit;
-}
-
-function getTime() {
- if (function_exists('microtime')) {
- $tm = microtime();
- $tm = explode(' ', $tm);
- return (float) sprintf('%f', $tm[1] + $tm[0]);
- }
- return time();
-}
-
-
-// ------------------------------------- Suche starten --------------------------------------------
-
-UI::contentContainerStart();
-
-$startTime = getTime();
-$results = array();
-//searchInFolder($startFolder);
-
-//
-// Construct the SQL query that will be used to search the database.
-//
-
-// Create the keyword search string. This search spans up to three columns
-// in the database: keywords, name and comment.
-
-//
-// The base query.
-//
-$searchQuery = "SELECT `tblDocuments`.* FROM `tblDocuments` ";
-
-// Send the search query to the database.
-$resArr = $db->getResultArray($searchQuery);
-// Assemble the results into an array of MyDMS Document objects.
-if (!is_bool($resArr) && count($resArr)>0) {
- echo "";
- foreach($resArr as $docArr) {
- $doc = new SeedDMS_Core_Document($docArr["id"],
- $docArr["name"],
- $docArr["comment"],
- $docArr["date"],
- $docArr["expires"],
- $docArr["owner"],
- $docArr["folder"],
- $docArr["inheritAccess"],
- $docArr["defaultAccess"],
- $docArr["lockUser"],
- $docArr["keywords"],
- $docArr["sequence"]);
- // Make sure that the folder search path is also updated.
- $folder = $doc->getFolder();
- $path = $folder->getPath();
- $flist = "";
- foreach ($path as $f) {
- $flist .= ":".$f->getID();
- }
- if (strlen($flist)>1) {
- $flist .= ":";
- }
- $queryStr = "UPDATE tblDocuments SET folderList = '" . $flist . "' WHERE id = ". $doc->getID();
- $db->getResult($queryStr);
- echo "- Updating docID '".$doc->getID()."' -- '".$flist."'
";
- }
- echo "
";
-}
-
-$searchTime = getTime() - $startTime;
-$searchTime = round($searchTime, 2);
-echo "";
-printMLText("search_time", array("time" => $searchTime));
-
-UI::contentContainerEnd();
-UI::htmlEndPage();
-?>
diff --git a/op/op.EditUserData.php b/op/op.EditUserData.php
index 66b1b5327..fbea088de 100644
--- a/op/op.EditUserData.php
+++ b/op/op.EditUserData.php
@@ -46,7 +46,8 @@ if(!checkFormKey('edituserdata')) {
$fullname = $_POST["fullname"];
$email = $_POST["email"];
$comment = $_POST["comment"];
-$language = $_POST["language"];
+if(isset($_POST["language"]))
+ $language = $_POST["language"];
/* 'theme' won't be set, if themeselector is turned off */
if(isset($_POST["theme"]))
$mytheme = $_POST["theme"];
@@ -103,7 +104,7 @@ if ($user->getEmail() != $email)
if ($user->getComment() != $comment)
$user->setComment($comment);
-if ($user->getLanguage() != $language)
+if (isset($language) && $user->getLanguage() != $language)
$user->setLanguage($language);
if (isset($mytheme) && $user->getTheme() != $mytheme)
diff --git a/op/op.ImportFS.php b/op/op.ImportFS.php
index d5f3f90c2..0ebd62aa5 100644
--- a/op/op.ImportFS.php
+++ b/op/op.ImportFS.php
@@ -239,9 +239,10 @@ if($newfolder) {
$session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('error_importfs')));
else {
if(isset($_GET['remove']) && $_GET["remove"]) {
- $cmd = 'rm -rf '.$dirname;
- $ret = null;
- system($cmd, $ret);
+ SeedDMS_Utils::rrmdir($dirname);
+// $cmd = 'rm -rf '.$dirname;
+// $ret = null;
+// system($cmd, $ret);
}
$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_importfs', array('docs'=>$doccount, 'folders'=>$foldercount))));
}
diff --git a/op/op.OverrideContentStatus.php b/op/op.OverrideContentStatus.php
index 253926e56..dd5a74f42 100644
--- a/op/op.OverrideContentStatus.php
+++ b/op/op.OverrideContentStatus.php
@@ -85,9 +85,16 @@ if ($overrideStatus != $overallStatus["status"]) {
if (!$content->setStatus($overrideStatus, $comment, $user)) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured"));
} else {
- // Send notification to subscribers.
- if($notifier) {
+ if ($notifier) {
+ // Send notification to subscribers.
$notifier->sendChangedDocumentStatusMail($content, $user, $overallStatus["status"]);
+
+ // Send request for receipt notification
+ if ($overrideStatus == S_RELEASED) {
+ if ($settings->_enableNotificationAppRev) {
+ $notifier->sendToAllReceiptMail($content, $user);
+ }
+ }
}
}
}
diff --git a/op/op.PasswordForgotten.php b/op/op.PasswordForgotten.php
index 03ae90ac0..c1e8e0fb9 100644
--- a/op/op.PasswordForgotten.php
+++ b/op/op.PasswordForgotten.php
@@ -31,15 +31,6 @@ include("../inc/inc.ClassUI.php");
include $settings->_rootDir . "languages/" . $settings->_language . "/lang.inc";
-function _printMessage($heading, $message) {
- UI::htmlStartPage($heading, "password");
- UI::globalBanner();
- UI::pageNavigation($heading);
- UI::contentContainer($message."
" . getMLText("login") . "
\n");
- UI::htmlEndPage();
- return;
-}
-
if (isset($_POST["email"])) {
$email = $_POST["email"];
}
@@ -64,9 +55,10 @@ if($user) {
$params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ChangePassword.php?hash=".$hash;
$params['url_prefix'] = getBaseUrl().$settings->_httpRoot;
$emailobj->toIndividual($settings->_smtpSendFrom, $user, $subject, $message, $params);
+ add_log_line("Request for '".$login."' send to '".$email."'", PEAR_LOG_INFO);
}
+} else {
+ add_log_line("No such user '".$login."' with email '".$email."'", PEAR_LOG_WARNING);
}
header('Location: ../out/out.PasswordSend.php');
-exit;
-?>
diff --git a/op/op.SetLanguage.php b/op/op.SetLanguage.php
index 9cb0b2d02..f9a2da8b8 100644
--- a/op/op.SetLanguage.php
+++ b/op/op.SetLanguage.php
@@ -31,5 +31,4 @@ include("../inc/inc.Authentication.php");
$session->setLanguage($_GET['lang']);
-header("Location: http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$_GET['referer']);
-?>
+header("Location: http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].decryptData($settings->_encryptionKey, $_GET['referer']));
diff --git a/op/op.SetRecipients.php b/op/op.SetRecipients.php
index 2806e73af..778d8d3e0 100644
--- a/op/op.SetRecipients.php
+++ b/op/op.SetRecipients.php
@@ -69,6 +69,8 @@ foreach ($docAccess["groups"] as $i=>$da) {
$accessIndex["g"][$da->getID()] = $da;
}
+$status = $content->getStatus();
+
// Retrieve list of currently assigned recipients, along with
// their latest status.
$receiptStatus = $content->getReceiptStatus();
@@ -137,10 +139,13 @@ foreach ($pIndRev as $p) {
// email error
break;
default:
- // Send an email notification to the new recipient.
- if($settings->_enableNotificationAppRev) {
- if ($notifier) {
- $notifier->sendAddReceiptMail($content, $user, $accessIndex["i"][$p]);
+ // Send an email notification to the new recipient only if the document
+ // is already released
+ if ($status["status"] == S_RELEASED) {
+ if($settings->_enableNotificationAppRev) {
+ if ($notifier) {
+ $notifier->sendAddReceiptMail($content, $user, $accessIndex["i"][$p]);
+ }
}
}
break;
@@ -218,10 +223,13 @@ foreach ($pGrpRev as $p) {
// email error
break;
default:
- // Send an email notification to the new recipient.
- if($settings->_enableNotificationAppRev) {
- if ($notifier) {
- $notifier->sendAddReceiptMail($content, $user, $accessIndex["g"][$p]);
+ // Send an email notification to the new recipient only if the document
+ // is already released
+ if ($status["status"] == S_RELEASED) {
+ if($settings->_enableNotificationAppRev) {
+ if ($notifier) {
+ $notifier->sendAddReceiptMail($content, $user, $accessIndex["g"][$p]);
+ }
}
}
break;
diff --git a/op/op.SetRevisors.php b/op/op.SetRevisors.php
index 672cd6677..3716b0183 100644
--- a/op/op.SetRevisors.php
+++ b/op/op.SetRevisors.php
@@ -55,10 +55,12 @@ if (!is_object($content)) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version"));
}
-if (isset($_POST["startdate"])) {
+$ts = null;
+if (!empty($_POST["startdate"])) {
$ts = makeTsFromDate($_POST["startdate"]);
-} else {
- $ts = time();
+}
+if(!$ts) {
+ UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_revision_date"));
}
$startdate = date('Y-m-d', $ts);
diff --git a/op/op.Settings.php b/op/op.Settings.php
index 7403c6668..ea861fdec 100644
--- a/op/op.Settings.php
+++ b/op/op.Settings.php
@@ -29,17 +29,6 @@ include("../inc/inc.DBInit.php");
include("../inc/inc.ClassUI.php");
include("../inc/inc.Authentication.php");
-
-function getBoolValue($post_name)
-{
- $out = false;
- if (isset($_POST[$post_name]))
- if ($_POST[$post_name]=="on")
- $out = true;
-
- return $out;
-}
-
if (!$user->isAdmin()) {
UI::exitError(getMLText("admin_tools"),getMLText("access_denied"));
}
@@ -68,10 +57,12 @@ if ($action == "saveSettings")
function setBoolValue($name) {
global $_POST, $settings;
if(!in_array($name, $settings->_hiddenConfFields)) {
- if (isset($_POST[$name]) && $_POST[$name]=="on")
- $settings->{"_".$name} = true;
- else
- $settings->{"_".$name} = false;
+ if (isset($_POST[$name])) {
+ if ($_POST[$name]=="on")
+ $settings->{"_".$name} = true;
+ else
+ $settings->{"_".$name} = false;
+ }
}
}
function setIntValue($name) {
@@ -81,11 +72,13 @@ if ($action == "saveSettings")
}
function setArrayValue($name) {
global $_POST, $settings;
- if(!in_array($name, $settings->_hiddenConfFields)) {
- if(isset($_POST[$name]) && $_POST[$name])
- $settings->{"_".$name} = $_POST[$name];
- else
- $settings->{"_".$name} = array();
+ if (!in_array($name, $settings->_hiddenConfFields)) {
+ if (isset($_POST[$name])) {
+ if ($_POST[$name])
+ $settings->{"_".$name} = $_POST[$name];
+ else
+ $settings->{"_".$name} = array();
+ }
}
}
function setDirValue($name) {
@@ -150,6 +143,7 @@ if ($action == "saveSettings")
setBoolValue("enableRecursiveCount");
setIntValue("maxRecursiveCount");
setIntValue("daysPastDashboard");
+ setArrayValue("excludeFoldersDashboard");
setBoolValue("enableLanguageSelector");
setBoolValue("enableHelp");
setBoolValue("enableThemeSelector");
@@ -198,6 +192,7 @@ if ($action == "saveSettings")
setStrValue("partitionSize"); // TODO: check if valid value, e.g. 1M or 5K
setStrValue("maxUploadSize"); // TODO: check if valid value, e.g. 1M or 5K
setBoolValue("enableXsendfile");
+ setBoolValue("enableMemcached");
// SETTINGS - SYSTEM - AUTHENTICATION
setBoolValue("enableGuestLogin");
@@ -298,7 +293,7 @@ if ($action == "saveSettings")
// SETTINGS - ADVANCED - SERVER
setStrValue("coreDir");
setStrValue("luceneClassDir");
- setIntValue("contentOffsetDir");
+ setStrValue("contentOffsetDir");
setIntValue("maxDirID");
setIntValue("updateNotifyTime");
setIntValue("maxExecutionTime");
@@ -346,15 +341,21 @@ if ($action == "saveSettings")
// -------------------------------------------------------------------------
// save
// -------------------------------------------------------------------------
- if (!$settings->save())
- UI::exitError(getMLText("admin_tools"),getMLText("settings_SaveError"));
+ if (!$settings->save()) {
+ if(isAjax()) {
+ echo json_encode(array('success'=>false, 'msg'=>getMLText('settings_SaveError')));
+ exit;
+ } else {
+ UI::exitError(getMLText("admin_tools"),getMLText("settings_SaveError"));
+ }
+ }
add_log_line(".php&action=savesettings");
}
-$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_settings_saved')));
-
-
-header("Location:../out/out.Settings.php?currenttab=".$_POST['currenttab']);
-
-?>
+if(isAjax()) {
+ echo json_encode(array('success'=>true, 'msg'=>getMLText('splash_settings_saved')));
+} else {
+ $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_settings_saved')));
+ header("Location:../out/out.Settings.php?currenttab=".$_POST['currenttab']);
+}
diff --git a/op/op.TransferDocument.php b/op/op.TransferDocument.php
index e00afdd5f..986272011 100644
--- a/op/op.TransferDocument.php
+++ b/op/op.TransferDocument.php
@@ -80,6 +80,3 @@ $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_transfe
add_log_line("?documentid=".$documentid);
header("Location:../out/out.ViewFolder.php?folderid=".$folder->getID());
-
-?>
-
diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php
index a1a798f38..6b0d84dfc 100644
--- a/op/op.UpdateDocument.php
+++ b/op/op.UpdateDocument.php
@@ -346,10 +346,38 @@ default:
$attributes = $_POST["attributes_version"];
foreach($attributes as $attrdefid=>$attribute) {
$attrdef = $dms->getAttributeDefinition($attrdefid);
+ if(null === ($ret = $controller->callHook('validateAttribute', $attrdef, $attribute))) {
if($attribute) {
switch($attrdef->getType()) {
case SeedDMS_Core_AttributeDefinition::type_date:
- $attribute = date('Y-m-d', makeTsFromDate($attribute));
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): string => date('Y-m-d', makeTsFromDate($value)), $attribute);
+ else
+ $attribute = date('Y-m-d', makeTsFromDate($attribute));
+ break;
+ case SeedDMS_Core_AttributeDefinition::type_folder:
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): object => $dms->getFolder((int) $value), $attribute);
+ else
+ $attribute = $dms->getFolder((int) $attribute);
+ break;
+ case SeedDMS_Core_AttributeDefinition::type_document:
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): object => $dms->getDocument((int) $value), $attribute);
+ else
+ $attribute = $dms->getDocument((int) $attribute);
+ break;
+ case SeedDMS_Core_AttributeDefinition::type_user:
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): object => $dms->getUser((int) $value), $attribute);
+ else
+ $attribute = $dms->getUser((int) $attribute);
+ break;
+ case SeedDMS_Core_AttributeDefinition::type_group:
+ if(is_array($attribute))
+ $attribute = array_map(fn($value): object => $dms->getGroup((int) $value), $attribute);
+ else
+ $attribute = $dms->getGroup((int) $attribute);
break;
}
if(!$attrdef->validate($attribute, null, true)) {
@@ -359,6 +387,10 @@ default:
} elseif($attrdef->getMinValues() > 0) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("attr_min_values", array("attrname"=>$attrdef->getName())));
}
+ } else {
+ if($ret === false)
+ return false;
+ }
}
} else {
$attributes = array();
@@ -403,6 +435,15 @@ default:
$notifier->sendNewDocumentVersionMail($document, $user);
$notifier->sendChangedExpiryMail($document, $user, $oldexpires);
+
+ $status = $content->getStatus();
+ if ($status["status"] == S_RELEASED) {
+ if ($settings->_enableNotificationAppRev) {
+ if ($notifier) {
+ $notifier->sendToAllReceiptMail($content, $user);
+ }
+ }
+ }
}
if($settings->_removeFromDropFolder) {
diff --git a/out/out.AttributeMgr.php b/out/out.AttributeMgr.php
index 4c8208c23..76c46b501 100644
--- a/out/out.AttributeMgr.php
+++ b/out/out.AttributeMgr.php
@@ -57,6 +57,8 @@ if($view) {
$view->setParam('enableRecursiveCount', $settings->_enableRecursiveCount);
$view->setParam('maxRecursiveCount', $settings->_maxRecursiveCount);
$view->setParam('previewWidthList', $settings->_previewWidthList);
+ $view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array());
+ $view->setParam('convertToPdf', $settings->_convertToPdf);
$view->setParam('timeout', $settings->_cmdTimeout);
$view->setParam('accessobject', $accessop);
$view->setParam('xsendfile', $settings->_enableXsendfile);
diff --git a/out/out.Charts.php b/out/out.Charts.php
index d6d5c93fd..1ada5c8c0 100644
--- a/out/out.Charts.php
+++ b/out/out.Charts.php
@@ -53,6 +53,7 @@ if ($view) {
$view->setParam('type', $type);
$view->setParam('data', $data);
$view->setParam('accessobject', $accessop);
+ $view->setParam('quota', $settings->_quota);
$view($_GET);
exit;
}
diff --git a/out/out.Dashboard.php b/out/out.Dashboard.php
index 46db57143..5a25caaf7 100644
--- a/out/out.Dashboard.php
+++ b/out/out.Dashboard.php
@@ -25,6 +25,7 @@ if($view) {
$view->setParam('convertToPdf', $settings->_convertToPdf);
$view->setParam('timeout', $settings->_cmdTimeout);
$view->setParam('dayspastdashboard', (int) $settings->_daysPastDashboard);
+ $view->setParam('excludedfolders', $settings->_excludeFoldersDashboard);
$view->setParam('accessobject', $accessop);
$view->setParam('xsendfile', $settings->_enableXsendfile);
$view($_GET);
diff --git a/out/out.ExpiredDocuments.php b/out/out.ExpiredDocuments.php
index 16eb7df67..9b099001e 100644
--- a/out/out.ExpiredDocuments.php
+++ b/out/out.ExpiredDocuments.php
@@ -49,6 +49,7 @@ if (isset($_GET["orderdir"]) && strlen($_GET["orderdir"])==1 ) {
$days = null;
$startts = null;
$endts = null;
+$seluser = null;
if(isset($_GET['days']) && is_numeric($_GET['days'])) {
$days = (int) $_GET['days'];
} else {
@@ -59,6 +60,9 @@ if(isset($_GET['days']) && is_numeric($_GET['days'])) {
$endts = makeTsFromDate($_GET['enddate']);
}
}
+if(isset($_GET['seluserid'])) {
+ $seluser = $dms->getUser((int) $_GET['seluserid']);
+}
if($view) {
$view->setParam('conversionmgr', $conversionmgr);
@@ -68,6 +72,7 @@ if($view) {
$view->setParam('days', $days);
$view->setParam('startts', $startts);
$view->setParam('endts', $endts);
+ $view->setParam('seluser', $seluser);
$view->setParam('cachedir', $settings->_cacheDir);
$view->setParam('previewWidthList', $settings->_previewWidthList);
$view->setParam('timeout', $settings->_cmdTimeout);
diff --git a/out/out.ReviewSummary.php b/out/out.ReviewSummary.php
index 9d2950c50..bb719a768 100644
--- a/out/out.ReviewSummary.php
+++ b/out/out.ReviewSummary.php
@@ -31,7 +31,7 @@
*/
if (!isset($settings)) {
- require_once "../inc/inc.Settings.php");
+ require_once "../inc/inc.Settings.php";
}
require_once "inc/inc.Utils.php";
require_once "inc/inc.LogInit.php";
diff --git a/out/out.Search.php b/out/out.Search.php
index 0cd77d167..b07553d1a 100644
--- a/out/out.Search.php
+++ b/out/out.Search.php
@@ -29,51 +29,57 @@ require_once("inc/inc.DBInit.php");
require_once("inc/inc.ClassUI.php");
require_once("inc/inc.Authentication.php");
-function getTime() {
+function getTime() { /* {{{ */
if (function_exists('microtime')) {
$tm = microtime();
$tm = explode(' ', $tm);
return (float) sprintf('%f', $tm[1] + $tm[0]);
}
return time();
-}
+} /* }}} */
+
+$get = $_GET;
// Redirect to the search page if the navigation search button has been
// selected without supplying any search terms.
-if (isset($_GET["navBar"])) {
- if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) {
+if (isset($get["navBar"])) {
+ if (!isset($get["folderid"]) || !is_numeric($get["folderid"]) || intval($get["folderid"])<1) {
$folderid=$settings->_rootFolderID;
} else {
- $folderid = $_GET["folderid"];
+ $folderid = $get["folderid"];
}
}
$includecontent = false;
-if (isset($_GET["includecontent"]) && $_GET["includecontent"])
+if (isset($get["includecontent"]) && $get["includecontent"])
$includecontent = true;
+$skipdefaultcols = false;
+if (isset($get["skipdefaultcols"]) && $get["skipdefaultcols"])
+ $skipdefaultcols = true;
+
$newowner = null;
-if (isset($_GET["newowner"]) && is_numeric($_GET["newowner"]) && $_GET['newowner'] > 0) {
- $newowner = $dms->getUser((int) $_GET['newowner']);
+if (isset($get["newowner"]) && is_numeric($get["newowner"]) && $get['newowner'] > 0) {
+ $newowner = $dms->getUser((int) $get['newowner']);
}
$newreviewer = null;
-if (isset($_GET["newreviewer"]) && is_numeric($_GET["newreviewer"]) && $_GET['newreviewer'] > 0) {
- $newreviewer = $dms->getUser((int) $_GET['newreviewer']);
+if (isset($get["newreviewer"]) && is_numeric($get["newreviewer"]) && $get['newreviewer'] > 0) {
+ $newreviewer = $dms->getUser((int) $get['newreviewer']);
}
$newapprover = null;
-if (isset($_GET["newapprover"]) && is_numeric($_GET["newapprover"]) && $_GET['newapprover'] > 0) {
- $newapprover = $dms->getUser((int) $_GET['newapprover']);
+if (isset($get["newapprover"]) && is_numeric($get["newapprover"]) && $get['newapprover'] > 0) {
+ $newapprover = $dms->getUser((int) $get['newapprover']);
}
$changecategory = null;
-if (isset($_GET["changecategory"]) && is_numeric($_GET["changecategory"]) && $_GET['changecategory'] > 0) {
- $changecategory = $dms->getDocumentCategory((int) $_GET['changecategory']);
+if (isset($get["changecategory"]) && is_numeric($get["changecategory"]) && $get['changecategory'] > 0) {
+ $changecategory = $dms->getDocumentCategory((int) $get['changecategory']);
}
$removecategory = 0;
-if (isset($_GET["removecategory"]) && is_numeric($_GET["removecategory"]) && $_GET['removecategory'] > 0) {
- $removecategory = (int) $_GET['removecategory'];
+if (isset($get["removecategory"]) && is_numeric($get["removecategory"]) && $get['removecategory'] > 0) {
+ $removecategory = (int) $get['removecategory'];
}
/* Creation date {{{ */
@@ -83,16 +89,16 @@ $createendts = null;
$createenddate = null;
$created['from'] = null;
$created['to'] = null;
-if(!empty($_GET["created"]["from"])) {
- $createstartts = makeTsFromDate($_GET["created"]["from"]);
+if(!empty($get["created"]["from"])) {
+ $createstartts = makeTsFromDate($get["created"]["from"]);
$createstartdate = array('year'=>(int)date('Y', $createstartts), 'month'=>(int)date('m', $createstartts), 'day'=>(int)date('d', $createstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
if (!checkdate($createstartdate['month'], $createstartdate['day'], $createstartdate['year'])) {
UI::exitError(getMLText("search"),getMLText("invalid_create_date_end"));
}
$created['from'] = $createstartts;
}
-if(!empty($_GET["created"]["to"])) {
- $createendts = makeTsFromDate($_GET["created"]["to"]);
+if(!empty($get["created"]["to"])) {
+ $createendts = makeTsFromDate($get["created"]["to"]);
$createenddate = array('year'=>(int)date('Y', $createendts), 'month'=>(int)date('m', $createendts), 'day'=>(int)date('d', $createendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
if (!checkdate($createenddate['month'], $createenddate['day'], $createenddate['year'])) {
UI::exitError(getMLText("search"),getMLText("invalid_create_date_end"));
@@ -108,16 +114,16 @@ $modifyendts = null;
$modifyenddate = null;
$modified['from'] = null;
$modified['to'] = null;
-if(!empty($_GET["modified"]["from"])) {
- $modifystartts = makeTsFromDate($_GET["modified"]["from"]);
+if(!empty($get["modified"]["from"])) {
+ $modifystartts = makeTsFromDate($get["modified"]["from"]);
$modifystartdate = array('year'=>(int)date('Y', $modifystartts), 'month'=>(int)date('m', $modifystartts), 'day'=>(int)date('d', $modifystartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
if (!checkdate($modifystartdate['month'], $modifystartdate['day'], $modifystartdate['year'])) {
UI::exitError(getMLText("search"),getMLText("invalid_modification_date_end"));
}
$modified['from'] = $modifystartts;
}
-if(!empty($_GET["modified"]["to"])) {
- $modifyendts = makeTsFromDate($_GET["modified"]["to"]);
+if(!empty($get["modified"]["to"])) {
+ $modifyendts = makeTsFromDate($get["modified"]["to"]);
$modifyenddate = array('year'=>(int)date('Y', $modifyendts), 'month'=>(int)date('m', $modifyendts), 'day'=>(int)date('d', $modifyendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
if (!checkdate($modifyenddate['month'], $modifyenddate['day'], $modifyenddate['year'])) {
UI::exitError(getMLText("search"),getMLText("invalid_modification_date_end"));
@@ -131,35 +137,35 @@ $filesizestart = 0;
$filesizeend = 0;
$filesize['from'] = null;
$filesize['to'] = null;
-if(!empty($_GET["filesize"]["from"])) {
- $filesizestart = $_GET["filesize"]["from"];
- $filesize['from'] = $_GET["filesize"]["from"];
+if(!empty($get["filesize"]["from"])) {
+ $filesizestart = $get["filesize"]["from"];
+ $filesize['from'] = $get["filesize"]["from"];
}
-if(!empty($_GET["filesize"]["to"])) {
- $filesizeend = $_GET["filesize"]["to"];
- $filesize['to'] = $_GET["filesize"]["to"];
+if(!empty($get["filesize"]["to"])) {
+ $filesizeend = $get["filesize"]["to"];
+ $filesize['to'] = $get["filesize"]["to"];
}
/* }}} */
// Check to see if the search has been restricted to a particular
// document owner.
-// $_GET['owner'] can be a name of an array of names or ids {{{
+// $get['owner'] can be a name of an array of names or ids {{{
$owner = [];
$ownernames = []; // Needed by fulltext search
$ownerobjs = []; // Needed by database search
-if(!empty($_GET["owner"])) {
- $owner = $_GET['owner'];
- if (!is_array($_GET['owner'])) {
- if(is_numeric($_GET['owner']))
- $o = $dms->getUser($_GET['owner']);
+if(!empty($get["owner"])) {
+ $owner = $get['owner'];
+ if (!is_array($get['owner'])) {
+ if(is_numeric($get['owner']))
+ $o = $dms->getUser($get['owner']);
else
- $o = $dms->getUserByLogin($_GET['owner']);
+ $o = $dms->getUserByLogin($get['owner']);
if($o) {
$ownernames[] = $o->getLogin();
$ownerobjs[] = $o;
}
} else {
- foreach($_GET["owner"] as $l) {
+ foreach($get["owner"] as $l) {
if($l) {
if(is_numeric($l))
$o = $dms->getUser($l);
@@ -174,121 +180,89 @@ if(!empty($_GET["owner"])) {
}
} /* }}} */
- // category {{{
- $categories = array();
- $categorynames = array();
- $category = array();
- if(isset($_GET['category']) && $_GET['category']) {
- $category = $_GET['category'];
- foreach($_GET['category'] as $catid) {
- if($catid) {
- if(is_numeric($catid)) {
- if($cat = $dms->getDocumentCategory($catid)) {
- $categories[] = $cat;
- $categorynames[] = $cat->getName();
- }
- } else {
- $categorynames[] = $catid;
+// category {{{
+$categories = array();
+$categorynames = array();
+$category = array();
+if(isset($get['category']) && $get['category']) {
+ $category = $get['category'];
+ foreach($get['category'] as $catid) {
+ if($catid) {
+ if(is_numeric($catid)) {
+ if($cat = $dms->getDocumentCategory($catid)) {
+ $categories[] = $cat;
+ $categorynames[] = $cat->getName();
}
+ } else {
+ $categorynames[] = $catid;
}
}
- } /* }}} */
+ }
+} /* }}} */
- if (isset($_GET["orderby"]) && is_string($_GET["orderby"])) {
- $orderby = $_GET["orderby"];
- }
- else {
- $orderby = "";
- }
+if (isset($get["orderby"]) && is_string($get["orderby"])) {
+ $orderby = $get["orderby"];
+} else {
+ $orderby = "";
+}
$terms = [];
-$limit = (isset($_GET["limit"]) && is_numeric($_GET["limit"])) ? (int) $_GET['limit'] : 20;
-$fullsearch = ((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext') || !empty($_GET["fullsearch"])) && $settings->_enableFullSearch;
-$facetsearch = !empty($_GET["facetsearch"]) && $settings->_enableFullSearch;
+$limit = (isset($get["limit"]) && is_numeric($get["limit"])) ? (int) $get['limit'] : 20;
+$fullsearch = ((!isset($get["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext') || !empty($get["fullsearch"])) && $settings->_enableFullSearch;
+$facetsearch = !empty($get["facetsearch"]) && $settings->_enableFullSearch;
+
+if (isset($get["query"]) && is_string($get["query"])) {
+ $query = $get["query"];
+} else {
+ $query = "";
+}
+
+// Check to see if the search has been restricted to a particular
+// mimetype. {{{
+$mimetype = [];
+if (isset($get["mimetype"])) {
+ if (!is_array($get['mimetype'])) {
+ if(!empty($get['mimetype']))
+ $mimetype[] = $get['mimetype'];
+ } else {
+ foreach($get["mimetype"] as $l) {
+ if($l)
+ $mimetype[] = $l;
+ }
+ }
+} /* }}} */
+
+// status
+$status = isset($get['status']) ? $get['status'] : array();
+
+// Get the page number to display. If the result set contains more than
+// 25 entries, it is displayed across multiple pages.
+//
+// This requires that a page number variable be used to track which page the
+// user is interested in, and an extra clause on the select statement.
+//
+// Default page to display is always one.
+$pageNumber=1;
+if (isset($get["pg"])) {
+ if (is_numeric($get["pg"]) && $get["pg"]>0) {
+ $pageNumber = (int) $get["pg"];
+ }
+ elseif (!strcasecmp($get["pg"], "all")) {
+ $pageNumber = "all";
+ }
+}
+
if($fullsearch) {
-// Search in Fulltext {{{
- if (isset($_GET["query"]) && is_string($_GET["query"])) {
- $query = $_GET["query"];
-// if(isset($_GET['action']) && ($_GET['action'] == 'typeahead'))
-// $query .= '*';
- }
- else {
- $query = "";
- }
-
- //
- // Get the page number to display. If the result set contains more than
- // 25 entries, it is displayed across multiple pages.
- //
- // This requires that a page number variable be used to track which page the
- // user is interested in, and an extra clause on the select statement.
- //
- // Default page to display is always one.
- $pageNumber=1;
- if (isset($_GET["pg"])) {
- if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) {
- $pageNumber = (integer)$_GET["pg"];
- }
- elseif (!strcasecmp($_GET["pg"], "all")) {
- $pageNumber = "all";
- }
- }
-
- // --------------- Suche starten --------------------------------------------
-
- // Check to see if the search has been restricted to a particular
- // mimetype. {{{
- $mimetype = [];
- if (isset($_GET["mimetype"])) {
- if (!is_array($_GET['mimetype'])) {
- if(!empty($_GET['mimetype']))
- $mimetype[] = $_GET['mimetype'];
- } else {
- foreach($_GET["mimetype"] as $l) {
- if($l)
- $mimetype[] = $l;
- }
- }
- } /* }}} */
-
- /* Creation date {{{
- $createstartts = null;
- $createstartdate = null;
- $createendts = null;
- $createenddate = null;
- $created = [];
- if(!empty($_GET["created"]["from"])) {
- $createstartts = makeTsFromDate($_GET["created"]["from"]);
- $createstartdate = array('year'=>(int)date('Y', $createstartts), 'month'=>(int)date('m', $createstartts), 'day'=>(int)date('d', $createstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
- if (!checkdate($createstartdate['month'], $createstartdate['day'], $createstartdate['year'])) {
- UI::exitError(getMLText("search"),getMLText("invalid_create_date_end"));
- }
- $created['from'] = $createstartts;
- }
- if(!empty($_GET["created"]["to"])) {
- $createendts = makeTsFromDate($_GET["created"]["to"]);
- $createenddate = array('year'=>(int)date('Y', $createendts), 'month'=>(int)date('m', $createendts), 'day'=>(int)date('d', $createendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
- if (!checkdate($createenddate['month'], $createenddate['day'], $createenddate['year'])) {
- UI::exitError(getMLText("search"),getMLText("invalid_create_date_end"));
- }
- $created['to'] = $createendts;
- }
- }}} */
-
- // status
- if(isset($_GET['status']))
- $status = $_GET['status'];
- else
- $status = array();
+ // Search in Fulltext {{{
// record_type
- if(isset($_GET['record_type']))
- $record_type = $_GET['record_type'];
+ if(isset($get['record_type']))
+ $record_type = $get['record_type'];
else
$record_type = array();
- if (isset($_GET["attributes"]))
- $attributes = $_GET["attributes"];
+ if (isset($get["attributes"]))
+ $attributes = $get["attributes"];
else
$attributes = array();
@@ -340,8 +314,8 @@ if($fullsearch) {
// Check to see if the search has been restricted to a particular sub-tree in
// the folder hierarchy.
$startFolder = null;
- if (isset($_GET["folderfullsearchid"]) && is_numeric($_GET["folderfullsearchid"]) && $_GET["folderfullsearchid"]>0) {
- $targetid = $_GET["folderfullsearchid"];
+ if (isset($get["folderfullsearchid"]) && is_numeric($get["folderfullsearchid"]) && $get["folderfullsearchid"]>0) {
+ $targetid = $get["folderfullsearchid"];
$startFolder = $dms->getFolder($targetid);
if (!is_object($startFolder)) {
UI::exitError(getMLText("search"),getMLText("invalid_folder_id"));
@@ -350,7 +324,6 @@ if($fullsearch) {
$rootFolder = $dms->getFolder($settings->_rootFolderID);
- $startTime = getTime();
if($settings->_fullSearchEngine == 'lucene') {
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');
}
@@ -358,6 +331,7 @@ if($fullsearch) {
if(strlen($query) < 4 && strpos($query, '*')) {
$session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('splash_invalid_searchterm')));
$dcount = 0;
+ $fcount = 0;
$totalPages = 0;
$entries = array();
$searchTime = 0;
@@ -367,13 +341,30 @@ if($fullsearch) {
$total = 0;
$index = $fulltextservice->Indexer();
if($index) {
- if(!empty($settings->_suggestTerms) && !empty($_GET['query'])) {
- $st = preg_split("/[\s,]+/", trim($_GET['query']));
+ if(!empty($settings->_suggestTerms) && !empty($get['query'])) {
+ $st = preg_split("/[\s,]+/", trim($get['query']));
if($lastterm = end($st))
$terms = $index->terms($lastterm, $settings->_suggestTerms);
}
$lucenesearch = $fulltextservice->Search();
- $searchresult = $lucenesearch->search($query, array('record_type'=>$record_type, 'owner'=>$ownernames, 'status'=>$status, 'category'=>$categorynames, 'user'=>$user->isAdmin() ? [] : [$user->getLogin()], 'mimetype'=>$mimetype, 'startFolder'=>$startFolder, 'rootFolder'=>$rootFolder, 'created_start'=>$createstartts, 'created_end'=>$createendts, 'modified_start'=>$modifystartts, 'modified_end'=>$modifyendts, 'filesize_start'=>$filesizestart, 'filesize_end'=>$filesizeend, 'attributes'=>$attributes), ($pageNumber == 'all' ? array() : array('limit'=>$limit, 'offset'=>$limit * ($pageNumber-1))), $order);
+ $searchresult = $lucenesearch->search($query,
+ array(
+ 'record_type'=>$record_type,
+ 'owner'=>$ownernames,
+ 'status'=>$status,
+ 'category'=>$categorynames,
+ 'user'=>$user->isAdmin() ? [] : [$user->getLogin()],
+ 'mimetype'=>$mimetype,
+ 'startFolder'=>$startFolder,
+ 'rootFolder'=>$rootFolder,
+ 'created_start'=>$created['from'],
+ 'created_end'=>$created['to'],
+ 'modified_start'=>$modified['from'],
+ 'modified_end'=>$modified['to'],
+ 'filesize_start'=>$filesize['from'],
+ 'filesize_end'=>$filesize['to'],
+ 'attributes'=>$attributes
+ ), ($pageNumber == 'all' ? array() : array('limit'=>$limit, 'offset'=>$limit * ($pageNumber-1))), $order);
if($searchresult === false) {
$session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('splash_invalid_searchterm')));
$dcount = 0;
@@ -441,29 +432,23 @@ if($fullsearch) {
// }}}
} else {
// Search in Database {{{
- if (isset($_GET["query"]) && is_string($_GET["query"])) {
- $query = $_GET["query"];
- }
- else {
- $query = "";
- }
/* Select if only documents (0x01), only folders (0x02) or both (0x03)
* are found
*/
$resultmode = 0x03;
- if (isset($_GET["resultmode"]) && is_numeric($_GET["resultmode"])) {
- $resultmode = $_GET['resultmode'];
+ if (isset($get["resultmode"]) && is_numeric($get["resultmode"])) {
+ $resultmode = $get['resultmode'];
}
$mode = "AND";
- if (isset($_GET["mode"]) && is_numeric($_GET["mode"]) && $_GET["mode"]==0) {
+ if (isset($get["mode"]) && is_numeric($get["mode"]) && $get["mode"]==0) {
$mode = "OR";
}
$searchin = array();
- if (isset($_GET['searchin']) && is_array($_GET["searchin"])) {
- foreach ($_GET["searchin"] as $si) {
+ if (isset($get['searchin']) && is_array($get["searchin"])) {
+ foreach ($get["searchin"] as $si) {
if (isset($si) && is_numeric($si)) {
switch ($si) {
case 1: // keywords
@@ -483,8 +468,8 @@ if($fullsearch) {
// Check to see if the search has been restricted to a particular sub-tree in
// the folder hierarchy.
- if (isset($_GET["targetid"]) && is_numeric($_GET["targetid"]) && $_GET["targetid"]>0) {
- $targetid = $_GET["targetid"];
+ if (isset($get["targetid"]) && is_numeric($get["targetid"]) && $get["targetid"]>0) {
+ $targetid = $get["targetid"];
$startFolder = $dms->getFolder($targetid);
}
else {
@@ -494,76 +479,43 @@ if($fullsearch) {
UI::exitError(getMLText("search"),getMLText("invalid_folder_id"));
}
- // Check to see if the search has been restricted to a particular
- /* document owner. {{{
- $owner = array();
- $ownerobjs = array();
- if (isset($_GET["owner"])) {
- $owner = $_GET['owner'];
- if (!is_array($_GET['owner'])) {
- if(!empty($_GET['owner']) && $o = $dms->getUser($_GET['owner'])) {
- $ownerobjs[] = $o;
- } else
- UI::exitError(getMLText("search"),getMLText("unknown_owner"));
- } else {
- foreach($_GET["owner"] as $l) {
- if($o = $dms->getUser($l)) {
- $ownerobjs[] = $o;
- }
- }
- }
- } }}} */
-
- /* Creation date {{{
- $createstartdate = array();
- $createenddate = array();
- if(!empty($_GET["createstart"])) {
- $createstartts = makeTsFromDate($_GET["createstart"]);
- $createstartdate = array('year'=>(int)date('Y', $createstartts), 'month'=>(int)date('m', $createstartts), 'day'=>(int)date('d', $createstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
- }
- if ($createstartdate && !checkdate($createstartdate['month'], $createstartdate['day'], $createstartdate['year'])) {
- UI::exitError(getMLText("search"),getMLText("invalid_create_date_end"));
- }
- if(!empty($_GET["createend"])) {
- $createendts = makeTsFromDate($_GET["createend"]);
- $createenddate = array('year'=>(int)date('Y', $createendts), 'month'=>(int)date('m', $createendts), 'day'=>(int)date('d', $createendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
- }
- if ($createenddate && !checkdate($createenddate['month'], $createenddate['day'], $createenddate['year'])) {
- UI::exitError(getMLText("search"),getMLText("invalid_create_date_end"));
- }
- }}} */
-
/* Revision date {{{ */
+ $revisionstartts = null;
$revisionstartdate = array();
+ $revisionendts = null;
$revisionenddate = array();
- if(!empty($_GET["revisiondatestart"])) {
- $revisionstartts = makeTsFromDate($_GET["revisiondatestart"]);
+ $revised['from'] = null;
+ $revised['to'] = null;
+ if(!empty($get["revisiondatestart"])) {
+ $revisionstartts = makeTsFromDate($get["revisiondatestart"]);
$revisionstartdate = array('year'=>(int)date('Y', $revisionstartts), 'month'=>(int)date('m', $revisionstartts), 'day'=>(int)date('d', $revisionstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
if (!checkdate($revisionstartdate['month'], $revisionstartdate['day'], $revisionstartdate['year'])) {
UI::exitError(getMLText("search"),getMLText("invalid_revision_date_start"));
}
+ $revised['from'] = $revisionstartts;
}
- if(!empty($_GET["revisiondateend"])) {
- $revisionendts = makeTsFromDate($_GET["revisiondateend"]);
+ if(!empty($get["revisiondateend"])) {
+ $revisionendts = makeTsFromDate($get["revisiondateend"]);
$revisionenddate = array('year'=>(int)date('Y', $revisionendts), 'month'=>(int)date('m', $revisionendts), 'day'=>(int)date('d', $revisionendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
if (!checkdate($revisionenddate['month'], $revisionenddate['day'], $revisionenddate['year'])) {
UI::exitError(getMLText("search"),getMLText("invalid_revision_date_end"));
}
+ $revised['to'] = $revisionendts;
}
/* }}} */
/* Status date {{{ */
$statusstartdate = array();
$statusenddate = array();
- if(!empty($_GET["statusdatestart"])) {
- $statusstartts = makeTsFromDate($_GET["statusdatestart"]);
+ if(!empty($get["statusdatestart"])) {
+ $statusstartts = makeTsFromDate($get["statusdatestart"]);
$statusstartdate = array('year'=>(int)date('Y', $statusstartts), 'month'=>(int)date('m', $statusstartts), 'day'=>(int)date('d', $statusstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
}
if ($statusstartdate && !checkdate($statusstartdate['month'], $statusstartdate['day'], $statusstartdate['year'])) {
UI::exitError(getMLText("search"),getMLText("invalid_status_date_start"));
}
- if(!empty($_GET["statusdateend"])) {
- $statusendts = makeTsFromDate($_GET["statusdateend"]);
+ if(!empty($get["statusdateend"])) {
+ $statusendts = makeTsFromDate($get["statusdateend"]);
$statusenddate = array('year'=>(int)date('Y', $statusendts), 'month'=>(int)date('m', $statusendts), 'day'=>(int)date('d', $statusendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
}
if ($statusenddate && !checkdate($statusenddate['month'], $statusenddate['day'], $statusenddate['year'])) {
@@ -574,15 +526,15 @@ if($fullsearch) {
/* Expiration date {{{ */
$expstartdate = array();
$expenddate = array();
- if(!empty($_GET["expirationstart"])) {
- $expstartts = makeTsFromDate($_GET["expirationstart"]);
+ if(!empty($get["expirationstart"])) {
+ $expstartts = makeTsFromDate($get["expirationstart"]);
$expstartdate = array('year'=>(int)date('Y', $expstartts), 'month'=>(int)date('m', $expstartts), 'day'=>(int)date('d', $expstartts), 'hour'=>0, 'minute'=>0, 'second'=>0);
if (!checkdate($expstartdate['month'], $expstartdate['day'], $expstartdate['year'])) {
UI::exitError(getMLText("search"),getMLText("invalid_expiration_date_start"));
}
}
- if(!empty($_GET["expirationend"])) {
- $expendts = makeTsFromDate($_GET["expirationend"]);
+ if(!empty($get["expirationend"])) {
+ $expendts = makeTsFromDate($get["expirationend"]);
$expenddate = array('year'=>(int)date('Y', $expendts), 'month'=>(int)date('m', $expendts), 'day'=>(int)date('d', $expendts), 'hour'=>23, 'minute'=>59, 'second'=>59);
if (!checkdate($expenddate['month'], $expenddate['day'], $expenddate['year'])) {
UI::exitError(getMLText("search"),getMLText("invalid_expiration_date_end"));
@@ -590,45 +542,9 @@ if($fullsearch) {
}
/* }}} */
- // status
- $status = isset($_GET['status']) ? $_GET['status'] : array();
- /*
- $status = array();
- if (isset($_GET["draft"])){
- $status[] = S_DRAFT;
- }
- if (isset($_GET["pendingReview"])){
- $status[] = S_DRAFT_REV;
- }
- if (isset($_GET["pendingApproval"])){
- $status[] = S_DRAFT_APP;
- }
- if (isset($_GET["inWorkflow"])){
- $status[] = S_IN_WORKFLOW;
- }
- if (isset($_GET["released"])){
- $status[] = S_RELEASED;
- }
- if (isset($_GET["rejected"])){
- $status[] = S_REJECTED;
- }
- if (isset($_GET["inrevision"])){
- $status[] = S_IN_REVISION;
- }
- if (isset($_GET["obsolete"])){
- $status[] = S_OBSOLETE;
- }
- if (isset($_GET["expired"])){
- $status[] = S_EXPIRED;
- }
- if (isset($_GET["needs_correction"])){
- $status[] = S_NEEDS_CORRECTION;
- }
- */
-
$reception = array();
- if (isset($_GET["reception"])){
- $reception = $_GET["reception"];
+ if (isset($get["reception"])){
+ $reception = $get["reception"];
}
/* Do not search for folders if result shall be filtered by status.
@@ -640,8 +556,8 @@ if($fullsearch) {
// if($status)
// $resultmode = 0x01;
- if (isset($_GET["attributes"]))
- $attributes = $_GET["attributes"];
+ if (isset($get["attributes"]))
+ $attributes = $get["attributes"];
else
$attributes = array();
@@ -661,38 +577,20 @@ if($fullsearch) {
}
}
- //
- // Get the page number to display. If the result set contains more than
- // 25 entries, it is displayed across multiple pages.
- //
- // This requires that a page number variable be used to track which page the
- // user is interested in, and an extra clause on the select statement.
- //
- // Default page to display is always one.
- $pageNumber=1;
-// $limit = 15;
- if (isset($_GET["pg"])) {
- if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) {
- $pageNumber = (int) $_GET["pg"];
- }
- elseif (!strcasecmp($_GET["pg"], "all")) {
- $pageNumber = "all";
- }
- }
-
// ---------------- Start searching -----------------------------------------
$startTime = getTime();
$resArr = $dms->search(array(
'query'=>$query,
'limit'=>0,
- 'offset'=>0 /*$limit, ($pageNumber-1)*$limit*/,
+ 'offset'=>0,
'logicalmode'=>$mode,
'searchin'=>$searchin,
'startFolder'=>$startFolder,
'owner'=>$ownerobjs,
'status'=>$status,
- 'creationstartdate'=>$created['from'], //$createstartdate ? $createstartdate : array(),
- 'creationenddate'=>$created['to'], //$createenddate ? $createenddate : array(),
+ 'mimetype'=>$mimetype,
+ 'creationstartdate'=>$created['from'],
+ 'creationenddate'=>$created['to'],
'modificationstartdate'=>$modified['from'],
'modificationenddate'=>$modified['to'],
'filesizestart'=>$filesize['from'],
@@ -715,7 +613,7 @@ if($fullsearch) {
$entries = array();
$fcount = 0;
- if(!isset($_GET['action']) || $_GET['action'] != 'export') {
+// if(!isset($get['action']) || $get['action'] != 'export') {
if($resArr['folders']) {
foreach ($resArr['folders'] as $entry) {
if ($entry->getAccessMode($user) >= M_READ) {
@@ -724,7 +622,7 @@ if($fullsearch) {
}
}
}
- }
+// }
$dcount = 0;
if($resArr['docs']) {
foreach ($resArr['docs'] as $entry) {
@@ -738,7 +636,7 @@ if($fullsearch) {
}
}
$totalPages = 1;
- if ((!isset($_GET['action']) || $_GET['action'] != 'export') /*&& (!isset($_GET["pg"]) || strcasecmp($_GET["pg"], "all"))*/) {
+ if ((!isset($get['action']) || $get['action'] != 'export') /*&& (!isset($get["pg"]) || strcasecmp($get["pg"], "all"))*/) {
$totalPages = (int) (count($entries)/$limit);
if(count($entries)%$limit)
$totalPages++;
@@ -772,7 +670,8 @@ if($settings->_showSingleSearchHit && count($entries) == 1) {
$view->setParam('accessobject', $accessop);
$view->setParam('query', $query);
$view->setParam('includecontent', $includecontent);
- $view->setParam('marks', isset($_GET['marks']) ? $_GET['marks'] : array());
+ $view->setParam('skipdefaultcols', $skipdefaultcols);
+ $view->setParam('marks', isset($get['marks']) ? $get['marks'] : array());
$view->setParam('newowner', $newowner);
$view->setParam('newreviewer', $newreviewer);
$view->setParam('newapprover', $newapprover);
@@ -784,7 +683,7 @@ if($settings->_showSingleSearchHit && count($entries) == 1) {
$view->setParam('pagenumber', $pageNumber);
$view->setParam('limit', $limit);
$view->setParam('searchtime', $searchTime);
- $view->setParam('urlparams', $_GET);
+ $view->setParam('urlparams', $get);
$view->setParam('cachedir', $settings->_cacheDir);
$view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax
$view->setParam('showtree', showtree());
@@ -797,21 +696,21 @@ if($settings->_showSingleSearchHit && count($entries) == 1) {
$view->setParam('facetsearch', $facetsearch);
$view->setParam('mode', isset($mode) ? $mode : '');
$view->setParam('orderby', isset($orderby) ? $orderby : '');
- $view->setParam('defaultsearchmethod', !empty($_GET["fullsearch"]) || $settings->_defaultSearchMethod);
+ $view->setParam('defaultsearchmethod', !empty($get["fullsearch"]) || $settings->_defaultSearchMethod);
$view->setParam('resultmode', isset($resultmode) ? $resultmode : '');
$view->setParam('searchin', isset($searchin) ? $searchin : array());
$view->setParam('startfolder', isset($startFolder) ? $startFolder : null);
$view->setParam('owner', $owner);
- $view->setParam('createstartdate', $createstartts);
- $view->setParam('createenddate', $createendts);
+ $view->setParam('createstartdate', $created['from']);
+ $view->setParam('createenddate', $created['to']);
$view->setParam('created', $created);
$view->setParam('revisionstartdate', !empty($revisionstartdate) ? getReadableDate($revisionstartts) : '');
$view->setParam('revisionenddate', !empty($revisionenddate) ? getReadableDate($revisionendts) : '');
- $view->setParam('modifystartdate', $modifystartts);
- $view->setParam('modifyenddate', $modifyendts);
+ $view->setParam('modifystartdate', $modified['from']);
+ $view->setParam('modifyenddate', $modified['to']);
$view->setParam('modified', $modified);
- $view->setParam('filesizestart', $filesizestart);
- $view->setParam('filesizeend', $filesizeend);
+ $view->setParam('filesizestart', $filesize['from']);
+ $view->setParam('filesizeend', $filesize['to']);
$view->setParam('filesize', $filesize);
$view->setParam('expstartdate', !empty($expstartdate) ? getReadableDate($expstartts) : '');
$view->setParam('expenddate', !empty($expenddate) ? getReadableDate($expendts) : '');
@@ -839,7 +738,7 @@ if($settings->_showSingleSearchHit && count($entries) == 1) {
$view->setParam('xsendfile', $settings->_enableXsendfile);
$view->setParam('reception', $reception);
$view->setParam('showsinglesearchhit', $settings->_showSingleSearchHit);
- $view($_GET);
+ $view($get);
exit;
}
}
diff --git a/out/out.Settings.php b/out/out.Settings.php
index b94732d7a..ff9259865 100644
--- a/out/out.Settings.php
+++ b/out/out.Settings.php
@@ -42,6 +42,7 @@ if($view) {
$view->setParam('settings', $settings);
$view->setParam('extmgr', $extMgr);
$view->setParam('currenttab', (isset($_REQUEST['currenttab']) ? $_REQUEST['currenttab'] : ''));
+ $view->setParam('extname', (isset($_REQUEST['extensionname']) ? $_REQUEST['extensionname'] : ''));
$view->setParam('allusers', $users);
$view->setParam('allgroups', $groups);
$view->setParam('accessobject', $accessop);
diff --git a/out/out.Tasks.php b/out/out.Tasks.php
index 3584c171d..d51e0d1ca 100644
--- a/out/out.Tasks.php
+++ b/out/out.Tasks.php
@@ -40,6 +40,7 @@ if($view) {
$view->setParam('previewWidthList', $settings->_previewWidthList);
$view->setParam('timeout', $settings->_cmdTimeout);
$view->setParam('xsendfile', $settings->_enableXsendfile);
+ $view->setParam('tasksinmenu', []);
$view($_GET);
exit;
}
diff --git a/restapi/.htaccess b/restapi/.htaccess
index 0151827f6..682a4d98a 100644
--- a/restapi/.htaccess
+++ b/restapi/.htaccess
@@ -2,7 +2,10 @@ RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+# Apache module
SetHandler application/x-httpd-php
+# PHP FPM on Debian
+#SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost/"
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET"
diff --git a/restapi/index.php b/restapi/index.php
index e2e324c5a..74075198e 100644
--- a/restapi/index.php
+++ b/restapi/index.php
@@ -5,7 +5,7 @@ require_once("Log.php");
require_once("../inc/inc.Language.php");
require_once("../inc/inc.Utils.php");
-$logger = getLogger('restapi-', PEAR_LOG_DEBUG);
+$logger = getLogger('restapi-', (int) $settings->_logFileRestApiMaxLevel);
require_once("../inc/inc.Init.php");
require_once("../inc/inc.Extension.php");
@@ -18,13 +18,37 @@ require_once("../inc/inc.ClassController.php");
require "vendor/autoload.php";
use Psr\Container\ContainerInterface;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\RequestHandlerInterface;
+use Psr\Http\Server\MiddlewareInterface;
+use DI\ContainerBuilder;
+use Slim\Factory\AppFactory;
-class RestapiController { /* {{{ */
+final class JsonRenderer { /* {{{ */
+ public function json(
+ ResponseInterface $response,
+ array $data = null
+ ): ResponseInterface {
+ $response = $response->withHeader('Content-Type', 'application/json');
+ $response->getBody()->write(
+ (string)json_encode(
+ $data,
+ JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR
+ )
+ );
+ return $response;
+ }
+} /* }}} */
+
+final class SeedDMS_RestapiController { /* {{{ */
protected $container;
+ protected $renderer;
- // constructor receives container instance
- public function __construct(ContainerInterface $container) {
+ // constructor receives container and renderer instance by DI
+ public function __construct(ContainerInterface $container, JsonRenderer $renderer) {
$this->container = $container;
+ $this->renderer = $renderer;
}
protected function __getAttributesData($obj) { /* {{{ */
@@ -56,7 +80,8 @@ class RestapiController { /* {{{ */
'name'=>$document->getName(),
'comment'=>$document->getComment(),
'keywords'=>$document->getKeywords(),
- 'categories'=>$tmp
+ 'categories'=>$tmp,
+ 'owner'=>(int)$document->getOwner()->getId()
);
return $data;
} /* }}} */
@@ -142,6 +167,7 @@ class RestapiController { /* {{{ */
'name'=>$folder->getName(),
'comment'=>$folder->getComment(),
'date'=>date('Y-m-d H:i:s', $folder->getDate()),
+ 'owner'=>(int)$folder->getOwner()->getId()
);
$attributes = $this->__getAttributesData($folder);
if($attributes) {
@@ -169,6 +195,8 @@ class RestapiController { /* {{{ */
'login'=>$u->getLogin(),
'email'=>$u->getEmail(),
'language' => $u->getLanguage(),
+ 'quota' => $u->getQuota(),
+ 'homefolder' => $u->getHomeFolder(),
'theme' => $u->getTheme(),
'role' => $this->__getRoleData($u->getRole()), //array('id'=>(int)$u->getRole()->getId(), 'name'=>$u->getRole()->getName()),
'hidden'=>$u->isHidden() ? true : false,
@@ -223,17 +251,17 @@ class RestapiController { /* {{{ */
} /* }}} */
function doLogin($request, $response) { /* {{{ */
- global $session;
+// global $session;
- $dms = $this->container->dms;
- $settings = $this->container->config;
- $logger = $this->container->logger;
- $authenticator = $this->container->authenticator;
+ $dms = $this->container->get('dms');
+ $settings = $this->container->get('config');
+ $logger = $this->container->get('logger');
+ $authenticator = $this->container->get('authenticator');
$params = $request->getParsedBody();
if(empty($params['user']) || empty($params['pass'])) {
$logger->log("Login without username or password failed", PEAR_LOG_INFO);
- return $response->withJson(array('success'=>false, 'message'=>'No user or password given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No user or password given', 'data'=>''))->withStatus(400);
}
$username = $params['user'];
$password = $params['pass'];
@@ -242,12 +270,12 @@ class RestapiController { /* {{{ */
if(!$userobj) {
setcookie("mydms_session", '', time()-3600, $settings->_httpRoot);
$logger->log("Login with user name '".$username."' failed", PEAR_LOG_ERR);
- return $response->withJson(array('success'=>false, 'message'=>'Login failed', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Login failed', 'data'=>''))->withStatus(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()))) {
- return $response->withJson(array('success'=>false, 'message'=>'Creating session failed', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Creating session failed', 'data'=>''))->withStatus(500);
}
// Set the session cookie.
@@ -259,14 +287,14 @@ class RestapiController { /* {{{ */
$dms->setUser($userobj);
$logger->log("Login with user name '".$username."' successful", PEAR_LOG_INFO);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getUserData($userobj)), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$this->__getUserData($userobj)))->withStatus(200);
}
} /* }}} */
function doLogout($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $settings = $this->container->config;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $settings = $this->container->get('config');
if(isset($_COOKIE['mydms_session'])) {
$dms_session = $_COOKIE["mydms_session"];
@@ -286,42 +314,42 @@ class RestapiController { /* {{{ */
}
setcookie("mydms_session", '', time()-3600, $settings->_httpRoot);
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(200);
} /* }}} */
function setFullName($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
return;
}
$params = $request->getParsedBody();
$userobj->setFullName($params['fullname']);
$data = $this->__getUserData($userobj);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
function setEmail($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
return;
}
$params = $request->getParsedBody();
$userobj->setEmail($params['email']);
$data = $this->__getUserData($userobj);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
function getLockedDocuments($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(false !== ($documents = $dms->getDocumentsLockedByUser($userobj))) {
$documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ);
@@ -332,16 +360,16 @@ class RestapiController { /* {{{ */
$recs[] = $this->__getLatestVersionData($lc);
}
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$recs))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>''))->withStatus(500);
}
} /* }}} */
function getFolder($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $settings = $this->container->config;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $settings = $this->container->get('config');
$params = $request->getQueryParams();
$forcebyname = isset($params['forcebyname']) ? $params['forcebyname'] : 0;
@@ -357,26 +385,26 @@ class RestapiController { /* {{{ */
if($folder) {
if($folder->getAccessMode($userobj) >= M_READ) {
$data = $this->__getFolderData($folder);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->withStatus(404);
}
} /* }}} */
function getFolderParent($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$id = $args['id'];
if($id == 0) {
- return $response->withJson(array('success'=>true, 'message'=>'id is 0', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'Id is 0', 'data'=>''))->withStatus(200);
}
$root = $dms->getRootFolder();
if($root->getId() == $id) {
- return $response->withJson(array('success'=>true, 'message'=>'id is root folder', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Id is root folder', 'data'=>''))->withStatus(200);
}
$folder = $dms->getFolder($id);
if($folder) {
@@ -384,24 +412,24 @@ class RestapiController { /* {{{ */
if($parent) {
if($parent->getAccessMode($userobj) >= M_READ) {
$rec = $this->__getFolderData($parent);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$rec), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$rec))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->withStatus(404);
}
} /* }}} */
function getFolderPath($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(empty($args['id'])) {
- return $response->withJson(array('success'=>true, 'message'=>'id is 0', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'id is 0', 'data'=>''))->withStatus(200);
}
$folder = $dms->getFolder($args['id']);
if($folder) {
@@ -411,40 +439,40 @@ class RestapiController { /* {{{ */
foreach($path as $element) {
$data[] = array('id'=>$element->getId(), 'name'=>$element->getName());
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->withStatus(404);
}
} /* }}} */
function getFolderAttributes($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$folder = $dms->getFolder($args['id']);
if($folder) {
if ($folder->getAccessMode($userobj) >= M_READ) {
$attributes = $this->__getAttributesData($folder);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$attributes), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$attributes))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->withStatus(404);
}
} /* }}} */
function getFolderChildren($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(empty($args['id'])) {
$folder = $dms->getRootFolder();
$recs = array($this->$this->__getFolderData($folder));
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$recs))->withStatus(200);
} else {
$folder = $dms->getFolder($args['id']);
if($folder) {
@@ -463,30 +491,30 @@ class RestapiController { /* {{{ */
$recs[] = $this->__getLatestVersionData($lc);
}
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$recs))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->withStatus(404);
}
}
} /* }}} */
function createFolder($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $settings = $this->container->config;
- $logger = $this->container->logger;
- $fulltextservice = $this->container->fulltextservice;
- $notifier = $this->container->notifier;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $settings = $this->container->get('config');
+ $logger = $this->container->get('logger');
+ $fulltextservice = $this->container->get('fulltextservice');
+ $notifier = $this->container->get('notifier');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No parent folder given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No parent folder given', 'data'=>''))->withStatus(400);
return;
}
$parent = $dms->getFolder($args['id']);
@@ -498,7 +526,7 @@ class RestapiController { /* {{{ */
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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getMLText("invalid_sequence"), 'data'=>''))->withStatus(400);
} else {
$dd = $parent->getSubFolders('s');
if(count($dd) > 1)
@@ -521,7 +549,7 @@ class RestapiController { /* {{{ */
/* 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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getMLText("subfolder_duplicate_name"), 'data'=>''))->withStatus(409);
}
}
@@ -542,35 +570,35 @@ class RestapiController { /* {{{ */
if($notifier) {
$notifier->sendNewFolderMail($folder, $userobj);
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$rec), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$rec))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not create folder', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not create folder', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Missing folder name', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Missing folder name', 'data'=>''))->withStatus(400);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not find parent folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not find parent folder', 'data'=>''))->withStatus(404);
}
} /* }}} */
function moveFolder($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No source folder given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No source folder given', 'data'=>''))->withStatus(400);
}
if(!ctype_digit($args['folderid']) || $args['folderid'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No destination folder given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No destination folder given', 'data'=>''))->withStatus(400);
}
$mfolder = $dms->getFolder($args['id']);
@@ -579,82 +607,82 @@ class RestapiController { /* {{{ */
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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Error moving folder', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Error moving folder', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''))->withStatus(403);
}
} else {
if($folder === null)
$status = 404;
else
$status = 500;
- return $response->withJson(array('success'=>false, 'message'=>'No destination folder', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No destination folder', 'data'=>''))->withStatus($status);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($mfolder === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No folder', 'data'=>''))->withStatus($status);
}
} /* }}} */
function deleteFolder($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'id is 0', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'id is 0', 'data'=>''))->withStatus(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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Error deleting folder', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Error deleting folder', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($mfolder === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No folder', 'data'=>''))->withStatus($status);
}
} /* }}} */
function uploadDocument($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $settings = $this->container->config;
- $notifier = $this->container->notifier;
- $fulltextservice = $this->container->fulltextservice;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $settings = $this->container->get('config');
+ $notifier = $this->container->get('notifier');
+ $fulltextservice = $this->container->get('fulltextservice');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No parent folder id given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No parent folder id given', 'data'=>''))->withStatus(400);
}
if($settings->_quota > 0) {
$remain = checkQuota($userobj);
if ($remain < 0) {
- return $response->withJson(array('success'=>false, 'message'=>'Quota exceeded', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Quota exceeded', 'data'=>''))->withStatus(400);
}
}
@@ -669,7 +697,7 @@ class RestapiController { /* {{{ */
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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getMLText("invalid_sequence"), 'data'=>''))->withStatus(400);
} else {
$dd = $mfolder->getDocuments('s');
if(count($dd) > 1)
@@ -680,7 +708,7 @@ class RestapiController { /* {{{ */
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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getMLText('malformed_expiration_date'), 'data'=>''))->withStatus(400);
$expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]);
} else
$expires = 0;
@@ -706,15 +734,15 @@ class RestapiController { /* {{{ */
if($attrdef) {
if($attribute) {
if(!$attrdef->validate($attribute)) {
- return $response->withJson(array('success'=>false, 'message'=>getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute), 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute), 'data'=>''))->withStatus(400);
}
} elseif($attrdef->getMinValues() > 0) {
- return $response->withJson(array('success'=>false, 'message'=>getMLText("attr_min_values", array("attrname"=>$attrdef->getName())), 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getMLText("attr_min_values", array("attrname"=>$attrdef->getName())), 'data'=>''))->withStatus(400);
}
}
}
if (count($uploadedFiles) == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No file detected', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No file detected', 'data'=>''))->withStatus(400);
}
$file_info = array_pop($uploadedFiles);
if ($origfilename == null)
@@ -724,7 +752,7 @@ class RestapiController { /* {{{ */
/* 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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getMLText("document_duplicate_name"), 'data'=>''))->withStatus(409);
}
}
// Get the list of reviewers and approvers for this document.
@@ -754,7 +782,9 @@ class RestapiController { /* {{{ */
$workflow = array_shift($workflows);
}
}
- $temp = $file_info->file;
+ $temp = tempnam(sys_get_temp_dir(), 'FOO');
+ file_put_contents($temp, (string) $file_info->getStream());
+
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$userfiletype = finfo_file($finfo, $temp);
$fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION);
@@ -802,17 +832,17 @@ class RestapiController { /* {{{ */
$errmsg = $err;
}
unlink($temp);
- return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Upload failed', 'data'=>''))->withStatus(500);
} else {
if($controller->hasHook('cleanUpDocument')) {
- $controller->callHook('cleanUpDocument', $document, $file);
+ $controller->callHook('cleanUpDocument', $document, ['ѕource'=>'restapi', 'type'=>$userfiletype, 'name'=>$origfilename]);
}
// Send notification to subscribers of folder.
if($notifier) {
$notifier->sendNewDocumentMail($document, $userobj);
}
unlink($temp);
- return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$this->__getLatestVersionData($document->getLatestContent())), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'Upload succeded', 'data'=>$this->__getLatestVersionData($document->getLatestContent())))->withStatus(201);
}
/*
$res = $mfolder->addDocument($docname, $comment, $expires, $owner ? $owner : $userobj, $keywords, $cats, $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, $sequence, array(), array(), $reqversion, $version_comment, $attributes);
@@ -822,49 +852,49 @@ class RestapiController { /* {{{ */
if($notifier) {
$notifier->sendNewDocumentMail($doc, $userobj);
}
- return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$this->__getLatestVersionData($doc->getLatestContent())), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'Upload succeded', 'data'=>$this->__getLatestVersionData($doc->getLatestContent())))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Upload failed', 'data'=>''))->withStatus(500);
}
*/
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($mfolder === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No folder', 'data'=>''))->withStatus($status);
}
} /* }}} */
function updateDocument($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $settings = $this->container->config;
- $notifier = $this->container->notifier;
- $fulltextservice = $this->container->fulltextservice;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $settings = $this->container->get('config');
+ $notifier = $this->container->get('notifier');
+ $fulltextservice = $this->container->get('fulltextservice');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No document id given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document id given', 'data'=>''))->withStatus(400);
}
if($settings->_quota > 0) {
$remain = checkQuota($userobj);
if ($remain < 0) {
- return $response->withJson(array('success'=>false, 'message'=>'Quota exceeded', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Quota exceeded', 'data'=>''))->withStatus(400);
}
}
$document = $dms->getDocument($args['id']);
if($document) {
if ($document->getAccessMode($userobj, 'updateDocument') < M_READWRITE) {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
$params = $request->getParsedBody();
@@ -879,32 +909,33 @@ class RestapiController { /* {{{ */
if($attrdef) {
if($attribute) {
if(!$attrdef->validate($attribute)) {
- return $response->withJson(array('success'=>false, 'message'=>getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute), 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute), 'data'=>''))->withStatus(400);
}
} elseif($attrdef->getMinValues() > 0) {
- return $response->withJson(array('success'=>false, 'message'=>getMLText("attr_min_values", array("attrname"=>$attrdef->getName())), 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getMLText("attr_min_values", array("attrname"=>$attrdef->getName())), 'data'=>''))->withStatus(400);
}
}
}
$uploadedFiles = $request->getUploadedFiles();
if (count($uploadedFiles) == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No file detected', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No file detected', 'data'=>''))->withStatus(400);
}
$file_info = array_pop($uploadedFiles);
if ($origfilename == null)
$origfilename = $file_info->getClientFilename();
- $temp = $file_info->file;
+ $temp = tempnam(sys_get_temp_dir(), 'FOO');
+ file_put_contents($temp, (string) $file_info->getStream());
/* Check if the uploaded file is identical to last version */
$lc = $document->getLatestContent();
if($lc->getChecksum() == SeedDMS_Core_File::checksum($temp)) {
- return $response->withJson(array('success'=>false, 'message'=>'Uploaded file identical to last version', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Uploaded file identical to last version', 'data'=>''))->withStatus(400);
}
if($document->isLocked()) {
$lockingUser = $document->getLockingUser();
if(($lockingUser->getID() != $userobj->getID()) && ($document->getAccessMode($userobj) != M_ALL)) {
- return $response->withJson(array('success'=>false, 'message'=>'Document is locked', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Document is locked', 'data'=>''))->withStatus(400);
}
else $document->setLocked(false);
}
@@ -973,11 +1004,11 @@ class RestapiController { /* {{{ */
} else {
$errmsg = $err;
}
- return $response->withJson(array('success'=>false, 'message'=>'Upload failed: '.$errmsg, 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Upload failed: '.$errmsg, 'data'=>''))->withStatus(500);
} else {
unlink($temp);
if($controller->hasHook('cleanUpDocument')) {
- $controller->callHook('cleanUpDocument', $document, $file_info);
+ $controller->callHook('cleanUpDocument', $document, ['ѕource'=>'restapi', 'type'=>$userfiletype, 'name'=>$origfilename]);
}
// Send notification to subscribers.
if($notifier) {
@@ -987,10 +1018,10 @@ class RestapiController { /* {{{ */
}
$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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec))->withStatus(200);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus(404);
}
} /* }}} */
@@ -998,23 +1029,23 @@ class RestapiController { /* {{{ */
* Old upload method which uses put instead of post
*/
function uploadDocumentPut($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $settings = $this->container->config;
- $notifier = $this->container->notifier;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $settings = $this->container->get('config');
+ $notifier = $this->container->get('notifier');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No document id given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document id given', 'data'=>''))->withStatus(400);
}
if($settings->_quota > 0) {
$remain = checkQuota($userobj);
if ($remain < 0) {
- return $response->withJson(array('success'=>false, 'message'=>'Quota exceeded', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Quota exceeded', 'data'=>''))->withStatus(400);
}
}
@@ -1023,10 +1054,11 @@ class RestapiController { /* {{{ */
if ($mfolder->getAccessMode($userobj, 'addDocument') >= M_READWRITE) {
$params = $request->getQueryParams();
$docname = isset($params['name']) ? $params['name'] : '';
+ $comment = isset($params['comment']) ? $params['comment'] : '';
$keywords = isset($params['keywords']) ? $params['keywords'] : '';
$origfilename = isset($params['origfilename']) ? $params['origfilename'] : null;
$content = $request->getBody();
- $temp = tempnam('/tmp', 'lajflk');
+ $temp = tempnam(sys_get_temp_dir(), 'lajflk');
$handle = fopen($temp, "w");
fwrite($handle, $content);
fclose($handle);
@@ -1037,10 +1069,10 @@ class RestapiController { /* {{{ */
/* 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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>getMLText("document_duplicate_name"), 'data'=>''))->withStatus(409);
}
}
- $res = $mfolder->addDocument($docname, '', 0, $userobj, '', array(), $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, 0);
+ $res = $mfolder->addDocument($docname, $comment, 0, $userobj, '', array(), $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, 0);
unlink($temp);
if($res) {
$doc = $res[0];
@@ -1048,32 +1080,32 @@ class RestapiController { /* {{{ */
$notifier->sendNewDocumentMail($doc, $userobj);
}
$rec = array('id'=>(int)$doc->getId(), 'name'=>$doc->getName());
- return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Upload failed', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($mfolder === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No folder', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No folder', 'data'=>''))->withStatus($status);
}
} /* }}} */
function uploadDocumentFile($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No document id given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document id given', 'data'=>''))->withStatus(400);
}
$document = $dms->getDocument($args['id']);
if($document) {
@@ -1087,14 +1119,15 @@ class RestapiController { /* {{{ */
$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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No file detected', 'data'=>''))->withStatus(400);
}
$file_info = array_pop($uploadedFiles);
if ($origfilename == null)
$origfilename = $file_info->getClientFilename();
if (trim($docname) == '')
$docname = $origfilename;
- $temp = $file_info->file;
+ $temp = tempnam(sys_get_temp_dir(), 'FOO');
+ file_put_contents($temp, (string) $file_info->getStream());
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$userfiletype = finfo_file($finfo, $temp);
$fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION);
@@ -1104,36 +1137,36 @@ class RestapiController { /* {{{ */
$fileType, $userfiletype, $version, $public);
unlink($temp);
if($res) {
- return $response->withJson(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$res), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'Upload succeded', 'data'=>$res))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Upload failed', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Upload failed', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function addDocumentLink($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No source document given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No source document given', 'data'=>''))->withStatus(400);
return;
}
if(!ctype_digit($args['documentid']) || $args['documentid'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No target document given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No target document given', 'data'=>''))->withStatus(400);
return;
}
$sourcedoc = $dms->getDocument($args['id']);
@@ -1143,21 +1176,21 @@ class RestapiController { /* {{{ */
$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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not create document link', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not create document link', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on source document', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on source document', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not find source or target document', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not find source or target document', 'data'=>''))->withStatus(500);
}
} /* }}} */
function getDocument($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$document = $dms->getDocument($args['id']);
if($document) {
@@ -1165,53 +1198,53 @@ class RestapiController { /* {{{ */
$lc = $document->getLatestContent();
if($lc) {
$data = $this->__getLatestVersionData($lc);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function deleteDocument($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!ctype_digit($args['id'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Error removing document', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Error removing document', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function moveDocument($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$document = $dms->getDocument($args['id']);
if($document) {
@@ -1219,35 +1252,35 @@ class RestapiController { /* {{{ */
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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Error moving document', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Error moving document', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on destination folder', 'data'=>''))->withStatus(403);
}
} else {
if($folder === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No destination folder', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No destination folder', 'data'=>''))->withStatus($status);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function getDocumentContent($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$document = $dms->getDocument($args['id']);
if($document) {
@@ -1261,9 +1294,9 @@ class RestapiController { /* {{{ */
$file = $dms->contentDir . $lc->getPath();
if(!($fh = @fopen($file, 'rb'))) {
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>''))->withStatus(500);
}
- $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body
+ $stream = new \Slim\Psr7\Stream($fh); // create a stream instance for the response body
return $response->withHeader('Content-Type', $lc->getMimeType())
->withHeader('Content-Description', 'File Transfer')
@@ -1277,24 +1310,24 @@ class RestapiController { /* {{{ */
sendFile($dms->contentDir . $lc->getPath());
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function getDocumentVersions($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$document = $dms->getDocument($args['id']);
if($document) {
@@ -1304,25 +1337,25 @@ class RestapiController { /* {{{ */
foreach($lcs as $lc) {
$recs[] = $this->__getDocumentVersionData($lc);
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$recs))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function getDocumentVersion($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!ctype_digit($args['id']) || !ctype_digit($args['version'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$document = $dms->getDocument($args['id']);
@@ -1337,9 +1370,9 @@ class RestapiController { /* {{{ */
$file = $dms->contentDir . $lc->getPath();
if(!($fh = @fopen($file, 'rb'))) {
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>''))->withStatus(500);
}
- $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body
+ $stream = new \Slim\Psr7\Stream($fh); // create a stream instance for the response body
return $response->withHeader('Content-Type', $lc->getMimeType())
->withHeader('Content-Description', 'File Transfer')
@@ -1353,23 +1386,23 @@ class RestapiController { /* {{{ */
sendFile($dms->contentDir . $lc->getPath());
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such version', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such version', 'data'=>''))->withStatus(404);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function updateDocumentVersion($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$document = $dms->getDocument($args['id']);
if($document) {
@@ -1379,29 +1412,29 @@ class RestapiController { /* {{{ */
$params = $request->getParsedBody();
if (isset($params['comment'])) {
$lc->setComment($params['comment']);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(200);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such version', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such version', 'data'=>''))->withStatus(404);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function getDocumentFiles($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!ctype_digit($args['id'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$document = $dms->getDocument($args['id']);
@@ -1413,25 +1446,25 @@ class RestapiController { /* {{{ */
foreach($files as $file) {
$recs[] = $this->__getDocumentFileData($file);
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$recs))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function getDocumentFile($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!ctype_digit($args['id']) || !ctype_digit($args['fileid'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$document = $dms->getDocument($args['id']);
@@ -1442,9 +1475,9 @@ class RestapiController { /* {{{ */
if($lc) {
$file = $dms->contentDir . $lc->getPath();
if(!($fh = @fopen($file, 'rb'))) {
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>''))->withStatus(500);
}
- $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body
+ $stream = new \Slim\Psr7\Stream($fh); // create a stream instance for the response body
return $response->withHeader('Content-Type', $lc->getMimeType())
->withHeader('Content-Description', 'File Transfer')
@@ -1458,26 +1491,26 @@ class RestapiController { /* {{{ */
sendFile($dms->contentDir . $lc->getPath());
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No document file', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document file', 'data'=>''))->withStatus(404);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function getDocumentLinks($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!ctype_digit($args['id'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$document = $dms->getDocument($args['id']);
@@ -1489,43 +1522,43 @@ class RestapiController { /* {{{ */
foreach($links as $link) {
$recs[] = $this->__getDocumentLinkData($link);
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$recs))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function getDocumentAttributes($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$document = $dms->getDocument($args['id']);
if($document) {
if ($document->getAccessMode($userobj) >= M_READ) {
$attributes = $this->__getAttributesData($document);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$attributes), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$attributes))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function getDocumentContentAttributes($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$document = $dms->getDocument($args['id']);
if($document) {
@@ -1535,33 +1568,33 @@ class RestapiController { /* {{{ */
if($version) {
if($version->getAccessMode($userobj) >= M_READ) {
$attributes = $this->__getAttributesData($version);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$attributes), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$attributes))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on version', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on version', 'data'=>''))->withStatus(403);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No version', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No version', 'data'=>''))->withStatus(404);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function getDocumentPreview($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $settings = $this->container->config;
- $conversionmgr = $this->container->conversionmgr;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $settings = $this->container->get('config');
+ $conversionmgr = $this->container->get('conversionmgr');
if(!ctype_digit($args['id'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$document = $dms->getDocument($args['id']);
@@ -1588,9 +1621,9 @@ class RestapiController { /* {{{ */
$file = $previewer->getFileName($object, $args['width']).".png";
if(!($fh = @fopen($file, 'rb'))) {
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>''))->withStatus(500);
}
- $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body
+ $stream = new \Slim\Psr7\Stream($fh); // create a stream instance for the response body
return $response->withHeader('Content-Type', 'image/png')
->withHeader('Content-Description', 'File Transfer')
@@ -1599,31 +1632,31 @@ class RestapiController { /* {{{ */
->withHeader('Content-Length', $previewer->getFilesize($object))
->withBody($stream);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function addDocumentCategory($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No document given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document given', 'data'=>''))->withStatus(400);
return;
}
if(!ctype_digit($args['catid']) || $args['catid'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No category given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No category given', 'data'=>''))->withStatus(400);
return;
}
$cat = $dms->getDocumentCategory($args['catid']);
@@ -1631,54 +1664,54 @@ class RestapiController { /* {{{ */
if($doc && $cat) {
if($doc->getAccessMode($userobj, 'addDocumentCategory') >= M_READ) {
if ($doc->addCategories([$cat])){
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not add document category', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not add document category', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on document', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on document', 'data'=>''))->withStatus(403);
}
} else {
if(!$doc)
- return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such document', 'data'=>''))->withStatus(404);
if(!$cat)
- return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404);
- return $response->withJson(array('success'=>false, 'message'=>'Could not find category or document', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such category', 'data'=>''))->withStatus(404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not find category or document', 'data'=>''))->withStatus(500);
}
} /* }}} */
function removeDocumentCategory($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!ctype_digit($args['id']) || !ctype_digit($args['catid'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$document = $dms->getDocument($args['id']);
if(!$document)
- return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such document', 'data'=>''))->withStatus(404);
$category = $dms->getDocumentCategory($args['catid']);
if(!$category)
- return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such category', 'data'=>''))->withStatus(404);
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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'Deleted category successfully.', 'data'=>''))->withStatus(200);
else
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} /* }}} */
function removeDocumentCategories($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if(!ctype_digit($args['id'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$document = $dms->getDocument($args['id']);
@@ -1686,38 +1719,35 @@ class RestapiController { /* {{{ */
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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'Deleted categories successfully.', 'data'=>''))->withStatus(200);
else
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>''))->withStatus(500);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access', 'data'=>''))->withStatus(403);
}
} else {
if($document === null)
$status=404;
else
$status=500;
- return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), $status);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such document', 'data'=>''))->withStatus($status);
}
} /* }}} */
function setDocumentOwner($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('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'=>'No access on document', 'data'=>''), 403);
- }
+ $check = $this->checkIfAdmin($request, $response);
+ if ($check !== true)
+ return $check;
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No document given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document given', 'data'=>''))->withStatus(400);
return;
}
if(!ctype_digit($args['userid']) || $args['userid'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No user given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No user given', 'data'=>''))->withStatus(400);
return;
}
$owner = $dms->getUser($args['userid']);
@@ -1725,94 +1755,94 @@ class RestapiController { /* {{{ */
if($doc && $owner) {
if($doc->getAccessMode($userobj, 'setDocumentOwner') > M_READ) {
if ($doc->setOwner($owner)){
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not set owner of document', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not set owner of document', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on document', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on document', 'data'=>''))->withStatus(403);
}
} else {
if(!$doc)
- return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such document', 'data'=>''))->withStatus(404);
if(!$owner)
- return $response->withJson(array('success'=>false, 'message'=>'No such user', 'data'=>''), 404);
- return $response->withJson(array('success'=>false, 'message'=>'Could not find user or document', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such user', 'data'=>''))->withStatus(404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not find user or document', 'data'=>''))->withStatus(500);
}
} /* }}} */
function setDocumentAttribute($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $logger = $this->container->logger;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $logger = $this->container->get('logger');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
return;
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No document given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document given', 'data'=>''))->withStatus(400);
return;
}
if(!ctype_digit($args['attrdefid']) || $args['attrdefid'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No attribute definition id given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No attribute definition id given', 'data'=>''))->withStatus(400);
return;
}
$attrdef = $dms->getAttributeDefinition($args['attrdefid']);
$doc = $dms->getDocument($args['id']);
if($doc && $attrdef) {
if($attrdef->getObjType() !== SeedDMS_Core_AttributeDefinition::objtype_document) {
- return $response->withJson(array('success'=>false, 'message'=>'Attribute definition "'.$attrdef->getName().'" not suitable for documents', 'data'=>''), 409);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Attribute definition "'.$attrdef->getName().'" not suitable for documents', 'data'=>''))->withStatus(409);
}
$params = $request->getParsedBody();
if(!isset($params['value'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Attribute value not set', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Attribute value not set', 'data'=>''))->withStatus(400);
}
$new = $doc->getAttributeValue($attrdef) ? true : false;
if(!$attrdef->validate($params['value'], $doc, $new)) {
- return $response->withJson(array('success'=>false, 'message'=>'Validation of attribute value failed: '.$attrdef->getValidationError(), 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Validation of attribute value failed: '.$attrdef->getValidationError(), 'data'=>''))->withStatus(400);
}
if($doc->getAccessMode($userobj, 'setDocumentAttribute') > M_READ) {
if ($doc->setAttributeValue($attrdef, $params['value'])) {
$logger->log("Setting attribute '".$attrdef->getName()."' (".$attrdef->getId().") to '".$params['value']."' successful", PEAR_LOG_INFO);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not set attribute value of document', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not set attribute value of document', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on document', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on document', 'data'=>''))->withStatus(403);
}
} else {
if(!$doc)
- return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such document', 'data'=>''))->withStatus(404);
if(!$attrdef)
- return $response->withJson(array('success'=>false, 'message'=>'No such attr definition', 'data'=>''), 404);
- return $response->withJson(array('success'=>false, 'message'=>'Could not find user or document', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such attr definition', 'data'=>''))->withStatus(404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not find user or document', 'data'=>''))->withStatus(500);
}
} /* }}} */
function setDocumentContentAttribute($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $logger = $this->container->logger;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $logger = $this->container->get('logger');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
return;
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No document given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No document given', 'data'=>''))->withStatus(400);
return;
}
if(!ctype_digit($args['version']) || $args['version'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No version number given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No version number given', 'data'=>''))->withStatus(400);
return;
}
if(!ctype_digit($args['attrdefid']) || $args['attrdefid'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No attribute definition id given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No attribute definition id given', 'data'=>''))->withStatus(400);
return;
}
$attrdef = $dms->getAttributeDefinition($args['attrdefid']);
@@ -1820,100 +1850,100 @@ class RestapiController { /* {{{ */
$version = $doc->getContentByVersion($args['version']);
if($doc && $attrdef && $version) {
if($attrdef->getObjType() !== SeedDMS_Core_AttributeDefinition::objtype_documentcontent) {
- return $response->withJson(array('success'=>false, 'message'=>'Attribute definition "'.$attrdef->getName().'" not suitable for document versions', 'data'=>''), 409);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Attribute definition "'.$attrdef->getName().'" not suitable for document versions', 'data'=>''))->withStatus(409);
}
$params = $request->getParsedBody();
if(!isset($params['value'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Attribute value not set', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Attribute value not set', 'data'=>''))->withStatus(400);
}
$new = $version->getAttributeValue($attrdef) ? true : false;
if(!$attrdef->validate($params['value'], $version, $new)) {
- return $response->withJson(array('success'=>false, 'message'=>'Validation of attribute value failed: '.$attrdef->getValidationError(), 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Validation of attribute value failed: '.$attrdef->getValidationError(), 'data'=>''))->withStatus(400);
}
if($doc->getAccessMode($userobj, 'setDocumentContentAttribute') > M_READ) {
if ($version->setAttributeValue($attrdef, $params['value'])) {
$logger->log("Setting attribute '".$attrdef->getName()."' (".$attrdef->getId().") to '".$params['value']."' successful", PEAR_LOG_INFO);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not set attribute value of document content', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not set attribute value of document content', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on document', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on document', 'data'=>''))->withStatus(403);
}
} else {
if(!$doc)
- return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such document', 'data'=>''))->withStatus(404);
if(!$version)
- return $response->withJson(array('success'=>false, 'message'=>'No such version', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such version', 'data'=>''))->withStatus(404);
if(!$attrdef)
- return $response->withJson(array('success'=>false, 'message'=>'No such attr definition', 'data'=>''), 404);
- return $response->withJson(array('success'=>false, 'message'=>'Could not find user or document', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such attr definition', 'data'=>''))->withStatus(404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not find user or document', 'data'=>''))->withStatus(500);
}
} /* }}} */
function setFolderAttribute($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $logger = $this->container->logger;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $logger = $this->container->get('logger');
if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
return;
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No folder given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No folder given', 'data'=>''))->withStatus(400);
return;
}
if(!ctype_digit($args['attrdefid']) || $args['attrdefid'] == 0) {
- return $response->withJson(array('success'=>false, 'message'=>'No attribute definition id given', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No attribute definition id given', 'data'=>''))->withStatus(400);
return;
}
$attrdef = $dms->getAttributeDefinition($args['attrdefid']);
$obj = $dms->getFolder($args['id']);
if($obj && $attrdef) {
if($attrdef->getObjType() !== SeedDMS_Core_AttributeDefinition::objtype_folder) {
- return $response->withJson(array('success'=>false, 'message'=>'Attribute definition "'.$attrdef->getName().'" not suitable for folders', 'data'=>''), 409);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Attribute definition "'.$attrdef->getName().'" not suitable for folders', 'data'=>''))->withStatus(409);
}
$params = $request->getParsedBody();
if(!isset($params['value'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Attribute value not set', 'data'=>''.$request->getHeader('Content-Type')[0]), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Attribute value not set', 'data'=>''.$request->getHeader('Content-Type')[0]))->withStatus(400);
}
if(strlen($params['value'])) {
$new = $obj->getAttributeValue($attrdef) ? true : false;
if(!$attrdef->validate($params['value'], $obj, $new)) {
- return $response->withJson(array('success'=>false, 'message'=>'Validation of attribute value failed: '.$attrdef->getValidationError(), 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Validation of attribute value failed: '.$attrdef->getValidationError(), 'data'=>''))->withStatus(400);
}
}
if($obj->getAccessMode($userobj, 'setFolderAttribute') > M_READ) {
if ($obj->setAttributeValue($attrdef, $params['value'])) {
$logger->log("Setting attribute '".$attrdef->getName()."' (".$attrdef->getId().") to '".$params['value']."' successful", PEAR_LOG_INFO);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not set attribute value of folder', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not set attribute value of folder', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No access on folder', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on folder', 'data'=>''))->withStatus(403);
}
} else {
if(!$obj)
- return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->withStatus(404);
if(!$attrdef)
- return $response->withJson(array('success'=>false, 'message'=>'No such attr definition', 'data'=>''), 404);
- return $response->withJson(array('success'=>false, 'message'=>'Could not find user or folder', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such attr definition', 'data'=>''))->withStatus(404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not find user or folder', 'data'=>''))->withStatus(500);
}
} /* }}} */
function getAccount($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
if($userobj) {
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getUserData($userobj)), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$this->__getUserData($userobj)))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Not logged in', 'data'=>''))->withStatus(403);
}
} /* }}} */
@@ -1924,8 +1954,8 @@ class RestapiController { /* {{{ */
* return a list of words only.
*/
function doSearch($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$params = $request->getQueryParams();
$querystr = $params['query'];
@@ -1948,9 +1978,8 @@ class RestapiController { /* {{{ */
// 'creationstartdate'=>array('hour'=>1, 'minute'=>0, 'second'=>0, 'year'=>date('Y')-1, 'month'=>date('m'), 'day'=>date('d')),
);
$resArr = $dms->search($sparams);
-// $resArr = $dms->search($querystr, $limit, $offset, 'AND', $searchin, null, null, array(), array('hour'=>1, 'minute'=>0, 'second'=>0, 'year'=>date('Y')-1, 'month'=>date('m'), 'day'=>date('d')), array(), array(), array(), array(), array(), $objects);
if($resArr === false) {
- return $response->withJson(array(), 200);
+ return $this->renderer->json($response, array())->withStatus(200);
}
$entries = array();
$count = 0;
@@ -2007,7 +2036,7 @@ class RestapiController { /* {{{ */
if($recs)
// array_unshift($recs, array('type'=>'', 'id'=>0, 'name'=>$querystr, 'comment'=>''));
array_unshift($recs, ' '.$querystr);
- return $response->withJson($recs, 200);
+ return $this->renderer->json($response, $recs)->withStatus(200);
break;
default:
$recs = array();
@@ -2023,7 +2052,7 @@ class RestapiController { /* {{{ */
$recs[] = $this->__getFolderData($folder);
}
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs));
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$recs));
break;
}
} /* }}} */
@@ -2033,8 +2062,8 @@ class RestapiController { /* {{{ */
*
*/
function doSearchByAttr($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$params = $request->getQueryParams();
$attrname = $params['name'];
@@ -2076,26 +2105,28 @@ class RestapiController { /* {{{ */
$recs[] = $this->__getFolderData($folder);
}
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$recs), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$recs))->withStatus(200);
} /* }}} */
function checkIfAdmin($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+// if(!$this->container->has('userobj'))
+// echo "no user object";
- if(!$userobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
+ if(!$this->container->has('userobj') || !($userobj = $this->container->get('userobj'))) {
+ return $this->renderer->json($response, ['success'=>false, 'message'=>'Not logged in', 'data'=>''])->withStatus(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 $this->renderer->json($response, array('success'=>false, 'message'=>'You must be logged in with an administrator account to access this resource', 'data'=>''))->withStatus(403);
}
return true;
} /* }}} */
function getUsers($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
return $check;
@@ -2105,12 +2136,12 @@ class RestapiController { /* {{{ */
foreach($users as $u)
$data[] = $this->__getUserData($u);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
function createUser($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
@@ -2118,12 +2149,12 @@ class RestapiController { /* {{{ */
$params = $request->getParsedBody();
if(empty(trim($params['user']))) {
- return $response->withJson(array('success'=>false, 'message'=>'Missing user login', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Missing user login', 'data'=>''))->withStatus(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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Missing full user name', 'data'=>''))->withStatus(400);
}
$fullname = $params['name'];
$email = isset($params['email']) ? $params['email'] : '';
@@ -2133,21 +2164,21 @@ class RestapiController { /* {{{ */
$role = isset($params['role']) ? $params['role'] : 3;
$roleobj = $role == 'admin' ? SeedDMS_Core_Role::getInstance(1, $dms) : ($role == 'guest' ? SeedDMS_Core_Role::getInstance(2, $dms) : SeedDMS_Core_Role::getInstance($role, $dms));
if(!$roleobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Missing role', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Missing role', 'data'=>''), 400);
}
$newAccount = $dms->addUser($userName, seed_pass_hash($password), $fullname, $email, $language, $theme, $comment, $roleobj);
if ($newAccount === false) {
- return $response->withJson(array('success'=>false, 'message'=>'Account could not be created, maybe it already exists', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Account could not be created, maybe it already exists', 'data'=>''))->withStatus(500);
}
$result = $this->__getUserData($newAccount);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$result), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$result))->withStatus(201);
} /* }}} */
function deleteUser($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
@@ -2155,12 +2186,12 @@ class RestapiController { /* {{{ */
if($user = $dms->getUser($args['id'])) {
if($result = $user->remove($userobj, $userobj)) {
- return $response->withJson(array('success'=>$result, 'message'=>'', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>$result, 'message'=>'', 'data'=>''))->withStatus(200);
} else {
- return $response->withJson(array('success'=>$result, 'message'=>'Could not delete user', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>$result, 'message'=>'Could not delete user', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such user', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such user', 'data'=>''))->withStatus(404);
}
} /* }}} */
@@ -2171,8 +2202,8 @@ class RestapiController { /* {{{ */
* @param $id The user name or numerical identifier
*/
function changeUserPassword($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
@@ -2180,7 +2211,7 @@ class RestapiController { /* {{{ */
$params = $request->getParsedBody();
if ($params['password'] == null) {
- return $response->withJson(array('success'=>false, 'message'=>'You must supply a new password', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'You must supply a new password', 'data'=>''))->withStatus(400);
}
$newPassword = $params['password'];
@@ -2195,22 +2226,112 @@ class RestapiController { /* {{{ */
* User not found
*/
if (!$account) {
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'User not found.'), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>'User not found.'))->withStatus(404);
return;
}
$operation = $account->setPwd(seed_pass_hash($newPassword));
if (!$operation){
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'Could not change password.'), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>'Could not change password.'))->withStatus(404);
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(200);
+ } /* }}} */
+
+ /**
+ * Updates the quota of an existing account
+ *
+ * @param $id The user name or numerical identifier
+ */
+ function changeUserQuota($request, $response, $args) { /* {{{ */
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+
+ $check = $this->checkIfAdmin($request, $response);
+ if($check !== true)
+ return $check;
+
+ $params = $request->getParsedBody();
+ if ($params['quota'] == null || !ctype_digit($params['quota'])) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'You must supply a new quota', 'data'=>''))->withStatus(400);
+ }
+
+ $newQuota = $params['quota'];
+
+ if(ctype_digit($args['id']))
+ $account = $dms->getUser($args['id']);
+ else {
+ $account = $dms->getUserByLogin($args['id']);
+ }
+
+ /**
+ * User not found
+ */
+ if (!$account) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>'User not found.'))->withStatus(404);
+ return;
+ }
+
+ $operation = $account->setQuota($newQuota);
+
+ if (!$operation){
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>'Could not change quota.'))->withStatus(404);
+ }
+
+ $data = $this->__getUserData($account);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
+ } /* }}} */
+
+ function changeUserHomefolder($request, $response, $args) { /* {{{ */
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('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']);
+ }
+
+ /**
+ * User not found
+ */
+ if (!$account) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>'User not found.'))->withStatus(404);
+ return;
+ }
+
+ if(!ctype_digit($args['folderid'])) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No homefolder given', 'data'=>''))->withStatus(400);
+ return;
+ }
+ if($args['folderid'] == 0) {
+ $operation = $account->setHomeFolder(0);
+ } else {
+ $newHomefolder = $dms->getFolder($args['folderid']);
+ if (!$newHomefolder) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>'Folder not found.'))->withStatus(404);
+ return;
+ }
+
+ $operation = $account->setHomeFolder($newHomefolder->getId());
+ }
+
+ if (!$operation){
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>'Could not change homefolder.'))->withStatus(404);
+ }
+
+ $data = $this->__getUserData($account);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
function getUserById($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
@@ -2222,22 +2343,22 @@ class RestapiController { /* {{{ */
}
if($account) {
$data = $this->__getUserData($account);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such user', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such user', 'data'=>''))->withStatus(404);
}
} /* }}} */
function setDisabledUser($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'You must supply a disabled state', 'data'=>''))->withStatus(400);
}
$isDisabled = false;
@@ -2255,15 +2376,15 @@ class RestapiController { /* {{{ */
if($account) {
$account->setDisabled($isDisabled);
$data = $this->__getUserData($account);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such user', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such user', 'data'=>''))->withStatus(404);
}
} /* }}} */
function getRoles($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
return $check;
@@ -2273,19 +2394,19 @@ class RestapiController { /* {{{ */
foreach($roles as $r)
$data[] = $this->__getRoleData($r);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
function createRole($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$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 role name.', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Need a role name.', 'data'=>''))->withStatus(400);
}
$roleName = $params['name'];
@@ -2293,16 +2414,16 @@ class RestapiController { /* {{{ */
$newRole = $dms->addRole($roleName, $roleType);
if ($newRole === false) {
- return $response->withJson(array('success'=>false, 'message'=>'Role could not be created, maybe it already exists', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Role could not be created, maybe it already exists', 'data'=>''))->withStatus(500);
}
// $result = array('id'=>(int)$newGroup->getID());
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getRoleData($newRole)), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$this->__getRoleData($newRole)))->withStatus(201);
} /* }}} */
function deleteRole($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
@@ -2310,18 +2431,18 @@ class RestapiController { /* {{{ */
if($role = $dms->getRole($args['id'])) {
if($result = $role->remove($userobj)) {
- return $response->withJson(array('success'=>$result, 'message'=>'', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>$result, 'message'=>'', 'data'=>''))->withStatus(200);
} else {
- return $response->withJson(array('success'=>$result, 'message'=>'Could not delete role', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>$result, 'message'=>'Could not delete role', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such role', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such role', 'data'=>''))->withStatus(404);
}
} /* }}} */
function getRole($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
@@ -2337,15 +2458,15 @@ class RestapiController { /* {{{ */
foreach ($role->getUsers() as $user) {
$data['users'][] = array('id' => (int)$user->getID(), 'login' => $user->getLogin());
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such role', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such role', 'data'=>''))->withStatus(404);
}
} /* }}} */
function getGroups($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
@@ -2356,19 +2477,19 @@ class RestapiController { /* {{{ */
foreach($groups as $u)
$data[] = $this->__getGroupData($u);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
function createGroup($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$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 group name.', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Need a group name.', 'data'=>''))->withStatus(400);
}
$groupName = $params['name'];
@@ -2376,16 +2497,16 @@ class RestapiController { /* {{{ */
$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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Group could not be created, maybe it already exists', 'data'=>''))->withStatus(500);
}
// $result = array('id'=>(int)$newGroup->getID());
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getGroupData($newGroup)), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$this->__getGroupData($newGroup)))->withStatus(201);
} /* }}} */
function deleteGroup($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
@@ -2393,22 +2514,23 @@ class RestapiController { /* {{{ */
if($group = $dms->getGroup($args['id'])) {
if($result = $group->remove($userobj)) {
- return $response->withJson(array('success'=>$result, 'message'=>'', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>$result, 'message'=>'', 'data'=>''))->withStatus(200);
} else {
- return $response->withJson(array('success'=>$result, 'message'=>'Could not delete group', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>$result, 'message'=>'Could not delete group', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such group', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such group', 'data'=>''))->withStatus(404);
}
} /* }}} */
function getGroup($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
return $check;
+
if(ctype_digit($args['id']))
$group = $dms->getGroup($args['id']);
else {
@@ -2420,32 +2542,32 @@ class RestapiController { /* {{{ */
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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such group', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such group', 'data'=>''))->withStatus(404);
}
} /* }}} */
function changeGroupMembership($request, $response, $args, $operationType) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
- if($check !== true)
+ if ($check !== true)
return $check;
- if(ctype_digit($args['id']))
+ if (ctype_digit($args['id']))
$group = $dms->getGroup($args['id']);
else {
$group = $dms->getGroupByName($args['id']);
}
- $params = $request->getParsedBody();
+ $params = $request->getParsedBody();
if (empty($params['userid'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Missing userid', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Missing userid', 'data'=>''))->withStatus(400);
}
$userId = $params['userid'];
- if(ctype_digit($userId))
+ if (ctype_digit($userId))
$user = $dms->getUser($userId);
else {
$user = $dms->getUserByLogin($userId);
@@ -2457,23 +2579,19 @@ class RestapiController { /* {{{ */
$operationResult = false;
- if ($operationType == 'add')
- {
+ if ($operationType == 'add') {
$operationResult = $group->addUser($user);
}
- if ($operationType == 'remove')
- {
+ if ($operationType == 'remove') {
$operationResult = $group->removeUser($user);
}
- if ($operationResult === false)
- {
+ if ($operationResult === false) {
$message = 'Could not add user to the group.';
- if ($operationType == 'remove')
- {
+ if ($operationType == 'remove') {
$message = 'Could not remove user from group.';
}
- return $response->withJson(array('success'=>false, 'message'=>'Something went wrong. ' . $message, 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Something went wrong. ' . $message, 'data'=>''))->withStatus(500);
}
$data = $this->__getGroupData($group);
@@ -2481,7 +2599,7 @@ class RestapiController { /* {{{ */
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);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
function addUserToGroup($request, $response, $args) { /* {{{ */
@@ -2493,16 +2611,17 @@ class RestapiController { /* {{{ */
} /* }}} */
function setFolderInheritsAccess($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
- if($check !== true)
+ if ($check !== true)
return $check;
+
$params = $request->getParsedBody();
- if (empty($params['enable']))
+ if (!isset($params['enable']))
{
- return $response->withJson(array('success'=>false, 'message'=>'You must supply an "enable" value', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'You must supply an "enable" value', 'data'=>''))->withStatus(400);
}
$inherit = false;
@@ -2525,9 +2644,46 @@ class RestapiController { /* {{{ */
// reread from db
$folder = $dms->getFolder($folderId);
$success = ($folder->inheritsAccess() == $inherit);
- return $response->withJson(array('success'=>$success, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>$success, 'message'=>'', 'data'=>$data))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->withStatus(404);
+ }
+ } /* }}} */
+
+ function setFolderOwner($request, $response, $args) { /* {{{ */
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+
+ $check = $this->checkIfAdmin($request, $response);
+ if ($check !== true)
+ return $check;
+
+ if(!ctype_digit($args['id']) || $args['id'] == 0) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No folder given', 'data'=>''))->withStatus(400);
+ return;
+ }
+ if(!ctype_digit($args['userid']) || $args['userid'] == 0) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No user given', 'data'=>''))->withStatus(400);
+ return;
+ }
+ $owner = $dms->getUser($args['userid']);
+ $folder = $dms->getFolder($args['id']);
+ if($folder && $owner) {
+ if($folder->getAccessMode($userobj, 'setDocumentOwner') > M_READ) {
+ if ($folder->setOwner($owner)){
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(201);
+ } else {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not set owner of folder', 'data'=>''))->withStatus(500);
+ }
+ } else {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No access on folder', 'data'=>''))->withStatus(403);
+ }
+ } else {
+ if(!$doc)
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->withStatus(404);
+ if(!$owner)
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such user', 'data'=>''))->withStatus(404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not find user or folder', 'data'=>''))->withStatus(500);
}
} /* }}} */
@@ -2548,8 +2704,8 @@ class RestapiController { /* {{{ */
} /* }}} */
function changeFolderAccess($request, $response, $args, $operationType, $userOrGroup) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
if($check !== true)
@@ -2561,56 +2717,45 @@ class RestapiController { /* {{{ */
$folder = $dms->getfolderByName($args['id']);
}
if (!$folder) {
- return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->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);
+ if ($operationType == 'add') {
+ if ($params['id'] == null) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Please PUT the user or group Id', 'data'=>''))->withStatus(400);
}
- if ($params['mode'] == null)
- {
- return $response->withJson(array('success'=>false, 'message'=>'Please PUT the access mode', 'data'=>''), 200);
+ if ($params['mode'] == null) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Please PUT the access mode', 'data'=>''))->withStatus(400);
}
$modeInput = $params['mode'];
$mode = M_NONE;
- if ($modeInput == 'read')
- {
+ if ($modeInput == 'read') {
$mode = M_READ;
}
- if ($modeInput == 'readwrite')
- {
+ if ($modeInput == 'readwrite') {
$mode = M_READWRITE;
}
- if ($modeInput == 'all')
- {
+ if ($modeInput == 'all') {
$mode = M_ALL;
}
}
-
$userOrGroupId = $userOrGroupIdInput;
- if(!ctype_digit($userOrGroupIdInput) && $userOrGroup == 'user')
- {
+ if (!ctype_digit($userOrGroupIdInput) && $userOrGroup == 'user') {
$userOrGroupObj = $dms->getUserByLogin($userOrGroupIdInput);
}
- if(!ctype_digit($userOrGroupIdInput) && $userOrGroup == 'group')
- {
+ if (!ctype_digit($userOrGroupIdInput) && $userOrGroup == 'group') {
$userOrGroupObj = $dms->getGroupByName($userOrGroupIdInput);
}
- if(ctype_digit($userOrGroupIdInput) && $userOrGroup == 'user')
- {
+ if (ctype_digit($userOrGroupIdInput) && $userOrGroup == 'user') {
$userOrGroupObj = $dms->getUser($userOrGroupIdInput);
}
- if(ctype_digit($userOrGroupIdInput) && $userOrGroup == 'group')
- {
+ if (ctype_digit($userOrGroupIdInput) && $userOrGroup == 'group') {
$userOrGroupObj = $dms->getGroup($userOrGroupIdInput);
}
if (!$userOrGroupObj) {
@@ -2620,111 +2765,106 @@ class RestapiController { /* {{{ */
$operationResult = false;
- if ($operationType == 'add' && $userOrGroup == 'user')
- {
+ if ($operationType == 'add' && $userOrGroup == 'user') {
$operationResult = $folder->addAccess($mode, $userOrGroupId, true);
}
- if ($operationType == 'remove' && $userOrGroup == 'user')
- {
+ if ($operationType == 'remove' && $userOrGroup == 'user') {
$operationResult = $folder->removeAccess($userOrGroupId, true);
}
- if ($operationType == 'add' && $userOrGroup == 'group')
- {
+ if ($operationType == 'add' && $userOrGroup == 'group') {
$operationResult = $folder->addAccess($mode, $userOrGroupId, false);
}
- if ($operationType == 'remove' && $userOrGroup == 'group')
- {
+ if ($operationType == 'remove' && $userOrGroup == 'group') {
$operationResult = $folder->removeAccess($userOrGroupId, false);
}
- if ($operationResult === false)
- {
+ if ($operationResult === false) {
$message = 'Could not add user/group access to this folder.';
- if ($operationType == 'remove')
- {
+ 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);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Something went wrong. ' . $message, 'data'=>''))->withStatus(500);
}
$data = array();
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
function getCategories($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
- if(false === ($categories = $dms->getDocumentCategories())) {
- return $response->withJson(array('success'=>false, 'message'=>'Could not get categories', 'data'=>null), 500);
+ if (false === ($categories = $dms->getDocumentCategories())) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not get categories', 'data'=>null))->withStatus(500);
}
+
$data = [];
- foreach($categories as $category)
+ foreach ($categories as $category)
$data[] = $this->__getCategoryData($category);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
function getCategory($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
- if(!ctype_digit($args['id'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ if (!ctype_digit($args['id'])) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$category = $dms->getDocumentCategory($args['id']);
- if($category) {
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getCategoryData($category)), 200);
+ if ($category) {
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$this->__getCategoryData($category)))->withStatus(200);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such category', 'data'=>''))->withStatus(404);
}
} /* }}} */
function createCategory($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
- $logger = $this->container->logger;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+ $logger = $this->container->get('logger');
$check = $this->checkIfAdmin($request, $response);
- if($check !== true)
+ if ($check !== true)
return $check;
$params = $request->getParsedBody();
if (empty($params['name'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Need a category.', 'data'=>''), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Need a category.', 'data'=>''))->withStatus(400);
}
$catobj = $dms->getDocumentCategoryByName($params['name']);
- if($catobj) {
- return $response->withJson(array('success'=>false, 'message'=>'Category already exists', 'data'=>''), 409);
+ if ($catobj) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Category already exists', 'data'=>''))->withStatus(409);
} else {
if($data = $dms->addDocumentCategory($params['name'])) {
$logger->log("Creating category '".$data->getName()."' (".$data->getId().") successful", PEAR_LOG_INFO);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getCategoryData($data)), 201);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$this->__getCategoryData($data)))->withStatus(201);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Could not add category', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Could not add category', 'data'=>''))->withStatus(500);
}
}
} /* }}} */
function deleteCategory($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
- if($check !== true)
+ if ($check !== true)
return $check;
- if($category = $dms->getDocumentCategory($args['id'])) {
- if($result = $category->remove()) {
- return $response->withJson(array('success'=>$result, 'message'=>'', 'data'=>''), 200);
+ if ($category = $dms->getDocumentCategory($args['id'])) {
+ if ($result = $category->remove()) {
+ return $this->renderer->json($response, array('success'=>$result, 'message'=>'', 'data'=>''))->withStatus(200);
} else {
- return $response->withJson(array('success'=>$result, 'message'=>'Could not delete category', 'data'=>''), 500);
+ return $this->renderer->json($response, array('success'=>$result, 'message'=>'Could not delete category', 'data'=>''))->withStatus(500);
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such category', 'data'=>''))->withStatus(404);
}
} /* }}} */
@@ -2734,21 +2874,20 @@ class RestapiController { /* {{{ */
* @param $id The user name or numerical identifier
*/
function changeCategoryName($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
- if($check !== true)
+ if ($check !== true)
return $check;
- if(!ctype_digit($args['id'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ if (!ctype_digit($args['id'])) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$params = $request->getParsedBody();
- if (empty($params['name']))
- {
- return $response->withJson(array('success'=>false, 'message'=>'You must supply a new name', 'data'=>''), 400);
+ if (empty($params['name'])) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'You must supply a new name', 'data'=>''))->withStatus(400);
}
$newname = $params['name'];
@@ -2759,26 +2898,42 @@ class RestapiController { /* {{{ */
* Category not found
*/
if (!$category) {
- return $response->withJson(array('success'=>false, 'message'=>'No such category', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such category', 'data'=>''))->withStatus(404);
}
if (!$category->setName($newname)) {
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'Could not change name.'), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>'Could not change name.'))->withStatus(400);
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getCategoryData($category)), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$this->__getCategoryData($category)))->withStatus(200);
} /* }}} */
function getAttributeDefinitions($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$attrdefs = $dms->getAllAttributeDefinitions();
$data = [];
- foreach($attrdefs as $attrdef)
+ foreach ($attrdefs as $attrdef)
$data[] = $this->__getAttributeDefinitionData($attrdef);
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
+ } /* }}} */
+
+ function getAttributeDefinition($request, $response, $args) { /* {{{ */
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
+
+ if (!ctype_digit($args['id'])) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
+ }
+
+ $attrdef = $dms->getAttributeDefinition($args['id']);
+ if ($attrdef) {
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$this->__getAttributeDefinitionData($attrdef)))->withStatus(200);
+ } else {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such attributedefinition', 'data'=>''))->withStatus(404);
+ }
} /* }}} */
/**
@@ -2787,20 +2942,20 @@ class RestapiController { /* {{{ */
* @param $id The user name or numerical identifier
*/
function changeAttributeDefinitionName($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
- if($check !== true)
+ if ($check !== true)
return $check;
- if(!ctype_digit($args['id'])) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''), 400);
+ if (!ctype_digit($args['id'])) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'Invalid parameter', 'data'=>''))->withStatus(400);
}
$params = $request->getParsedBody();
- if ($params['name'] == null) {
- return $response->withJson(array('success'=>false, 'message'=>'You must supply a new name', 'data'=>''), 400);
+ if (!isset($params['name']) || $params['name'] == null) {
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'You must supply a new name', 'data'=>''))->withStatus(400);
}
$newname = $params['name'];
@@ -2811,79 +2966,79 @@ class RestapiController { /* {{{ */
* Attribute definition not found
*/
if (!$attrdef) {
- return $response->withJson(array('success'=>false, 'message'=>'No such attribute defintion', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such attribute defintion', 'data'=>''))->withStatus(404);
}
if (!$attrdef->setName($newname)) {
- return $response->withJson(array('success'=>false, 'message'=>'', 'data'=>'Could not change name.'), 400);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'', 'data'=>'Could not change name.'))->withStatus(400);
return;
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$this->__getAttributeDefinitionData($attrdef)), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$this->__getAttributeDefinitionData($attrdef)))->withStatus(200);
} /* }}} */
function clearFolderAccessList($request, $response, $args) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
+ $userobj = $this->container->get('userobj');
$check = $this->checkIfAdmin($request, $response);
- if($check !== true)
+ if ($check !== true)
return $check;
- if(ctype_digit($args['id']))
+ if (ctype_digit($args['id'])) {
$folder = $dms->getFolder($args['id']);
- else {
+ } else {
$folder = $dms->getFolderByName($args['id']);
}
if (!$folder) {
- return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
+ return $this->renderer->json($response, array('success'=>false, 'message'=>'No such folder', 'data'=>''))->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 $this->renderer->json($response, array('success'=>false, 'message'=>'Something went wrong. Could not clear access list for this folder.', 'data'=>''))->withStatus(500);
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>''))->withStatus(200);
} /* }}} */
function getStatsTotal($request, $response) { /* {{{ */
- $dms = $this->container->dms;
- $userobj = $this->container->userobj;
+ $dms = $this->container->get('dms');
$check = $this->checkIfAdmin($request, $response);
- if($check !== true)
+ if ($check !== true)
return $check;
$data = [];
- foreach(array('docstotal', 'folderstotal', 'userstotal') as $type) {
+ foreach (array('docstotal', 'folderstotal', 'userstotal') as $type) {
$total = $dms->getStatisticalData($type);
$data[$type] = $total;
}
- return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
+ return $this->renderer->json($response, array('success'=>true, 'message'=>'', 'data'=>$data))->withStatus(200);
} /* }}} */
} /* }}} */
-class TestController { /* {{{ */
+final class SeedDMS_TestController { /* {{{ */
protected $container;
+ protected $renderer;
// constructor receives container instance
- public function __construct(ContainerInterface $container) {
+ public function __construct(ContainerInterface $container, JsonRenderer $renderer) {
$this->container = $container;
+ $this->renderer = $renderer;
}
public function echoData($request, $response, $args) { /* {{{ */
- return $response->withJson(array('success'=>true, 'message'=>'This is the result of the echo call.', 'data'=>$args['data']), 200);
+ return $this->renderer->json($response, ['success'=>true, 'message'=>'This is the result of the echo call.', 'data'=>$args['data']]);
} /* }}} */
public function version($request, $response, $args) { /* {{{ */
- $logger = $this->container->logger;
+ $logger = $this->container->get('logger');
$v = new SeedDMS_Version();
- return $response->withJson(array('success'=>true, 'message'=>'This is '.$v->banner(), 'data'=>['major'=>$v->majorVersion(), 'minor'=>$v->minorVersion(), 'subminor'=>$v->subminorVersion()]), 200);
+ return $this->renderer->json($response, ['success'=>true, 'message'=>'This is '.$v->banner(), 'data'=>['major'=>$v->majorVersion(), 'minor'=>$v->minorVersion(), 'subminor'=>$v->subminorVersion(), 'version'=>$v->majorVersion().'.'.$v->minorVersion().'.'.$v->subminorVersion()]]);
} /* }}} */
} /* }}} */
-/* Middleware for authentication */
-class RestapiAuth { /* {{{ */
+class RestapiCorsMiddleware implements MiddlewareInterface { /* {{{ */
private $container;
@@ -2891,67 +3046,146 @@ class RestapiAuth { /* {{{ */
$this->container = $container;
}
+ /**
+ * Example middleware invokable class
+ *
+ * @return \Psr\Http\Message\ResponseInterface
+ */
+ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
+ {
+ $response = $handler->handle($request);
+ $response = $response
+ ->withHeader('Access-Control-Allow-Origin', $request->getHeader('Origin') ? $request->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');
+ return $response;
+ }
+} /* }}} */
+
+/* Middleware for authentication */
+class RestapiAuthMiddleware implements MiddlewareInterface { /* {{{ */
+
+ private $container;
+
+ private $responsefactory;
+
+ public function __construct($container, $responsefactory) {
+ $this->container = $container;
+ $this->responsefactory = $responsefactory;
+ }
+
/**
* 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
+ * @param \Psr\Http\Server\RequestHandlerInterface $handler
*
* @return \Psr\Http\Message\ResponseInterface
*/
- public function __invoke($request, $response, $next)
+ public function process(
+ ServerRequestInterface $request,
+ RequestHandlerInterface $handler): ResponseInterface
{
// $this->container has the DI
- $dms = $this->container->dms;
- $settings = $this->container->config;
- $logger = $this->container->logger;
+ $dms = $this->container->get('dms');
+ $settings = $this->container->get('config');
+ $logger = $this->container->get('logger');
+
+ $logger->log("Invoke AuthMiddleware for method ".$request->getMethod()." on '".$request->getUri()->getPath()."'".(isset($environment['HTTP_ORIGIN']) ? " with origin ".$environment['HTTP_ORIGIN'] : ''), PEAR_LOG_INFO);
+
$userobj = null;
+ /* Do not rely on $userobj being an object. It can be true, if a
+ * former authentication middleware has allowed access without
+ * authentification as a user. The paperless extension does this,
+ * for some endpoints, e.g. to get some general api information.
+ */
if($this->container->has('userobj'))
- $userobj = $this->container->userobj;
+ $userobj = $this->container->get('userobj');
if($userobj) {
- $response = $next($request, $response);
+ $logger->log("Already authenticated. Pass on to next middleware", PEAR_LOG_INFO);
+ $response = $handler->handle($request);
return $response;
}
- $logger->log("Invoke middleware for method ".$request->getMethod()." on '".$request->getUri()->getPath()."'", PEAR_LOG_INFO);
- $logger->log("Access with method ".$request->getMethod()." on '".$request->getUri()->getPath()."'".(isset($this->container->environment['HTTP_ORIGIN']) ? " with origin ".$this->container->environment['HTTP_ORIGIN'] : ''), PEAR_LOG_INFO);
- if($settings->_apiOrigin && isset($this->container->environment['HTTP_ORIGIN'])) {
+ //$environment = $this->container->environment; // Slim 3
+ $environment = $request->getServerParams();
+
+ if($settings->_apiOrigin && isset($environment['HTTP_ORIGIN'])) {
$logger->log("Checking origin", PEAR_LOG_DEBUG);
$origins = explode(',', $settings->_apiOrigin);
- if(!in_array($this->container->environment['HTTP_ORIGIN'], $origins)) {
- return $response->withStatus(403);
+ if(!in_array($environment['HTTP_ORIGIN'], $origins)) {
+ $response = $this->responsefactory->createResponse();
+ $response = $response->withHeader('Content-Type', 'application/json');
+ $response = $response->withStatus(403);
+ $response->getBody()->write(
+ (string)json_encode(
+ ['success'=>false, 'message'=>'Invalid origin', 'data'=>''],
+ JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR
+ )
+ );
+ return $response;
}
}
/* The preflight options request doesn't have authorization in the header. So
* don't even try to authorize.
*/
+ $path = $environment['PATH_INFO'] ?? '';
if($request->getMethod() == 'OPTIONS') {
$logger->log("Received preflight options request", PEAR_LOG_DEBUG);
- } elseif(!in_array($request->getUri()->getPath(), array('login')) && substr($request->getUri()->getPath(), 0, 5) != 'echo/' && $request->getUri()->getPath() != 'version') {
+ } elseif(!in_array($path, array('/login')) && substr($path, 0, 6) != '/echo/' && $path != '/version') {
$userobj = null;
- if(!empty($this->container->environment['HTTP_AUTHORIZATION']) && !empty($settings->_apiKey) && !empty($settings->_apiUserId)) {
- $logger->log("Authorization key: ".$this->container->environment['HTTP_AUTHORIZATION'], PEAR_LOG_DEBUG);
- if($settings->_apiKey == $this->container->environment['HTTP_AUTHORIZATION']) {
+// $logger->log(var_export($environment, true), PEAR_LOG_DEBUG);
+ if(!empty($environment['HTTP_AUTHORIZATION']) && !empty($settings->_apiKey) && !empty($settings->_apiUserId)) {
+ $logger->log("Authorization key: ".$environment['HTTP_AUTHORIZATION'], PEAR_LOG_DEBUG);
+ if($settings->_apiKey == $environment['HTTP_AUTHORIZATION']) {
if(!($userobj = $dms->getUser($settings->_apiUserId))) {
- return $response->withJson(array('success'=>false, 'message'=>'Invalid user associated with api key', 'data'=>''), 403);
+ $response = $this->responsefactory->createResponse();
+ $response = $response->withHeader('Content-Type', 'application/json');
+ $response = $response->withStatus(403);
+ $response->getBody()->write(
+ (string)json_encode(
+ ['success'=>false, 'message'=>'Invalid user associated with api key', 'data'=>''],
+ JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR
+ )
+ );
+ return $response;
}
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Wrong api key', 'data'=>''), 403);
+ $response = $this->responsefactory->createResponse();
+ $response = $response->withHeader('Content-Type', 'application/json');
+ $response = $response->withStatus(403);
+ $response->getBody()->write(
+ (string)json_encode(
+ ['success'=>false, 'message'=>'Wrong api key', 'data'=>''],
+ JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR
+ )
+ );
+ return $response;
}
$logger->log("Login with apikey as '".$userobj->getLogin()."' successful", PEAR_LOG_INFO);
} else {
+ $logger->log("Checking for valid session", PEAR_LOG_INFO);
require_once("../inc/inc.ClassSession.php");
$session = new SeedDMS_Session($dms->getDb());
if (isset($_COOKIE["mydms_session"])) {
+ $logger->log("Found cookie for session", PEAR_LOG_INFO);
$dms_session = $_COOKIE["mydms_session"];
$logger->log("Session key: ".$dms_session, PEAR_LOG_DEBUG);
if(!$resArr = $session->load($dms_session)) {
/* Delete Cookie */
setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot);
$logger->log("Session for id '".$dms_session."' has gone", PEAR_LOG_ERR);
- return $response->withJson(array('success'=>false, 'message'=>'Session has gone', 'data'=>''), 403);
+ $response = $this->responsefactory->createResponse();
+ $response = $response->withHeader('Content-Type', 'application/json');
+ $response = $response->withStatus(403);
+ $response->getBody()->write(
+ (string)json_encode(
+ ['success'=>false, 'message'=>'Session has gone', 'data'=>''],
+ JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR
+ )
+ );
+ return $response;
}
/* Load user data */
@@ -2961,41 +3195,85 @@ class RestapiAuth { /* {{{ */
setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot);
if($settings->_enableGuestLogin) {
if(!($userobj = $dms->getUser($settings->_guestID)))
- return $response->withJson(array('success'=>false, 'message'=>'Could not get guest login', 'data'=>''), 403);
+ $response = $this->responsefactory->createResponse();
+ $response = $response->withHeader('Content-Type', 'application/json');
+ $response = $response->withStatus(403);
+ $response->getBody()->write(
+ (string)json_encode(
+ ['success'=>false, 'message'=>'Could not get guest login', 'data'=>''],
+ JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR
+ )
+ );
+ return $response;
} else
- return $response->withJson(array('success'=>false, 'message'=>'Login as guest disabled', 'data'=>''), 403);
+ $response = $this->responsefactory->createResponse();
+ $response = $response->withHeader('Content-Type', 'application/json');
+ $response = $response->withStatus(403);
+ $response->getBody()->write(
+ (string)json_encode(
+ ['success'=>false, 'message'=>'Login as guest disable', 'data'=>''],
+ JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR
+ )
+ );
+ return $response;
}
+ $logger->log("Authorization as user '".$userobj->getLogin()."'", PEAR_LOG_DEBUG);
if($userobj->isAdmin()) {
if($resArr["su"]) {
- if(!($userobj = $dms->getUser($resArr["su"])))
- return $response->withJson(array('success'=>false, 'message'=>'Cannot substitute user', 'data'=>''), 403);
+ if(!($userobj = $dms->getUser($resArr["su"]))) {
+ $response = $this->responsefactory->createResponse();
+ $response = $response->withHeader('Content-Type', 'application/json');
+ $response = $response->withStatus(403);
+ $response->getBody()->write(
+ (string)json_encode(
+ ['success'=>false, 'message'=>'Cannot substitute user', 'data'=>''],
+ JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR
+ )
+ );
+ return $response;
+ }
}
}
-// $logger->log("Login with user name '".$userobj->getLogin()."' successful", PEAR_LOG_INFO);
+ $logger->log("Login with user name '".$userobj->getLogin()."' successful", PEAR_LOG_INFO);
$dms->setUser($userobj);
} else {
- return $response->withJson(array('success'=>false, 'message'=>'Missing session cookie', 'data'=>''), 403);
+ $response = $this->responsefactory->createResponse();
+ $response = $response->withHeader('Content-Type', 'application/json');
+ $response = $response->withStatus(403);
+ $response->getBody()->write(
+ (string)json_encode(
+ ['success'=>false, 'message'=>'Missing session cookie', 'data'=>''],
+ JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR
+ )
+ );
+ return $response;
}
}
- $this->container['userobj'] = $userobj;
+ $this->container->set('userobj', $userobj);
}
- $response = $next($request, $response);
+ $response = $handler->handle($request);
+ $logger->log("End AuthMiddleware for method ".$request->getMethod()." on '".$request->getUri()->getPath()."'", PEAR_LOG_INFO);
return $response;
}
} /* }}} */
-$app = new \Slim\App();
+$containerBuilder = new ContainerBuilder();
+$c = $containerBuilder->build();
+AppFactory::setContainer($c);
+$app = AppFactory::create();
$container = $app->getContainer();
-$container['dms'] = $dms;
-$container['config'] = $settings;
-$container['conversionmgr'] = $conversionmgr;
-$container['logger'] = $logger;
-$container['fulltextservice'] = $fulltextservice;
-$container['notifier'] = $notifier;
-$container['authenticator'] = $authenticator;
+$container->set('dms', $dms);
+$container->set('config', $settings);
+$container->set('conversionmgr', $conversionmgr);
+$container->set('logger', $logger);
+$container->set('fulltextservice', $fulltextservice);
+$container->set('notifier', $notifier);
+$container->set('authenticator', $authenticator);
-$app->add(new RestapiAuth($container));
+$app->setBasePath($settings->_httpRoot."restapi/index.php");
+
+$app->add(new RestapiAuthMiddleware($container, $app->getResponseFactory()));
if(isset($GLOBALS['SEEDDMS_HOOKS']['initRestAPI'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['initRestAPI'] as $hookObj) {
@@ -3005,95 +3283,102 @@ if(isset($GLOBALS['SEEDDMS_HOOKS']['initRestAPI'])) {
}
}
+$app->addErrorMiddleware(true, true, true);
+
+$app->add(new RestapiCorsMiddleware($container));
+
+/* Without the BodyParsingMiddleware the body of PUT Request will
+ * not be parsed in Slim4
+ */
+$app->addBodyParsingMiddleware();
+
// 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', \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->put('/folder/{id}/attribute/{attrdefid}', \RestapiController::class.':setFolderAttribute');
-$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}/version/{version}/attributes', \RestapiController::class.':getDocumentContentAttributes');
-$app->put('/document/{id}/version/{version}/attribute/{attrdefid}', \RestapiController::class.':setDocumentContentAttribute');
-$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->put('/document/{id}/attribute/{attrdefid}', \RestapiController::class.':setDocumentAttribute');
-$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->post('/document/{id}/category/{catid}', \RestapiController::class.':addDocumentCategory');
-$app->put('/document/{id}/owner/{userid}', \RestapiController::class.':setDocumentOwner');
-$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->get('/roles', \RestapiController::class.':getRoles');
-$app->post('/roles', \RestapiController::class.':createRole');
-$app->get('/roles/{id}', \RestapiController::class.':getRole');
-$app->delete('/roles/{id}', \RestapiController::class.':deleteRole');
-$app->post('/groups', \RestapiController::class.':createGroup');
-$app->get('/groups', \RestapiController::class.':getGroups');
-$app->delete('/groups/{id}', \RestapiController::class.':deleteGroup');
-$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/{data}', \TestController::class.':echoData');
-$app->get('/version', \TestController::class.':version');
-$app->get('/statstotal', \RestapiController::class.':getStatsTotal');
+$app->post('/login', \SeedDMS_RestapiController::class.':doLogin');
+$app->get('/logout', \SeedDMS_RestapiController::class.':doLogout');
+$app->get('/account', \SeedDMS_RestapiController::class.':getAccount');
+$app->get('/search', \SeedDMS_RestapiController::class.':doSearch');
+$app->get('/searchbyattr', \SeedDMS_RestapiController::class.':doSearchByAttr');
+$app->get('/folder', \SeedDMS_RestapiController::class.':getFolder');
+$app->get('/folder/{id}', \SeedDMS_RestapiController::class.':getFolder');
+$app->post('/folder/{id}/move/{folderid}', \SeedDMS_RestapiController::class.':moveFolder');
+$app->delete('/folder/{id}', \SeedDMS_RestapiController::class.':deleteFolder');
+$app->get('/folder/{id}/children', \SeedDMS_RestapiController::class.':getFolderChildren');
+$app->get('/folder/{id}/parent', \SeedDMS_RestapiController::class.':getFolderParent');
+$app->get('/folder/{id}/path', \SeedDMS_RestapiController::class.':getFolderPath');
+$app->get('/folder/{id}/attributes', \SeedDMS_RestapiController::class.':getFolderAttributes');
+$app->put('/folder/{id}/attribute/{attrdefid}', \SeedDMS_RestapiController::class.':setFolderAttribute');
+$app->post('/folder/{id}/folder', \SeedDMS_RestapiController::class.':createFolder');
+$app->put('/folder/{id}/document', \SeedDMS_RestapiController::class.':uploadDocumentPut');
+$app->post('/folder/{id}/document', \SeedDMS_RestapiController::class.':uploadDocument');
+$app->get('/document/{id}', \SeedDMS_RestapiController::class.':getDocument');
+$app->post('/document/{id}/attachment', \SeedDMS_RestapiController::class.':uploadDocumentFile');
+$app->post('/document/{id}/update', \SeedDMS_RestapiController::class.':updateDocument');
+$app->delete('/document/{id}', \SeedDMS_RestapiController::class.':deleteDocument');
+$app->post('/document/{id}/move/{folderid}', \SeedDMS_RestapiController::class.':moveDocument');
+$app->get('/document/{id}/content', \SeedDMS_RestapiController::class.':getDocumentContent');
+$app->get('/document/{id}/versions', \SeedDMS_RestapiController::class.':getDocumentVersions');
+$app->get('/document/{id}/version/{version}', \SeedDMS_RestapiController::class.':getDocumentVersion');
+$app->put('/document/{id}/version/{version}', \SeedDMS_RestapiController::class.':updateDocumentVersion');
+$app->get('/document/{id}/version/{version}/attributes', \SeedDMS_RestapiController::class.':getDocumentContentAttributes');
+$app->put('/document/{id}/version/{version}/attribute/{attrdefid}', \SeedDMS_RestapiController::class.':setDocumentContentAttribute');
+$app->get('/document/{id}/files', \SeedDMS_RestapiController::class.':getDocumentFiles');
+$app->get('/document/{id}/file/{fileid}', \SeedDMS_RestapiController::class.':getDocumentFile');
+$app->get('/document/{id}/links', \SeedDMS_RestapiController::class.':getDocumentLinks');
+$app->post('/document/{id}/link/{documentid}', \SeedDMS_RestapiController::class.':addDocumentLink');
+$app->get('/document/{id}/attributes', \SeedDMS_RestapiController::class.':getDocumentAttributes');
+$app->put('/document/{id}/attribute/{attrdefid}', \SeedDMS_RestapiController::class.':setDocumentAttribute');
+$app->get('/document/{id}/preview/{version}/{width}', \SeedDMS_RestapiController::class.':getDocumentPreview');
+$app->delete('/document/{id}/categories', \SeedDMS_RestapiController::class.':removeDocumentCategories');
+$app->delete('/document/{id}/category/{catid}', \SeedDMS_RestapiController::class.':removeDocumentCategory');
+$app->post('/document/{id}/category/{catid}', \SeedDMS_RestapiController::class.':addDocumentCategory');
+$app->put('/document/{id}/owner/{userid}', \SeedDMS_RestapiController::class.':setDocumentOwner');
+$app->put('/account/fullname', \SeedDMS_RestapiController::class.':setFullName');
+$app->put('/account/email', \SeedDMS_RestapiController::class.':setEmail');
+$app->get('/account/documents/locked', \SeedDMS_RestapiController::class.':getLockedDocuments');
+$app->get('/users', \SeedDMS_RestapiController::class.':getUsers');
+$app->delete('/users/{id}', \SeedDMS_RestapiController::class.':deleteUser');
+$app->post('/users', \SeedDMS_RestapiController::class.':createUser');
+$app->get('/users/{id}', \SeedDMS_RestapiController::class.':getUserById');
+$app->put('/users/{id}/disable', \SeedDMS_RestapiController::class.':setDisabledUser');
+$app->put('/users/{id}/password', \SeedDMS_RestapiController::class.':changeUserPassword');
+$app->get('/roles', \SeedDMS_RestapiController::class.':getRoles');
+$app->post('/roles', \SeedDMS_RestapiController::class.':createRole');
+$app->get('/roles/{id}', \SeedDMS_RestapiController::class.':getRole');
+$app->delete('/roles/{id}', \SeedDMS_RestapiController::class.':deleteRole');
+$app->put('/users/{id}/quota', \SeedDMS_RestapiController::class.':changeUserQuota');
+$app->put('/users/{id}/homefolder/{folderid}', \SeedDMS_RestapiController::class.':changeUserHomefolder');
+$app->post('/groups', \SeedDMS_RestapiController::class.':createGroup');
+$app->get('/groups', \SeedDMS_RestapiController::class.':getGroups');
+$app->delete('/groups/{id}', \SeedDMS_RestapiController::class.':deleteGroup');
+$app->get('/groups/{id}', \SeedDMS_RestapiController::class.':getGroup');
+$app->put('/groups/{id}/addUser', \SeedDMS_RestapiController::class.':addUserToGroup');
+$app->put('/groups/{id}/removeUser', \SeedDMS_RestapiController::class.':removeUserFromGroup');
+$app->put('/folder/{id}/setInherit', \SeedDMS_RestapiController::class.':setFolderInheritsAccess');
+$app->put('/folder/{id}/owner/{userid}', \SeedDMS_RestapiController::class.':setFolderOwner');
+$app->put('/folder/{id}/access/group/add', \SeedDMS_RestapiController::class.':addGroupAccessToFolder'); //
+$app->put('/folder/{id}/access/user/add', \SeedDMS_RestapiController::class.':addUserAccessToFolder'); //
+$app->put('/folder/{id}/access/group/remove', \SeedDMS_RestapiController::class.':removeGroupAccessFromFolder');
+$app->put('/folder/{id}/access/user/remove', \SeedDMS_RestapiController::class.':removeUserAccessFromFolder');
+$app->put('/folder/{id}/access/clear', \SeedDMS_RestapiController::class.':clearFolderAccessList');
+$app->get('/categories', \SeedDMS_RestapiController::class.':getCategories');
+$app->get('/categories/{id}', \SeedDMS_RestapiController::class.':getCategory');
+$app->delete('/categories/{id}', \SeedDMS_RestapiController::class.':deleteCategory');
+$app->post('/categories', \SeedDMS_RestapiController::class.':createCategory');
+$app->put('/categories/{id}/name', \SeedDMS_RestapiController::class.':changeCategoryName');
+$app->get('/attributedefinitions', \SeedDMS_RestapiController::class.':getAttributeDefinitions');
+$app->get('/attributedefinitions/{id}', \SeedDMS_RestapiController::class.':getAttributeDefinition');
+$app->put('/attributedefinitions/{id}/name', \SeedDMS_RestapiController::class.':changeAttributeDefinitionName');
+$app->get('/echo/{data}', \SeedDMS_TestController::class.':echoData');
+$app->get('/version', \SeedDMS_TestController::class.':version');
+$app->get('/statstotal', \SeedDMS_RestapiController::class.':getStatsTotal');
if(isset($GLOBALS['SEEDDMS_HOOKS']['initRestAPI'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['initRestAPI'] as $hookObj) {
diff --git a/restapi/swagger.yaml b/restapi/swagger.yaml
index f19c5299c..5fc22fa8b 100644
--- a/restapi/swagger.yaml
+++ b/restapi/swagger.yaml
@@ -13,9 +13,6 @@ info:
license:
name: "Apache 2.0"
url: "http://www.apache.org/licenses/LICENSE-2.0.html"
-servers:
- - url:
- description: Current host server
host: ""
basePath: "_httpRoot; ?>restapi/index.php"
tags:
@@ -406,6 +403,92 @@ paths:
$ref: "#/definitions/ApiResponse"
security:
- api_key: []
+ /users/{id}/quota:
+ put:
+ tags:
+ - "user"
+ summary: "Change quota of user by ID"
+ description: "Change the quota of a single user"
+ operationId: "changeUserQuota"
+ produces:
+ - "application/json"
+ consumes:
+ - "application/x-www-form-urlencoded"
+ parameters:
+ - name: "id"
+ in: "path"
+ description: "ID of user"
+ required: true
+ type: "integer"
+ format: "int64"
+ - name: "quota"
+ in: "formData"
+ required: true
+ type: "integer"
+ format: "int64"
+ description: "New quota"
+ 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: []
+ /users/{id}/homefolder/{folderid}:
+ put:
+ tags:
+ - "user"
+ summary: "Change quota of user by ID"
+ description: "Change the quota of a single user"
+ operationId: "changeUserHomefolder"
+ produces:
+ - "application/json"
+ consumes:
+ - "application/x-www-form-urlencoded"
+ parameters:
+ - name: "id"
+ in: "path"
+ description: "ID of user"
+ required: true
+ type: "integer"
+ format: "int64"
+ - name: "folderid"
+ in: "path"
+ description: "ID of folder"
+ required: true
+ type: "integer"
+ format: "int64"
+ 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 or folder not found"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ security:
+ - api_key: []
/groups:
get:
tags:
@@ -466,6 +549,161 @@ paths:
$ref: "#/definitions/ApiResponse"
security:
- api_key: []
+ /groups/{id}:
+ get:
+ tags:
+ - "group"
+ summary: "Find group by ID"
+ description: "Returns a single group"
+ operationId: "getGroupById"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "id"
+ in: "path"
+ description: "ID of group to return"
+ required: true
+ type: "integer"
+ format: "int64"
+ responses:
+ "200":
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/ApiResponseUser"
+ "404":
+ description: "Group not found"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ security:
+ - api_key: []
+ delete:
+ tags:
+ - "group"
+ summary: "Delete group by ID"
+ description: "Delete a single group"
+ operationId: "deleteGroupById"
+ produces:
+ - "application/json"
+ parameters:
+ - name: "id"
+ in: "path"
+ description: "ID of group to delete"
+ required: true
+ type: "integer"
+ format: "int64"
+ responses:
+ "200":
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ "500":
+ description: "Error deleting group"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ "403":
+ description: "No access"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ "404":
+ description: "Group not found"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ security:
+ - api_key: []
+ /groups/{id}/addUser:
+ put:
+ tags:
+ - "group"
+ summary: "Add user to group"
+ description: "Adds an existing user as a new member of a group"
+ operationId: "addUserToGroup"
+ produces:
+ - "application/json"
+ consumes:
+ - "application/x-www-form-urlencoded"
+ parameters:
+ - name: "id"
+ in: "path"
+ description: "ID of group"
+ required: true
+ type: "integer"
+ format: "int64"
+ - name: "userid"
+ in: "formData"
+ description: "ID of user"
+ required: true
+ type: "integer"
+ format: "int64"
+ 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 or group not found"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ "500":
+ description: "Internal error"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ security:
+ - api_key: []
+ /groups/{id}/removeUser:
+ put:
+ tags:
+ - "group"
+ summary: "Remove user from group"
+ description: "Remove a user as a new member of a group"
+ operationId: "removeUserToGroup"
+ produces:
+ - "application/json"
+ consumes:
+ - "application/x-www-form-urlencoded"
+ parameters:
+ - name: "id"
+ in: "path"
+ description: "ID of group"
+ required: true
+ type: "integer"
+ format: "int64"
+ - name: "userid"
+ in: "formData"
+ description: "ID of user"
+ required: true
+ type: "integer"
+ format: "int64"
+ 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 or group not found"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ "500":
+ description: "Internal error"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ security:
+ - api_key: []
/document/{id}:
get:
tags:
@@ -565,7 +803,8 @@ paths:
"200":
description: "preview image file"
schema:
- type: "file"
+ type: "string"
+ format: "binary"
"403":
description: "No access"
schema:
@@ -598,7 +837,8 @@ paths:
"200":
description: "content file"
schema:
- type: "file"
+ type: "string"
+ format: "binary"
"403":
description: "No access"
schema:
@@ -637,7 +877,8 @@ paths:
"200":
description: "attached file"
schema:
- type: "file"
+ type: "string"
+ format: "binary"
"403":
description: "No access"
schema:
@@ -676,7 +917,8 @@ paths:
"200":
description: "content file"
schema:
- type: "file"
+ type: "string"
+ format: "binary"
"403":
description: "No access"
schema:
@@ -1510,7 +1752,7 @@ paths:
produces:
- "application/json"
consumes:
- - "application/x-www-form-urlencoded"
+ - "multipart/form-data"
parameters:
- name: "id"
in: "path"
@@ -1557,6 +1799,53 @@ paths:
$ref: "#/definitions/ApiResponse"
security:
- api_key: []
+ /folder/{id}/owner/{userid}:
+ post:
+ tags:
+ - "folder"
+ summary: "Set owner of folder"
+ description: "Set owner of folder"
+ operationId: "setFolderOwner"
+ produces:
+ - "application/json"
+ consumes:
+ - "application/x-www-form-urlencoded"
+ parameters:
+ - name: "id"
+ in: "path"
+ description: "ID of folder."
+ type: "integer"
+ required: true
+ format: "int64"
+ - name: "userid"
+ in: "path"
+ description: "ID of user."
+ type: "integer"
+ required: true
+ format: "int64"
+ responses:
+ "201":
+ description: "successful operation"
+ schema:
+ $ref: "#/definitions/ApiResponse"
+ "400":
+ description: "No folder or user given"
+ 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: []
/categories:
get:
tags:
@@ -1782,15 +2071,21 @@ paths:
description: "Invalid status value"
security:
- api_key: []
- /echo:
+ /echo/{data}:
get:
tags:
- "misc"
- summary: "Return what was send in the body"
- description: "Just returns the body content"
+ summary: "Return what was send in the path"
+ description: "Just returns the path"
operationId: "echoData"
produces:
- "application/json"
+ parameters:
+ - name: "data"
+ in: "path"
+ description: "Data to be echoed"
+ required: true
+ type: "string"
responses:
"200":
description: "successful operation"
diff --git a/views/bootstrap/class.AddFile.php b/views/bootstrap/class.AddFile.php
index a7b375e55..468459b15 100644
--- a/views/bootstrap/class.AddFile.php
+++ b/views/bootstrap/class.AddFile.php
@@ -35,11 +35,16 @@ class SeedDMS_View_AddFile extends SeedDMS_Theme_Style {
$enablelargefileupload = $this->params['enablelargefileupload'];
$partitionsize = $this->params['partitionsize'];
$maxuploadsize = $this->params['maxuploadsize'];
+ $dropfolderdir = $this->params['dropfolderdir'];
+
header('Content-Type: application/javascript; charset=UTF-8');
parent::jsTranslations(array('js_form_error', 'js_form_errors'));
if($enablelargefileupload)
$this->printFineUploaderJs($this->params['settings']->_httpRoot.'op/op.UploadChunks.php', $partitionsize, $maxuploadsize);
+ if($dropfolderdir) {
+ $this->printDropFolderChooserJs("addfileform");
+ }
$this->printFileChooserJs();
?>
@@ -58,14 +63,18 @@ $(document).ready( function() {
}
return false;
}, "");
- $("#form1").validate({
+ $("#addfileform").validate({
debug: false,
ignore: ":hidden:not(.do_validate)",
submitHandler: function(form) {
- userfileuploader.uploadStoredFiles();
+ /* fileuploader may not have any files if drop folder is used */
+ if(userfileuploader.getUploads().length)
+ userfileuploader.uploadStoredFiles();
+ else
+ form.submit();
},
- fineuploaderuuids: {
- fineuploader: [ userfileuploader ]
+ 'userfile-fine-uploader-uuids': {
+ fineuploader: [ userfileuploader, $('#dropfolderfileaddfileform') ]
}
'userfile[]': {
- required: true
+ require_from_group: [1, ".fileupload-group"],
+ maxsize: = $maxuploadsize ?>
+ },
+ dropfolderfileaddfileform: {
+ require_from_group: [1, ".fileupload-group"]
}
params['enablelargefileupload'];
$uploadedattachmentispublic = $this->params['uploadedattachmentispublic'];
$maxuploadsize = $this->params['maxuploadsize'];
+ $dropfolderdir = $this->params['dropfolderdir'];
$this->htmlAddHeader(''."\n", 'js');
$this->htmlAddHeader(''."\n", 'js');
@@ -132,7 +146,7 @@ $(document).ready( function() {
?>
-