diff --git a/.htaccess b/.htaccess index f1ec9a858..99425bf93 100644 --- a/.htaccess +++ b/.htaccess @@ -1,5 +1,10 @@ Options -Indexes + +Header set Strict-Transport-Security: "max-age=15768000; includeSubDomains; preload" +Header set X-Content-Type-Options: "nosniff" + + RewriteEngine On RewriteRule ^favicon.ico$ styles/bootstrap/favicon.ico [L] diff --git a/CHANGELOG b/CHANGELOG index eccc241c7..db1368bde 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,32 @@ +-------------------------------------------------------------------------------- + Changes in version 5.1.22 +-------------------------------------------------------------------------------- +- remove document/folder from index before adding a new one after editing the + meta data +- fix potential clickjacking attack with manipulated email address of a user +- loading more items on ViewFolder page obeys sort order +- fix possible csrf attacks due to missing form token + (CVE-2021–26215, CVE-2021–26216) +- show an error msg on the documents detail page if the checksum of version + mismatch +- overhaul notifications, type of receiver is now passed to notification + service which allows a more fine grained filtering +- show difference in number of documents on chart page +- list users on Folder Notifiy page which has been disabled +- use two column layout on AddDocument page +- initial support for sending html mails (not used yet) +- fix security hole which allowed under certain conditions to access + arbitrary files +- use mandatory reviewers/approvers when adding files by webdav +- set some http security headers in .htaccess +- add searching for last date of a document status change +- fix a potential problem when remove a document with files attached to + previous versions +- search hits in typeahead search are now links to the folder/document. + Only the first item in the list still opens the search page. +- make sure encryption key is always, prevents error when settings are + first saved and encryption key was not set initially + -------------------------------------------------------------------------------- Changes in version 5.1.21 -------------------------------------------------------------------------------- diff --git a/Makefile b/Makefile index 11de07b63..30f8a8a4b 100644 --- a/Makefile +++ b/Makefile @@ -4,12 +4,6 @@ VIEWS ?= bootstrap NODISTFILES=utils/importmail.php utils/seedddms-importmail utils/remote-email-upload utils/remote-upload utils/da-bv-reminder.php utils/seeddms-da-bv-reminder .svn .gitignore -EXTENSIONS := \ - dynamic_content.tar.gz\ - login_action.tar.gz\ - example.tar.gz\ - tbs_template.tar.gz - PHPDOC=~/Downloads/phpDocumentor.phar dist: @@ -59,20 +53,6 @@ repository: (cd tmp; tar --exclude=.svn -czvf ../seeddms-repository-$(VERSION).tar.gz seeddms-repository-$(VERSION)) rm -rf tmp -dynamic_content.tar.gz: ext/dynamic_content - tar czvf dynamic_content.tar.gz ext/dynamic_content - -example.tar.gz: ext/example - tar czvf example.tar.gz ext/example - -login_action.tar.gz: ext/login_action - tar czvf login_action.tar.gz ext/login_action - -tbs_template.tar.gz: ext/tbs_template - tar czvf tbs_template.tar.gz ext/tbs_template - -extensions: $(EXTENSIONS) - doc: $(PHPDOC) -d SeedDMS_Core --ignore 'getusers.php,getfoldertree.php,config.php,reverselookup.php' --force -t html diff --git a/SeedDMS_Core/Core/inc.ClassAttribute.php b/SeedDMS_Core/Core/inc.ClassAttribute.php index b6f342295..3e77a5c16 100644 --- a/SeedDMS_Core/Core/inc.ClassAttribute.php +++ b/SeedDMS_Core/Core/inc.ClassAttribute.php @@ -177,12 +177,14 @@ class SeedDMS_Core_Attribute { /* {{{ */ if($values) { $vsep = $this->getValueSetSeparator(); if($valueset) { + /* Validation should have been done before $error = false; foreach($values as $v) { if(!in_array($v, $valueset)) { $error = true; break; } } if($error) return false; + */ $valuesetstr = $this->_attrdef->getValueSet(); $value = $vsep.implode($vsep, $values); } else { @@ -203,12 +205,14 @@ class SeedDMS_Core_Attribute { /* {{{ */ } if($valueset) { + /* Validation should have been done before $error = false; foreach($values as $v) { if(!in_array($v, $valueset)) { $error = true; break; } } if($error) return false; + */ $value = $valuesetstr[0].implode($valuesetstr[0], $values); } else { $value = ','.implode(',', $values); diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 807da2020..922f9e918 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -893,14 +893,20 @@ class SeedDMS_Core_DMS { * @param string $listtype type of document list, can be 'AppRevByMe', * 'AppRevOwner', 'ReceiptByMe', 'ReviseByMe', 'LockedByMe', 'MyDocs' * @param SeedDMS_Core_User $param1 user - * @param bool $param2 set to true - * if 'ReviewByMe', 'ApproveByMe', 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' - * shall return even documents І have already taken care of. + * @param bool|integer|string $param2 if set to true + * 'ReviewByMe', 'ApproveByMe', 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' + * will also return documents which the reviewer, approver, etc. + * has already taken care of. If set to false only + * untouched documents will be returned. In case of 'ExpiredOwner' this + * parameter contains the number of days (a negative number is allowed) + * relativ to the current date or a date in format 'yyyy-mm-dd' + * (even in the past). * @param string $param3 sort list by this field * @param string $param4 order direction + * @param bool $param5 set to false if expired documents shall not be considered * @return array|bool */ - function getDocumentList($listtype, $param1=null, $param2=false, $param3='', $param4='') { /* {{{ */ + function getDocumentList($listtype, $param1=null, $param2=false, $param3='', $param4='', $param5=true) { /* {{{ */ /* The following query will get all documents and lots of additional * information. It requires the two temporary tables ttcontentid and * ttstatid. @@ -989,7 +995,10 @@ class SeedDMS_Core_DMS { } if (strlen($docCSV)>0) { - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.", ".S_EXPIRED.") ". + $docstatarr = array(S_DRAFT_REV, S_DRAFT_APP); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") ". "AND `tblDocuments`.`id` IN (" . $docCSV . ") ". "ORDER BY `statusDate` DESC"; } else { @@ -1027,7 +1036,10 @@ class SeedDMS_Core_DMS { $queryStr .= "OR `tblDocumentReviewers`.`type` = 1 AND `tblDocumentReviewers`.`required` IN (".implode(',', $groups).") "; $queryStr .= ") "; } - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_EXPIRED.") "; + $docstatarr = array(S_DRAFT_REV); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") "; if(!$param2) $queryStr .= " AND `tblDocumentReviewLog`.`status` = 0 "; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; @@ -1106,7 +1118,10 @@ class SeedDMS_Core_DMS { $queryStr .= "OR `tblDocumentApprovers`.`type` = 1 AND `tblDocumentApprovers`.`required` IN (".implode(',', $groups).")"; $queryStr .= ") "; } - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_APP.", ".S_EXPIRED.") "; + $docstatarr = array(S_DRAFT_APP); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") "; if(!$param2) $queryStr .= " AND `tblDocumentApproveLog`.`status` = 0 "; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; @@ -1141,7 +1156,10 @@ class SeedDMS_Core_DMS { } if (strlen($docCSV)>0) { - $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_APP.", ".S_EXPIRED.") ". + $docstatarr = array(S_DRAFT_APP); + if($param5) + $docstatarr[] = S_EXPIRED; + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".implode(',', $docstatarr).") ". "AND `tblDocuments`.`id` IN (" . $docCSV . ") "; //$queryStr .= "ORDER BY `statusDate` DESC"; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; @@ -1444,7 +1462,7 @@ class SeedDMS_Core_DMS { if(is_array($query)) { foreach(array('limit', 'offset', 'logicalmode', 'searchin', 'startFolder', 'owner', 'status', 'creationstartdate', 'creationenddate', 'modificationstartdate', 'modificationenddate', 'categories', 'attributes', 'mode', 'expirationstartdate', 'expirationenddate') as $paramname) ${$paramname} = isset($query[$paramname]) ? $query[$paramname] : ${$paramname}; - foreach(array('orderby') as $paramname) + foreach(array('orderby', 'statusstartdate', 'statusenddate') as $paramname) ${$paramname} = isset($query[$paramname]) ? $query[$paramname] : ''; $query = isset($query['query']) ? $query['query'] : ''; } @@ -1514,10 +1532,22 @@ class SeedDMS_Core_DMS { if(is_string($attribute)) $attribute = array($attribute); $searchAttributes[] = "EXISTS (SELECT NULL FROM `tblFolderAttributes` WHERE `tblFolderAttributes`.`attrdef`=".$attrdefid." AND (`tblFolderAttributes`.`value` like '%".$valueset[0].implode("%' OR `tblFolderAttributes`.`value` like '%".$valueset[0], $attribute)."%') AND `tblFolderAttributes`.`folder`=`tblFolders`.`id`)"; - } else + } else { $searchAttributes[] = "EXISTS (SELECT NULL FROM `tblFolderAttributes` WHERE `tblFolderAttributes`.`attrdef`=".$attrdefid." AND `tblFolderAttributes`.`value`='".$attribute."' AND `tblFolderAttributes`.`folder`=`tblFolders`.`id`)"; - } else - $searchAttributes[] = "EXISTS (SELECT NULL FROM `tblFolderAttributes` WHERE `tblFolderAttributes`.`attrdef`=".$attrdefid." AND `tblFolderAttributes`.`value` like '%".$attribute."%' AND `tblFolderAttributes`.`folder`=`tblFolders`.`id`)"; + } + } else { + if($attrdef->getType() == SeedDMS_Core_AttributeDefinition::type_date && is_array($attribute)) { + $kkll = []; + if(!empty($attribute['from'])) + $kkll[] = "`tblFolderAttributes`.`value`>='".$attribute['from']."'"; + if(!empty($attribute['to'])) + $kkll[] = "`tblFolderAttributes`.`value`<='".$attribute['to']."'"; + if($kkll) + $searchAttributes[] = "EXISTS (SELECT NULL FROM `tblFolderAttributes` WHERE `tblFolderAttributes`.`attrdef`=".$attrdefid." AND ".implode(' AND ', $kkll)." AND `tblFolderAttributes`.`folder`=`tblFolders`.`id`)"; + } else { + $searchAttributes[] = "EXISTS (SELECT NULL FROM `tblFolderAttributes` WHERE `tblFolderAttributes`.`attrdef`=".$attrdefid." AND `tblFolderAttributes`.`value` like '%".$attribute."%' AND `tblFolderAttributes`.`folder`=`tblFolders`.`id`)"; + } + } } } } @@ -1528,7 +1558,7 @@ class SeedDMS_Core_DMS { if ($creationstartdate) { $startdate = SeedDMS_Core_DMS::makeTimeStamp($creationstartdate['hour'], $creationstartdate['minute'], $creationstartdate['second'], $creationstartdate['year'], $creationstartdate["month"], $creationstartdate["day"]); if ($startdate) { - $searchCreateDate .= "`tblFolders`.`date` >= ".$startdate; + $searchCreateDate .= "`tblFolders`.`date` >= ".$this->db->qstr($startdate); } } if ($creationenddate) { @@ -1537,7 +1567,7 @@ class SeedDMS_Core_DMS { /** @noinspection PhpUndefinedVariableInspection */ if($startdate) $searchCreateDate .= " AND "; - $searchCreateDate .= "`tblFolders`.`date` <= ".$stopdate; + $searchCreateDate .= "`tblFolders`.`date` <= ".$this->db->qstr($stopdate); } } @@ -1693,8 +1723,19 @@ class SeedDMS_Core_DMS { $lsearchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentAttributes` WHERE `tblDocumentAttributes`.`attrdef`=".$attrdefid." AND (`tblDocumentAttributes`.`value` like '%".$valueset[0].implode("%' OR `tblDocumentAttributes`.`value` like '%".$valueset[0], $attribute)."%') AND `tblDocumentAttributes`.`document` = `tblDocuments`.`id`)"; } else $lsearchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentAttributes` WHERE `tblDocumentAttributes`.`attrdef`=".$attrdefid." AND `tblDocumentAttributes`.`value`='".$attribute."' AND `tblDocumentAttributes`.`document` = `tblDocuments`.`id`)"; - } else - $lsearchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentAttributes` WHERE `tblDocumentAttributes`.`attrdef`=".$attrdefid." AND `tblDocumentAttributes`.`value` like '%".$attribute."%' AND `tblDocumentAttributes`.`document` = `tblDocuments`.`id`)"; + } else { + if($attrdef->getType() == SeedDMS_Core_AttributeDefinition::type_date && is_array($attribute)) { + $kkll = []; + if(!empty($attribute['from'])) + $kkll[] = "`tblDocumentAttributes`.`value`>='".$attribute['from']."'"; + if(!empty($attribute['to'])) + $kkll[] = "`tblDocumentAttributes`.`value`<='".$attribute['to']."'"; + if($kkll) + $lsearchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentAttributes` WHERE `tblDocumentAttributes`.`attrdef`=".$attrdefid." AND ".implode(' AND ', $kkll)." AND `tblDocumentAttributes`.`document`=`tblDocuments`.`id`)"; + } else { + $lsearchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentAttributes` WHERE `tblDocumentAttributes`.`attrdef`=".$attrdefid." AND `tblDocumentAttributes`.`value` like '%".$attribute."%' AND `tblDocumentAttributes`.`document` = `tblDocuments`.`id`)"; + } + } } if($attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_documentcontent || $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_all) { if($attrdef->getValueSet()) { @@ -1706,10 +1747,22 @@ class SeedDMS_Core_DMS { } else { $lsearchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentContentAttributes` WHERE `tblDocumentContentAttributes`.`attrdef`=".$attrdefid." AND `tblDocumentContentAttributes`.`value`='".$attribute."' AND `tblDocumentContentAttributes`.content = `tblDocumentContent`.id)"; } - } else - $lsearchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentContentAttributes` WHERE `tblDocumentContentAttributes`.`attrdef`=".$attrdefid." AND `tblDocumentContentAttributes`.`value` like '%".$attribute."%' AND `tblDocumentContentAttributes`.content = `tblDocumentContent`.id)"; + } else { + if($attrdef->getType() == SeedDMS_Core_AttributeDefinition::type_date && is_array($attribute)) { + $kkll = []; + if(!empty($attribute['from'])) + $kkll[] = "`tblDocumentContentAttributes`.`value`>='".$attribute['from']."'"; + if(!empty($attribute['to'])) + $kkll[] = "`tblDocumentContentAttributes`.`value`<='".$attribute['to']."'"; + if($kkll) + $lsearchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentContentAttributes` WHERE `tblDocumentContentAttributes`.`attrdef`=".$attrdefid." AND ".implode(' AND ', $kkll)." AND `tblDocumentContentAttributes`.`content`=`tblDocumentContent`.`id`)"; + } else { + $lsearchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentContentAttributes` WHERE `tblDocumentContentAttributes`.`attrdef`=".$attrdefid." AND `tblDocumentContentAttributes`.`value` like '%".$attribute."%' AND `tblDocumentContentAttributes`.content = `tblDocumentContent`.id)"; + } + } } - $searchAttributes[] = "(".implode(" OR ", $lsearchAttributes).")"; + if($lsearchAttributes) + $searchAttributes[] = "(".implode(" OR ", $lsearchAttributes).")"; } } } @@ -1719,7 +1772,7 @@ class SeedDMS_Core_DMS { if ($creationstartdate) { $startdate = SeedDMS_Core_DMS::makeTimeStamp($creationstartdate['hour'], $creationstartdate['minute'], $creationstartdate['second'], $creationstartdate['year'], $creationstartdate["month"], $creationstartdate["day"]); if ($startdate) { - $searchCreateDate .= "`tblDocuments`.`date` >= ".$startdate; + $searchCreateDate .= "`tblDocuments`.`date` >= ".$this->db->qstr($startdate); } } if ($creationenddate) { @@ -1727,7 +1780,7 @@ class SeedDMS_Core_DMS { if ($stopdate) { if($searchCreateDate) $searchCreateDate .= " AND "; - $searchCreateDate .= "`tblDocuments`.`date` <= ".$stopdate; + $searchCreateDate .= "`tblDocuments`.`date` <= ".$this->db->qstr($stopdate); } } if ($modificationstartdate) { @@ -1743,7 +1796,7 @@ class SeedDMS_Core_DMS { if ($stopdate) { if($searchCreateDate) $searchCreateDate .= " AND "; - $searchCreateDate .= "`tblDocumentContent`.`date` <= ".$stopdate; + $searchCreateDate .= "`tblDocumentContent`.`date` <= ".$this->db->qstr($stopdate); } } $searchExpirationDate = ''; @@ -1752,7 +1805,7 @@ class SeedDMS_Core_DMS { if ($startdate) { if($searchExpirationDate) $searchExpirationDate .= " AND "; - $searchExpirationDate .= "`tblDocuments`.`expires` >= ".$startdate; + $searchExpirationDate .= "`tblDocuments`.`expires` >= ".$this->db->qstr($startdate); } } if ($expirationenddate) { @@ -1760,7 +1813,24 @@ class SeedDMS_Core_DMS { if ($stopdate) { if($searchExpirationDate) $searchExpirationDate .= " AND "; - $searchExpirationDate .= "`tblDocuments`.`expires` <= ".$stopdate; + $searchExpirationDate .= "`tblDocuments`.`expires` <= ".$this->db->qstr($stopdate); + } + } + $searchStatusDate = ''; + if ($statusstartdate) { + $startdate = $statusstartdate['year'].'-'.$statusstartdate["month"].'-'.$statusstartdate["day"].' '.$statusstartdate['hour'].':'.$statusstartdate['minute'].':'.$statusstartdate['second']; + if ($startdate) { + if($searchStatusDate) + $searchStatusDate .= " AND "; + $searchStatusDate .= "`tblDocumentStatusLog`.`date` >= ".$this->db->qstr($startdate); + } + } + if ($statusenddate) { + $stopdate = $statusenddate['year'].'-'.$statusenddate["month"].'-'.$statusenddate["day"].' '.$statusenddate['hour'].':'.$statusenddate['minute'].':'.$statusenddate['second']; + if ($stopdate) { + if($searchStatusDate) + $searchStatusDate .= " AND "; + $searchStatusDate .= "`tblDocumentStatusLog`.`date` <= ".$this->db->qstr($stopdate); } } @@ -1806,6 +1876,9 @@ class SeedDMS_Core_DMS { if (strlen($searchExpirationDate)>0) { $searchQuery .= " AND (".$searchExpirationDate.")"; } + if (strlen($searchStatusDate)>0) { + $searchQuery .= " AND (".$searchStatusDate.")"; + } if ($searchAttributes) { $searchQuery .= " AND (".implode(" AND ", $searchAttributes).")"; } @@ -1815,7 +1888,7 @@ class SeedDMS_Core_DMS { $searchQuery .= " AND `tblDocumentStatusLog`.`status` IN (".implode(',', $status).")"; } - if($searchKey || $searchOwner || $searchCategories || $searchCreateDate || $searchExpirationDate || $searchAttributes || $status) { + if($searchKey || $searchOwner || $searchCategories || $searchCreateDate || $searchExpirationDate || $searchStatusDate || $searchAttributes || $status) { // Count the number of rows that the search will produce. $resArr = $this->db->getResultArray("SELECT COUNT(*) AS num FROM (SELECT DISTINCT `tblDocuments`.`id` ".$searchQuery.") a"); $totalDocs = 0; diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 90a490921..4adf9f771 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -980,9 +980,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $this->_accessList[$mode] = array("groups" => array(), "users" => array()); foreach ($resArr as $row) { if ($row["userID"] != -1) - array_push($this->_accessList[$mode]["users"], new SeedDMS_Core_UserAccess($this->_dms->getUser($row["userID"]), $row["mode"])); + array_push($this->_accessList[$mode]["users"], new SeedDMS_Core_UserAccess($this->_dms->getUser($row["userID"]), (int) $row["mode"])); else //if ($row["groupID"] != -1) - array_push($this->_accessList[$mode]["groups"], new SeedDMS_Core_GroupAccess($this->_dms->getGroup($row["groupID"]), $row["mode"])); + array_push($this->_accessList[$mode]["groups"], new SeedDMS_Core_GroupAccess($this->_dms->getGroup($row["groupID"]), (int) $row["mode"])); } } @@ -1665,7 +1665,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * @param string $orgFileName original file name * @param string $fileType * @param string $mimeType MimeType of the content - * @param integer $version version number of content or 0 if next higher version shall be used. + * @param integer $version version number of content or 0 if latest version shall be replaced. * @return bool/array false in case of an error or a result set */ function replaceContent($version, $user, $tmpFile, $orgFileName, $fileType, $mimeType) { /* {{{ */ @@ -2231,7 +2231,11 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * @return array list of files, false in case of an sql error */ function getDocumentFiles($version=0, $incnoversion=true) { /* {{{ */ - if (!isset($this->_documentFiles)) { + /* use a smarter caching because removing a document will call this function + * for each version and the document itself. + */ + $hash = substr(md5($version.$incnoversion), 0, 4); + if (!isset($this->_documentFiles[$hash])) { $db = $this->_dms->getDB(); $queryStr = "SELECT * FROM `tblDocumentFiles` WHERE `document` = " . $this->_id; @@ -2249,16 +2253,16 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) return false; - $this->_documentFiles = array(); + $this->_documentFiles = array($hash=>array()); $user = $this->_dms->getLoggedInUser(); foreach ($resArr as $row) { $file = new SeedDMS_Core_DocumentFile($row["id"], $this, $row["userID"], $row["comment"], $row["date"], $row["dir"], $row["fileType"], $row["mimeType"], $row["orgFileName"], $row["name"], $row["version"], $row["public"]); if($file->getAccessMode($user) >= M_READ) - array_push($this->_documentFiles, $file); + array_push($this->_documentFiles[$hash], $file); } } - return $this->_documentFiles; + return $this->_documentFiles[$hash]; } /* }}} */ function addDocumentFile($name, $comment, $user, $tmpFile, $orgFileName,$fileType, $mimeType,$version=0,$public=1) { /* {{{ */ diff --git a/SeedDMS_Core/Core/inc.ClassFolder.php b/SeedDMS_Core/Core/inc.ClassFolder.php index 2ad0a365e..4ca28739c 100644 --- a/SeedDMS_Core/Core/inc.ClassFolder.php +++ b/SeedDMS_Core/Core/inc.ClassFolder.php @@ -1295,9 +1295,9 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $this->_accessList[$mode] = array("groups" => array(), "users" => array()); foreach ($resArr as $row) { if ($row["userID"] != -1) - array_push($this->_accessList[$mode]["users"], new SeedDMS_Core_UserAccess($this->_dms->getUser($row["userID"]), $row["mode"])); + array_push($this->_accessList[$mode]["users"], new SeedDMS_Core_UserAccess($this->_dms->getUser($row["userID"]), (int) $row["mode"])); else //if ($row["groupID"] != -1) - array_push($this->_accessList[$mode]["groups"], new SeedDMS_Core_GroupAccess($this->_dms->getGroup($row["groupID"]), $row["mode"])); + array_push($this->_accessList[$mode]["groups"], new SeedDMS_Core_GroupAccess($this->_dms->getGroup($row["groupID"]), (int) $row["mode"])); } } @@ -1541,10 +1541,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * notification for the folder * * @param integer $type type of notification (not yet used) + * @param bool $incdisabled set to true if disabled user shall be included * @return SeedDMS_Core_User[]|SeedDMS_Core_Group[]|bool array with a the elements 'users' and 'groups' which * contain a list of users and groups. */ - function getNotifyList($type=0) { /* {{{ */ + function getNotifyList($type=0, $incdisabled=false) { /* {{{ */ if (empty($this->_notifyList)) { $db = $this->_dms->getDB(); @@ -1558,7 +1559,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { { if ($row["userID"] != -1) { $u = $this->_dms->getUser($row["userID"]); - if($u && !$u->isDisabled()) + if($u && (!$u->isDisabled() || $incdisabled)) array_push($this->_notifyList["users"], $u); } else {//if ($row["groupID"] != -1) $g = $this->_dms->getGroup($row["groupID"]); diff --git a/SeedDMS_Core/Core/inc.ClassGroup.php b/SeedDMS_Core/Core/inc.ClassGroup.php index e024b6cc1..696613600 100644 --- a/SeedDMS_Core/Core/inc.ClassGroup.php +++ b/SeedDMS_Core/Core/inc.ClassGroup.php @@ -124,6 +124,15 @@ class SeedDMS_Core_Group { /* {{{ */ return $groups; } /* }}} */ + /** + * Check if this object is of type 'group'. + * + * @param string $type type of object + */ + public function isType($type) { /* {{{ */ + return $type == 'group'; + } /* }}} */ + /** * @param SeedDMS_Core_DMS $dms */ @@ -131,6 +140,13 @@ class SeedDMS_Core_Group { /* {{{ */ $this->_dms = $dms; } /* }}} */ + /** + * @return SeedDMS_Core_DMS $dms + */ + function getDMS() { + return $this->_dms; + } + /** * @return int */ diff --git a/SeedDMS_Core/Core/inc.ClassObject.php b/SeedDMS_Core/Core/inc.ClassObject.php index ed5daa457..bc02592fa 100644 --- a/SeedDMS_Core/Core/inc.ClassObject.php +++ b/SeedDMS_Core/Core/inc.ClassObject.php @@ -244,6 +244,7 @@ class SeedDMS_Core_Object { /* {{{ */ $sep = substr($attrdef->getValueSet(), 0, 1); $value = $sep.implode($sep, $value); } + /* Handle the case if an attribute is not set already */ if(!isset($this->_attributes[$attrdef->getId()])) { switch(get_class($this)) { case $this->_dms->getClassname('document'): @@ -271,6 +272,7 @@ class SeedDMS_Core_Object { /* {{{ */ return true; } + /* The attribute already exists. setValue() will either update or delete it. */ $this->_attributes[$attrdef->getId()]->setValue($value); return true; diff --git a/SeedDMS_Core/Core/inc.ClassUser.php b/SeedDMS_Core/Core/inc.ClassUser.php index cdf46ebe6..983390707 100644 --- a/SeedDMS_Core/Core/inc.ClassUser.php +++ b/SeedDMS_Core/Core/inc.ClassUser.php @@ -250,6 +250,15 @@ class SeedDMS_Core_User { /* {{{ */ return $users; } /* }}} */ + /** + * Check if this object is of type 'user'. + * + * @param string $type type of object + */ + public function isType($type) { /* {{{ */ + return $type == 'user'; + } /* }}} */ + /** * @param SeedDMS_Core_DMS $dms */ @@ -257,6 +266,13 @@ class SeedDMS_Core_User { /* {{{ */ $this->_dms = $dms; } + /** + * @return SeedDMS_Core_DMS $dms + */ + function getDMS() { + return $this->_dms; + } + /** * @return int */ diff --git a/SeedDMS_Core/Core/inc.DBAccessPDO.php b/SeedDMS_Core/Core/inc.DBAccessPDO.php index 710a578fc..a272fffb9 100644 --- a/SeedDMS_Core/Core/inc.DBAccessPDO.php +++ b/SeedDMS_Core/Core/inc.DBAccessPDO.php @@ -118,10 +118,10 @@ class SeedDMS_Core_DatabaseAccess { function TableList() { /* {{{ */ switch($this->_driver) { case 'mysql': - $sql = "select TABLE_NAME as name from information_schema.tables where TABLE_SCHEMA='".$this->_database."' and TABLE_TYPE='BASE TABLE'"; + $sql = "SELECT `TABLE_NAME` AS `name` FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA`='".$this->_database."' AND `TABLE_TYPE`='BASE TABLE'"; break; case 'sqlite': - $sql = "select tbl_name as name from sqlite_master where type='table'"; + $sql = "SELECT tbl_name AS name FROM sqlite_master WHERE type='table'"; break; case 'pgsql': $sql = "select tablename as name from pg_catalog.pg_tables where schemaname='public'"; @@ -136,6 +136,33 @@ class SeedDMS_Core_DatabaseAccess { return $res; } /* }}} */ + /** + * Check if database has a table + * + * This function will check if the database has a table with the given table name + * + * @return bool true if table exists, otherwise false + */ + function hasTable($name) { /* {{{ */ + switch($this->_driver) { + case 'mysql': + $sql = "SELECT `TABLE_NAME` AS `name` FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA`='".$this->_database."' AND `TABLE_TYPE`='BASE TABLE' AND `TABLE_NAME`=".$this->qstr($name); + break; + case 'sqlite': + $sql = "SELECT tbl_name AS name FROM sqlite_master WHERE type='table' AND `tbl_name`=".$this->qstr($name); + break; + case 'pgsql': + $sql = "SELECT tablename AS name FROM pg_catalog.pg_tables WHERE schemaname='public' AND tablename=".$this->qstr($name); + break; + default: + return false; + } + $arr = $this->getResultArray($sql); + if($arr) + return true; + return false; + } /* }}} */ + /** * Return list of all database views * diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index bd8ff243e..b440d3671 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,11 +12,11 @@ uwe@steinmann.cx yes - 2020-09-29 + 2021-03-15 - 5.1.21 - 5.1.21 + 5.1.22 + 5.1.22 stable @@ -24,12 +24,15 @@ GPL License -- SeedDMS_Folder_DMS::getAccessList() and getDefaultAccess() do not return fals anymore if the parent does not exists. They just stop inheritance. -- pass attribute value to callback 'onAttributeValidate' -- new paramter 'new' of methode SeedDMЅ_Core_AttributeDefinition::validate() -- check if folder/document is below rootDir can be turned on (default off) -- SeedDMS_Core_User::setHomeFolder() can be used to unset the home folder -- check if attribute definition exists when setting attributes of folders and documents +- add SeedDMS_Core_DatabaseAccess::hasTable() +- add SeedDMS_Core_User->isType() and SeedDMS_Core_Group->isType() +- add SeedDMS_Core_User->getDMS() and SeedDMS_Core_Group->getDMS() +- add new parameter to SeedDMS_Core_DMS->getDocumentList() for skipping expired documents +- add parameter $incdisabled to SeedDMS_Core_Folder::getNotifyList() +- do not validate value in SeedDMS_Core_Attribute::setValue(), it should have been done before +- SeedDMS_Core_DMS::search() can search for last date of document status change +- smarter caching in SeedDMS_Core_Document::getDocumentFiles() which fixes a potential + problem when removing a document @@ -1843,5 +1846,26 @@ add method SeedDMS_Core_DatabaseAccess::setLogFp() - set dms of new user instances in SeedDMS_Core_Group + + 2020-09-29 + + + 5.1.21 + 5.1.21 + + + stable + stable + + GPL License + +- SeedDMS_Folder_DMS::getAccessList() and getDefaultAccess() do not return fals anymore if the parent does not exists. They just stop inheritance. +- pass attribute value to callback 'onAttributeValidate' +- new paramter 'new' of methode SeedDMЅ_Core_AttributeDefinition::validate() +- check if folder/document is below rootDir can be turned on (default off) +- SeedDMS_Core_User::setHomeFolder() can be used to unset the home folder +- check if attribute definition exists when setting attributes of folders and documents + + diff --git a/SeedDMS_Preview/Preview/Base.php b/SeedDMS_Preview/Preview/Base.php index 59aa7b703..572bb521d 100644 --- a/SeedDMS_Preview/Preview/Base.php +++ b/SeedDMS_Preview/Preview/Base.php @@ -79,7 +79,11 @@ class SeedDMS_Preview_Base { $pipes = array(); $timeout += time(); - $process = proc_open($cmd, $descriptorspec, $pipes); + // Putting an 'exec' before the command will not fork the command + // and therefore not create any child process. proc_terminate will + // then reliably terminate the cmd and not just shell. See notes of + // https://www.php.net/manual/de/function.proc-terminate.php + $process = proc_open('exec '.$cmd, $descriptorspec, $pipes); if (!is_resource($process)) { throw new Exception("proc_open failed on: " . $cmd); } diff --git a/controllers/class.EditDocument.php b/controllers/class.EditDocument.php index ef91be1c0..ca4b38218 100644 --- a/controllers/class.EditDocument.php +++ b/controllers/class.EditDocument.php @@ -165,6 +165,10 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { if($fulltextservice && ($index = $fulltextservice->Indexer()) && $document) { $idoc = $fulltextservice->IndexedDocument($document); if(false !== $this->callHook('preIndexDocument', $document, $idoc)) { + $lucenesearch = $fulltextservice->Search(); + if($hit = $lucenesearch->getDocument((int) $document->getId())) { + $index->delete($hit->id); + } $index->addDocument($idoc); $index->commit(); } diff --git a/controllers/class.EditFolder.php b/controllers/class.EditFolder.php index 0110f6e06..7e37d5016 100644 --- a/controllers/class.EditFolder.php +++ b/controllers/class.EditFolder.php @@ -93,6 +93,10 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common { if($fulltextservice && ($index = $fulltextservice->Indexer()) && $folder) { $idoc = $fulltextservice->IndexedDocument($folder); if(false !== $this->callHook('preIndexFolder', $folder, $idoc)) { + $lucenesearch = $fulltextservice->Search(); + if($hit = $lucenesearch->getFolder((int) $folder->getId())) { + $index->delete($hit->id); + } $index->addDocument($idoc); $index->commit(); } diff --git a/controllers/class.UpdateDocument.php b/controllers/class.UpdateDocument.php index c1e2b7e57..854fe1f60 100644 --- a/controllers/class.UpdateDocument.php +++ b/controllers/class.UpdateDocument.php @@ -77,12 +77,12 @@ class SeedDMS_Controller_UpdateDocument extends SeedDMS_Controller_Common { } if($fulltextservice && ($index = $fulltextservice->Indexer()) && $content) { - $lucenesearch = $fulltextservice->Search(); - if($hit = $lucenesearch->getDocument((int) $document->getId())) { - $index->delete($hit->id); - } $idoc = $fulltextservice->IndexedDocument($document); if(false !== $this->callHook('preIndexDocument', $document, $idoc)) { + $lucenesearch = $fulltextservice->Search(); + if($hit = $lucenesearch->getDocument((int) $document->getId())) { + $index->delete($hit->id); + } $index->addDocument($idoc); $index->commit(); } diff --git a/doc/README.Install.md b/doc/README.Install.md index 81ebac299..083b02117 100644 --- a/doc/README.Install.md +++ b/doc/README.Install.md @@ -80,6 +80,19 @@ http://your-domain/ or http://your-domain/seeddms51x. SECURITY CONSIDERATIONS ======================= +First of all you should always access your SeedDMS installation through +a secured https connection, unless you know precisly what are you doing. +SeedDMS ships an .htaccess file which already has some common security +http headers set. In order for them to apply you need to activate the +headers module. On Debian this can be done with + +``` +a2enmod headers +``` + +Protect directories with data or configuration +--------------------------------------------- + A crucial point when setting up SeedDMS is the propper placement of the data directory. Do not place it below your document root as configured in your web server! If you do so, there is good change that diff --git a/ext/example/lang.php b/ext/example/lang.php index 55b3b860b..b95a16910 100644 --- a/ext/example/lang.php +++ b/ext/example/lang.php @@ -2,4 +2,3 @@ $__lang['de_DE'] = array( 'folder_contents' => 'Dies war mal "Ordner enthält". Wurde von sample Extension geändert.', ); -?> diff --git a/inc/inc.Authentication.php b/inc/inc.Authentication.php index 63b5b9d01..f8d734e6d 100644 --- a/inc/inc.Authentication.php +++ b/inc/inc.Authentication.php @@ -95,27 +95,7 @@ if($settings->_useHomeAsRootFolder && !$user->isAdmin() && $user->getHomeFolder( $dms->setRootFolderID($user->getHomeFolder()); } -$notifier = new SeedDMS_NotificationService(); - -if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { - if(method_exists($notificationObj, 'preAddService')) { - $notificationObj->preAddService($dms, $notifier); - } - } -} - -if($settings->_enableEmail) { - $notifier->addService(new SeedDMS_EmailNotify($dms, $settings->_smtpSendFrom, $settings->_smtpServer, $settings->_smtpPort, $settings->_smtpUser, $settings->_smtpPassword), 'email'); -} - -if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { - if(method_exists($notificationObj, 'postAddService')) { - $notificationObj->postAddService($dms, $notifier); - } - } -} +require_once('inc/inc.Notification.php'); /* Include additional language file for view * This file must set $LANG[xx][] diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index 674043faa..5100d2e2e 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -84,7 +84,7 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { * @return false or -1 in case of error, otherwise true */ function toIndividual($sender, $recipient, $subject, $messagekey, $params=array(), $attachments=array()) { /* {{{ */ - if(is_object($recipient) && !strcasecmp(get_class($recipient), $this->_dms->getClassname('user')) && !$recipient->isDisabled() && $recipient->getEmail()!="") { + if(is_object($recipient) && $recipient->isType('user') && !$recipient->isDisabled() && $recipient->getEmail()!="") { $to = $recipient->getEmail(); $lang = $recipient->getLanguage(); } elseif(is_string($recipient) && trim($recipient) != "") { @@ -97,6 +97,9 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { return false; } + if(!$to) + return false; + $returnpath = $this->from_address; if(is_object($sender) && !strcasecmp(get_class($sender), $this->_dms->getClassname('user'))) { $from = $sender->getFullName() ." <". $sender->getEmail() .">"; @@ -111,17 +114,49 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { } - $message = ''; - if(!isset($params['__skip_header__']) || !$params['__skip_header__']) - $message .= getMLText("email_header", $params, "", $lang)."\r\n\r\n"; - $message .= getMLText($messagekey, $params, "", $lang); - if(!isset($params['__skip_footer__']) || !$params['__skip_footer__']) - $message .= "\r\n\r\n".getMLText("email_footer", $params, "", $lang); + $body = ''; + if(!isset($params['__skip_header__']) || !$params['__skip_header__']) { + if(!isset($params['__header__'])) + $body .= getMLText("email_header", $params, "", $lang)."\r\n\r\n"; + elseif($params['__header__']) + $body .= getMLText($params['__header__'], $params, "", $lang)."\r\n\r\n"; + } + if(isset($params['__body__'])) + $body .= $params['__body__']; + else + $body .= getMLText($messagekey, $params, "", $lang); + if(!isset($params['__skip_footer__']) || !$params['__skip_footer__']) { + if(!isset($params['__footer__'])) + $body .= "\r\n\r\n".getMLText("email_footer", $params, "", $lang); + elseif($params['__footer__']) + $body .= "\r\n\r\n".getMLText($params['__footer__'], $params, "", $lang); + } + + $bodyhtml = ''; + if(isset($params['__body_html__']) || getMLText($messagekey.'_html')) { + if(!isset($params['__skip_header__']) || !$params['__skip_header__']) { + if(!isset($params['__header_html__'])) + $bodyhtml .= getMLText("email_header_html", $params, "", $lang)."\r\n\r\n"; + elseif($params['__header_html__']) + $bodyhtml .= getMLText($params['__header_html__'], $params, "", $lang)."\r\n\r\n"; + } + if(isset($params['__body_html__'])) + $bodyhtml .= $params['__body_html__']; + else + $bodyhtml .= getMLText($messagekey.'_html', $params, "", $lang); + if(!isset($params['__skip_footer__']) || !$params['__skip_footer__']) { + if(!isset($params['__footer_html__'])) + $bodyhtml .= "\r\n\r\n".getMLText("email_footer_html", $params, "", $lang); + elseif($params['__footer_html__']) + $bodyhtml .= "\r\n\r\n".getMLText($params['__footer_html__'], $params, "", $lang); + } + } $mime = new Mail_mime(array('eol' => "\n")); - $mime->setTXTBody($message); -// $mime->setHTMLBody($bodyhtml); + $mime->setTXTBody($body); + if($bodyhtml) + $mime->setHTMLBody($bodyhtml); if($attachments) { foreach($attachments as $attachment) { @@ -197,6 +232,11 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { } } /* }}} */ + /** + * This method is deprecated! + * + * The dispatching is now done in SeedDMS_NotificationService::toGroup() + */ function toGroup($sender, $groupRecipient, $subject, $message, $params=array()) { /* {{{ */ if ((!is_object($sender) && strcasecmp(get_class($sender), $this->_dms->getClassname('user'))) || (!is_object($groupRecipient) || strcasecmp(get_class($groupRecipient), $this->_dms->getClassname('group')))) { @@ -210,16 +250,22 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { return true; } /* }}} */ + /** + * This method is deprecated! + * + * The dispatching is now done in SeedDMS_NotificationService::toList() + */ function toList($sender, $recipients, $subject, $message, $params=array()) { /* {{{ */ if ((!is_object($sender) && strcasecmp(get_class($sender), $this->_dms->getClassname('user'))) || (!is_array($recipients) && count($recipients)==0)) { return false; } + $ret = true; foreach ($recipients as $recipient) { - $this->toIndividual($sender, $recipient, $subject, $message, $params); + $ret &= $this->toIndividual($sender, $recipient, $subject, $message, $params); } - return true; + return $ret; } /* }}} */ } diff --git a/inc/inc.ClassExtBase.php b/inc/inc.ClassExtBase.php index 1c63891b6..0ae1fd952 100644 --- a/inc/inc.ClassExtBase.php +++ b/inc/inc.ClassExtBase.php @@ -30,8 +30,12 @@ */ class SeedDMS_ExtBase { var $settings; + var $dms; + var $logger; - public function __construct($settings) { + public function __construct($settings, $dms, $logger) { $this->settings = $settings; + $this->dms = $dms; + $this->logger = $logger; } } diff --git a/inc/inc.ClassExtensionMgr.php b/inc/inc.ClassExtensionMgr.php index f3f1d1487..a5a308c57 100644 --- a/inc/inc.ClassExtensionMgr.php +++ b/inc/inc.ClassExtensionMgr.php @@ -297,6 +297,30 @@ class SeedDMS_Extension_Mgr { return $tmpfile; } /* }}} */ + /** + * Migrate database tables of extension if one exists + * + * @param string $extname name of extension + * @param SeedDMS_Core_DMS $dms + * @return boolean true on success, false on error + */ + public function migrate($extname, $settings, $dms) { /* {{{ */ + if(!isset($this->extconf[$extname])) + return false; + $extconf = $this->extconf[$extname]; + $ret = null; + if(isset($extconf['class']) && isset($extconf['class']['file']) && isset($extconf['class']['name'])) { + $classfile = $settings->_rootDir."/ext/".$extname."/".$extconf['class']['file']; + if(file_exists($classfile)) { + require_once($classfile); + $obj = new $extconf['class']['name']($settings, $dms); + if(method_exists($obj, 'migrate')) + $ret = $obj->migrate(); + } + } + return $ret; + } /* }}} */ + /** * Check content of extension directory or configuration of extension * diff --git a/inc/inc.ClassFulltextService.php b/inc/inc.ClassFulltextService.php index 7a8165cbe..77f4f89f8 100644 --- a/inc/inc.ClassFulltextService.php +++ b/inc/inc.ClassFulltextService.php @@ -65,12 +65,22 @@ class SeedDMS_FulltextService { $this->cmdtimeout = $timeout; } - public function IndexedDocument($document, $forceupdate=false) { - if($document->isType('document')) - $nocontent = ($document->getLatestContent()->getFileSize() > $this->maxsize) && !$forceupdate; + /** + * Return an indexable document from the given document or folder + * + * @param SeedDMS_Core_Document|SeedDMS_Core_Folder $object document or folder + * to be indexed + * @param boolean $forceupdate set to true if the document shall be updated no + * matter how large the content is. Setting this to false will only update the + * document if its content is below the configured size. + * @return object indexed Document ready for passing to the indexer + */ + public function IndexedDocument($object, $forceupdate=false) { + if($object->isType('document')) + $nocontent = ($object->getLatestContent()->getFileSize() > $this->maxsize) && !$forceupdate; else $nocontent = true; - return new $this->services[0]['IndexedDocument']($document->getDMS(), $document, $this->converters, $nocontent, $this->cmdtimeout); + return new $this->services[0]['IndexedDocument']($object->getDMS(), $object, $this->converters, $nocontent, $this->cmdtimeout); } /** diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index e7bea6347..6a76f6396 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -31,9 +31,25 @@ class SeedDMS_NotificationService { */ protected $errors; - public function __construct() { + /* + * Service for logging + */ + protected $logger; + + /* + * Possible types of receivers + */ + const RECV_ANY = 0; + const RECV_NOTIFICATION = 1; + const RECV_OWNER = 2; + const RECV_REVIEWER = 3; + const RECV_APPROVER = 4; + const RECV_WORKFLOW = 5; + + public function __construct($logger = null) { $this->services = array(); $this->errors = array(); + $this->logger = $logger; } public function addService($service, $name='') { @@ -51,46 +67,79 @@ class SeedDMS_NotificationService { return $this->errors; } - public function toIndividual($sender, $recipient, $subject, $message, $params=array()) { + public function toIndividual($sender, $recipient, $subject, $message, $params=array(), $recvtype=0) { $error = true; foreach($this->services as $name => $service) { - if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipient, $subject, $message, $params)) { + /* Set $to to email address of user or the string passed in $recipient + * This is only used for logging + */ + if(is_object($recipient) && $recipient->isType('user') && !$recipient->isDisabled() && $recipient->getEmail()!="") { + $to = $recipient->getEmail(); + } elseif(is_string($recipient) && trim($recipient) != "") { + $to = $recipient; + } else { + $to = ''; + } + + /* Call filter of notification service if set */ + if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipient, $subject, $message, $params, $recvtype)) { if(!$service->toIndividual($sender, $recipient, $subject, $message, $params)) { $error = false; $this->errors[$name] = false; + $this->logger->log('Notification service \''.$name.'\': Sending notification \''.$subject.'\' to user \''.$to.'\' ('.$recvtype.') failed.', PEAR_LOG_ERR); } else { + $this->logger->log('Notification service \''.$name.'\': Sending notification \''.$subject.'\' to user \''.$to.'\' ('.$recvtype.') successful.', PEAR_LOG_INFO); $this->errors[$name] = true; } + } else { + $this->logger->log('Notification service \''.$name.'\': Notification \''.$subject.'\' to user \''.$to.'\' ('.$recvtype.') filtered out.', PEAR_LOG_INFO); } } return $error; } - public function toGroup($sender, $groupRecipient, $subject, $message, $params=array()) { + /** + * Send a notification to each user of a group + * + */ + public function toGroup($sender, $groupRecipient, $subject, $message, $params=array(), $recvtype=0) { $error = true; foreach($this->services as $name => $service) { - if(!is_callable([$service, 'filter']) || $service->filter($sender, $groupRecipient, $subject, $message, $params)) { - if(!$service->toGroup($sender, $groupRecipient, $subject, $message, $params)) { - $error = false; - $this->errors[$name] = false; - } else { - $this->errors[$name] = true; - } + $ret = true; + foreach ($groupRecipient->getUsers() as $recipient) { + $ret &= $this->toIndividual($sender, $recipient, $subject, $message, $params, $recvtype); + } + $this->errors[$name] = $ret; + if(!$ret) { + $error = false; } } return $error; } - public function toList($sender, $recipients, $subject, $message, $params=array()) { + /** + * Send a notification to a list of recipients + * + * The list of recipients may contain both email addresses and users + * + * @param string|object $sender either an email address or a user + * @param array $recipients list of recipients + * @param string $subject key of translatable phrase for the subject + * @param string $message key of translatable phrase for the message body + * @param array $params list of parameters filled into the subject and body + * @param int $recvtype type of receiver + * @return boolean true on success, otherwise false + */ + public function toList($sender, $recipients, $subject, $message, $params=array(), $recvtype=0) { $error = true; foreach($this->services as $name => $service) { - if(!is_callable([$service, 'filter']) || $service->filter($sender, $recipients, $subject, $message, $params)) { - if(!$service->toList($sender, $recipients, $subject, $message, $params)) { - $error = false; - $this->errors[$name] = false; - } else { - $this->errors[$name] = true; - } + $ret = true; + foreach ($recipients as $recipient) { + $ret &= $this->toIndividual($sender, $recipient, $subject, $message, $params, $recvtype); + } + $this->errors[$name] = $ret; + if(!$ret) { + $error = false; } } return $error; diff --git a/inc/inc.ClassNotify.php b/inc/inc.ClassNotify.php index 6655daa39..3a4f5471b 100644 --- a/inc/inc.ClassNotify.php +++ b/inc/inc.ClassNotify.php @@ -26,6 +26,4 @@ */ abstract class SeedDMS_Notify { abstract function toIndividual($sender, $recipient, $subject, $message, $params=array()); - abstract function toGroup($sender, $groupRecipient, $subject, $message, $params=array()); - abstract function toList($sender, $recipients, $subject, $message, $params=array()); } diff --git a/inc/inc.ClassViewCommon.php b/inc/inc.ClassViewCommon.php index 37b153a68..e92788c51 100644 --- a/inc/inc.ClassViewCommon.php +++ b/inc/inc.ClassViewCommon.php @@ -88,6 +88,10 @@ class SeedDMS_View_Common { $this->baseurl = $baseurl; } + public function getTheme() { + return $this->theme; + } + public function show() { } diff --git a/inc/inc.Extension.php b/inc/inc.Extension.php index fb525c44c..b24ba1396 100644 --- a/inc/inc.Extension.php +++ b/inc/inc.Extension.php @@ -11,6 +11,8 @@ * @version Release: @package_version@ */ +global $logger; + require "inc.ClassExtensionMgr.php"; require_once "inc.ClassExtBase.php"; require_once "inc.Version.php"; @@ -43,9 +45,9 @@ foreach($extMgr->getExtensionConfiguration() as $extname=>$extconf) { $classfile = $settings->_rootDir."/ext/".$extname."/".$extconf['class']['file']; if(file_exists($classfile)) { include($classfile); - $obj = new $extconf['class']['name']($settings); + $obj = new $extconf['class']['name']($settings, null, $logger); if(method_exists($obj, 'init')) - $obj->init(isset($settings->_extensions[$extname]) ? $settings->_extensions[$extname] : null); + $obj->init(); } } if(isset($extconf['language']['file'])) { diff --git a/inc/inc.Notification.php b/inc/inc.Notification.php new file mode 100644 index 000000000..cfc3ab615 --- /dev/null +++ b/inc/inc.Notification.php @@ -0,0 +1,36 @@ + + * @copyright Copyright (C) 2002-2005 Markus Westphal, + * 2006-2008 Malcolm Cowe, 2010 Uwe Steinmann + * @version Release: @package_version@ + */ + +global $logger; +$notifier = new SeedDMS_NotificationService($logger); + +if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { + if(method_exists($notificationObj, 'preAddService')) { + $notificationObj->preAddService($dms, $notifier); + } + } +} + +if($settings->_enableEmail) { + $notifier->addService(new SeedDMS_EmailNotify($dms, $settings->_smtpSendFrom, $settings->_smtpServer, $settings->_smtpPort, $settings->_smtpUser, $settings->_smtpPassword), 'email'); +} + +if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { + if(method_exists($notificationObj, 'postAddService')) { + $notificationObj->postAddService($dms, $notifier); + } + } +} diff --git a/inc/inc.Settings.php b/inc/inc.Settings.php index 1f0e7b692..2515be2a5 100644 --- a/inc/inc.Settings.php +++ b/inc/inc.Settings.php @@ -29,6 +29,12 @@ if(!defined("SEEDDMS_INSTALL") && file_exists(dirname($settings->_configFilePath die("SeedDMS won't run unless your remove the file ENABLE_INSTALL_TOOL from your configuration directory."); } +/* Set an encryption key if is not set */ +if(!trim($settings->_encryptionKey)) { + $settings->_encryptionKey = md5(uniqid()); + $settings->save(); +} + if(isset($settings->_extraPath)) ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path')); diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index f3b0fb372..92969360c 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -33,13 +33,13 @@ function formatted_size($size_bytes) { /* {{{ */ * dd for %d * This functions returns the converted format */ -function getConvertDateFormat() { +function getConvertDateFormat() { /* {{{ */ global $settings; if($settings->_dateformat) { return str_replace(['y', 'Y', 'm', 'M', 'F', 'd', 'l', 'D'], ['yy', 'yyyy', 'mm', 'M', 'MM', 'dd', 'DD', 'D'], $settings->_dateformat); } else return 'yyyy-mm-dd'; -} +} /* }}} */ function getReadableDate($timestamp=0) { /* {{{ */ global $settings; @@ -431,24 +431,24 @@ function _add_log_line($msg="") { /* {{{ */ } } /* }}} */ - function getFolderPathHTML($folder, $tagAll=false, $document=null) { /* {{{ */ - $path = $folder->getPath(); - $txtpath = ""; - for ($i = 0; $i < count($path); $i++) { - if ($i +1 < count($path)) { - $txtpath .= "getID()."&showtree=".showtree()."\">". - htmlspecialchars($path[$i]->getName())." / "; - } - else { - $txtpath .= ($tagAll ? "getID()."&showtree=".showtree()."\">". - htmlspecialchars($path[$i]->getName())."" : htmlspecialchars($path[$i]->getName())); - } +function getFolderPathHTML($folder, $tagAll=false, $document=null) { /* {{{ */ + $path = $folder->getPath(); + $txtpath = ""; + for ($i = 0; $i < count($path); $i++) { + if ($i +1 < count($path)) { + $txtpath .= "getID()."&showtree=".showtree()."\">". + htmlspecialchars($path[$i]->getName())." / "; } - if($document) - $txtpath .= " / getId()."\">".htmlspecialchars($document->getName()).""; + else { + $txtpath .= ($tagAll ? "getID()."&showtree=".showtree()."\">". + htmlspecialchars($path[$i]->getName())."" : htmlspecialchars($path[$i]->getName())); + } + } + if($document) + $txtpath .= " / getId()."\">".htmlspecialchars($document->getName()).""; - return $txtpath; - } /* }}} */ + return $txtpath; +} /* }}} */ function showtree() { /* {{{ */ global $settings; @@ -646,14 +646,14 @@ function sendFile($filename) { /* {{{ */ } else { $size = filesize($filename); - header("Content-Length: " . $size); if (isset($_SERVER['HTTP_RANGE'])) { $fp = @fopen($filename, 'rb'); $length = $size; // Content length $start = 0; // Start byte $end = $size - 1; // End byte - header("Accept-Ranges: 0-$length"); +// header("Accept-Ranges: 0-$length"); + header("Accept-Ranges: bytes"); $c_start = $start; $c_end = $end; @@ -688,6 +688,7 @@ function sendFile($filename) { /* {{{ */ fseek($fp, $start); header('HTTP/1.1 206 Partial Content'); header("Content-Range: bytes $start-$end/$size"); + header("Content-Length: " . $length); $buffer = 1024 * 8; while(!feof($fp) && ($p = ftell($fp)) <= $end) { @@ -701,6 +702,7 @@ function sendFile($filename) { /* {{{ */ fclose($fp); } else { + header("Content-Length: " . $size); /* Make sure output buffering is off */ if (ob_get_level()) { ob_end_clean(); @@ -776,6 +778,82 @@ function createNonce() { /* {{{ */ return base64_encode($bytes); } /* }}} */ +/** + * Returns the mandatory reviewers + * + * This function checks if the reviewers have at least read access + * on the folder containing the document. + * + * @param $folder folder where document is located + * @param $user user creating the new version or document + * @return array + */ +function getMandatoryReviewers($folder, $user) { /* {{{ */ + global $settings; + + /* Get a list of all users and groups with read access on the folder. + * Only those users and groups will be added as reviewers + */ + $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); + $res=$user->getMandatoryReviewers(); + $reviewers = array('i'=>[], 'g'=>[]); + foreach ($res as $r){ + if ($r['reviewerUserID']!=0){ + foreach ($docAccess["users"] as $usr) + if ($usr->getID()==$r['reviewerUserID']){ + $reviewers["i"][] = $r['reviewerUserID']; + break; + } + } elseif ($r['reviewerGroupID']!=0){ + foreach ($docAccess["groups"] as $grp) + if ($grp->getID()==$r['reviewerGroupID']){ + $reviewers["g"][] = $r['reviewerGroupID']; + break; + } + } + } + return $reviewers; +} /* }}} */ + +/** + * Returns the mandatory approvers + * + * This function checks if the approvers have at least read access + * on the folder containing the document. + * + * @param $folder folder where document is located + * @param $user user creating the new version or document + * @return array + */ +function getMandatoryApprovers($folder, $user) { /* {{{ */ + global $settings; + + /* Get a list of all users and groups with read access on the folder. + * Only those users and groups will be added as approvers + */ + $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); + $res=$user->getMandatoryApprovers(); + $approvers = array('i'=>[], 'g'=>[]); + foreach ($res as $r){ + + if ($r['approverUserID']!=0){ + foreach ($docAccess["users"] as $usr) + if ($usr->getID()==$r['approverUserID']){ + $approvers["i"][] = $r['approverUserID']; + break; + } + } + else if ($r['approverGroupID']!=0){ + foreach ($docAccess["groups"] as $grp) + if ($grp->getID()==$r['approverGroupID']){ + $approvers["g"][] = $r['approverGroupID']; + break; + } + } + } + return $approvers; +} /* }}} */ + /** * Class for creating encrypted api keys * diff --git a/inc/inc.Version.php b/inc/inc.Version.php index 765c0a617..8e4db572b 100644 --- a/inc/inc.Version.php +++ b/inc/inc.Version.php @@ -20,7 +20,7 @@ class SeedDMS_Version { /* {{{ */ - const _number = "5.1.21"; + const _number = "5.1.22"; const _string = "SeedDMS"; function __construct() { diff --git a/index.php b/index.php index 98b5511f3..049d7a48e 100644 --- a/index.php +++ b/index.php @@ -39,7 +39,7 @@ if(true) { $file = substr($uri->getPath(), 1); if(file_exists($file) && is_file($file)) { $_SERVER['SCRIPT_FILENAME'] = basename($file); - include($file); +// include($file); exit; } if($request->isXhr()) { diff --git a/install/update-3.4.0/update.sql b/install/update-3.4.0/update.sql index 1858d49b2..47ded5264 100644 --- a/install/update-3.4.0/update.sql +++ b/install/update-3.4.0/update.sql @@ -173,12 +173,12 @@ CREATE TABLE `tblUserPasswordHistory` ( `id` int(11) NOT NULL auto_increment, `userID` int(11) NOT NULL default '0', `pwd` varchar(50) default NULL, - `date` datetime NOT NULL default '0000-00-00 00:00:00', + `date` datetime NOT NULL, PRIMARY KEY (`id`), CONSTRAINT `tblUserPasswordHistory_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -ALTER TABLE tblUsers ADD COLUMN `pwdExpiration` datetime NOT NULL default '0000-00-00 00:00:00'; +ALTER TABLE tblUsers ADD COLUMN `pwdExpiration` datetime default NULL; ALTER TABLE tblUsers ADD COLUMN `loginfailures` tinyint(4) NOT NULL default '0'; diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 1e45b8332..f67828709 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -492,6 +492,7 @@ URL: [url]', 'edit_folder_props' => 'تعديل مجلد', 'edit_group' => 'تعديل مجموعة', 'edit_online' => 'تعديل عبر الإنترنت', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'تعديل المهمة', 'edit_transmittal_props' => 'تعديل الإحالة', @@ -502,7 +503,9 @@ URL: [url]', 'email' => 'البريد الإلكتروني', 'email_error_title' => 'لمي يتم ادخال البريد الالكتروني', 'email_footer' => 'يمكنك دائما تغيير اعدادات بريدك الالكتروني من خلال خاصية - مستنداتي', +'email_footer_html' => '', 'email_header' => 'هذا رسالة تلقائية من نظام ادارة المستندات!', +'email_header_html' => '', 'email_not_given' => 'من فضلك ادخل بريد الكتروني صحيح.', 'empty_attribute_group_list' => 'معرف لائحة المجموعات خالية', 'empty_folder_list' => 'لايوجد مستندات او مجلدات', @@ -537,6 +540,7 @@ URL: [url]', 'exclude_items' => 'فصل الأشياء', 'expired' => 'انتهى صلاحيته', 'expired_at_date' => 'تنتهي صلاحيته في التاريخ', +'expired_docs_mail_subject' => '', 'expired_documents' => 'مستندات انتهت صلاحيتها', 'expires' => 'تنتهى صلاحيته', 'expire_by_date' => 'تنتهي صلاحيته في التاريخ', @@ -561,6 +565,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'إرشيف أطول', 'extension_changelog' => 'سجل التعديلات', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'تحميل الإضافات', 'extension_manager' => 'إدارة الإضافات', 'extension_mgr_error_upload' => '', @@ -568,6 +574,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'لا يمكن تحميل إضافات جديدة لأن دليل الإضافات غير قابل للكتابة.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'مستودع إدارة الإضافات', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'لائحة الإضافات حسب الإصدار', 'february' => 'فبراير', 'file' => 'ملف', @@ -688,6 +696,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'نسخ قائمة صلاحيات موروثة.', 'inherits_access_empty_msg' => 'ابدأ بقائمة صلاحيات فارغة', 'inherits_access_msg' => 'الصلاحيات موروثة.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'خطأ داخلي', 'internal_error_exit' => 'خطأ داخلي. عدم الاستطاعة لاستكمال الطلب. خروج', @@ -1078,6 +1087,7 @@ URL: [url]', 'review_update_failed' => 'خطأ في تحديث حالة المراجعة. التحديث فشل.', 'revise_document' => 'راجع المستند', 'revise_document_on' => 'راجع المستند على', +'revision' => '', 'revisions_accepted' => 'تم الموافقة على المراجعات', 'revisions_accepted_latest' => '', 'revisions_not_touched' => 'المراجعات غير ملموسة', @@ -1179,6 +1189,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'اختيار', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'حدد معرف سمة المجموعة', 'select_attribute_value' => 'اختيار سمة الرقم', 'select_category' => 'اضغط لاختيار قسم', @@ -1658,6 +1669,7 @@ URL: [url]', 'splash_edit_user' => 'تحرير المستخدم', 'splash_error_add_to_transmittal' => 'خطأ الإضافة إلى الإحالة', 'splash_error_rm_download_link' => 'خطأ في إزالة رابط التنزيل', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'خطأ في إرسال رابط التنزيل', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1760,8 +1772,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'اخذ فهرسة المراجع', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'مهمات', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'تفصيل المهام', 'task_disabled' => 'تم توقيف المهمة', 'task_frequency' => 'تردد المهمة', @@ -1802,6 +1817,7 @@ URL: [url]', 'transfer_content' => 'تحويل المحتوى', 'transfer_document' => 'تحويل مستند', 'transfer_no_read_access' => 'تحويل بلا دخول للقراءة', +'transfer_no_users' => '', 'transfer_no_write_access' => 'تحويل بلا دخول للكتابة', 'transfer_objects' => 'تحويل أشياء', 'transfer_objects_to_user' => 'تحويل شيء إلى مستخدم', @@ -1940,6 +1956,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'تحويل سير العمل بدون استخدام مستخدم من المجموعة', 'workflow_user_summary' => 'ملخص المستخدم', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => 'اشياء أكثر', 'year_view' => 'عرض السنة', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index 624565b9a..2271153c4 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (866) +// Translators: Admin (870) $text = array( '2_factor_auth' => '', @@ -108,7 +108,7 @@ $text = array( 'approval_deletion_email_subject' => '', 'approval_file' => '', 'approval_group' => 'Утвърждаваща група', -'approval_log' => '', +'approval_log' => 'Потвърден лог', 'approval_request_email' => 'Запитване за утвърждаване', 'approval_request_email_body' => '', 'approval_request_email_subject' => '', @@ -412,7 +412,7 @@ $text = array( 'do_object_setfilesize' => 'Установи размер на файла', 'do_object_setfiletype' => '', 'do_object_unlink' => '', -'draft' => '', +'draft' => 'Чернова', 'draft_pending_approval' => 'Чернова - очаква утвърждаване', 'draft_pending_review' => 'Чернова - очаква рецензия', 'drag_icon_here' => 'Провлачи икона или папка, или документ ТУК!', @@ -445,6 +445,7 @@ $text = array( 'edit_folder_props' => 'Редактирай папка', 'edit_group' => 'Редактирай група', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -455,7 +456,9 @@ $text = array( 'email' => 'Email', 'email_error_title' => 'Email не е указан', 'email_footer' => 'Винаги можете да измените e-mail исползвайки функцията \'Моя учетка\'', +'email_footer_html' => '', 'email_header' => 'Това е автоматично уведомяване от сървъра за документооборот', +'email_header_html' => '', 'email_not_given' => 'Въведете настоящ email.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Няма документи или папки', @@ -490,6 +493,7 @@ $text = array( 'exclude_items' => '', 'expired' => 'Изтекъл', 'expired_at_date' => '', +'expired_docs_mail_subject' => '', 'expired_documents' => 'просрочени документи', 'expires' => 'Изтича', 'expire_by_date' => 'Изтича на', @@ -510,6 +514,8 @@ $text = array( 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'управление на добавките', 'extension_mgr_error_upload' => '', @@ -517,6 +523,8 @@ $text = array( 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'Февруари', 'file' => 'Файл', @@ -617,6 +625,7 @@ $text = array( 'inherits_access_copy_msg' => 'Изкопирай наследения список', 'inherits_access_empty_msg' => 'Започни с празен списък за достъп', 'inherits_access_msg' => 'достъпът наследен.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Вътрешна грешка', 'internal_error_exit' => 'Вътрешна грешка. Невозможно е да се изпълни запитването.', @@ -942,7 +951,7 @@ $text = array( 'review_deletion_email_subject' => '', 'review_file' => '', 'review_group' => 'Рецензираща група', -'review_log' => '', +'review_log' => 'Преглед на лога', 'review_request_email' => 'Запитване за рецензия', 'review_request_email_body' => '', 'review_request_email_subject' => '', @@ -954,6 +963,7 @@ $text = array( 'review_update_failed' => 'грешка при обновяване статуса на рецензията', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1042,6 +1052,7 @@ $text = array( 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Избор', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Изберете категория', @@ -1521,6 +1532,7 @@ $text = array( 'splash_edit_user' => '', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1623,8 +1635,11 @@ $text = array( 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1665,6 +1680,7 @@ $text = array( 'transfer_content' => '', 'transfer_document' => 'Прехвърли документ', 'transfer_no_read_access' => '', +'transfer_no_users' => '', 'transfer_no_write_access' => '', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1789,6 +1805,7 @@ $text = array( 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Резюме за потребител', +'wrong_checksum' => 'Грешка при проверката', 'wrong_filetype' => '', 'x_more_objects' => 'още [number] документа', 'year_view' => 'годишен изглед', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index d2b319ba9..c5284cfc8 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (764) +// Translators: Admin (770) $text = array( '2_factor_auth' => '', @@ -108,7 +108,7 @@ $text = array( 'approval_deletion_email_subject' => '', 'approval_file' => '', 'approval_group' => 'Grup aprovador', -'approval_log' => '', +'approval_log' => 'Log d\'aprovació', 'approval_request_email' => 'Petició d\'aprovació', 'approval_request_email_body' => 'Petició d\'aprovació Dokument: [name] @@ -312,7 +312,7 @@ URL: [url]', 'daily' => 'Daily', 'databasesearch' => 'Database search', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Carregant dades, espereu siusplau...', 'date' => 'Data', 'days' => '', 'debug' => '', @@ -434,7 +434,7 @@ URL: [url]', 'duplicates' => '', 'duplicate_content' => '', 'edit' => 'editar', -'edit_attributes' => '', +'edit_attributes' => 'Editar atributs', 'edit_comment' => 'Editar comentari', 'edit_default_keywords' => 'Editar mots clau', 'edit_document_access' => 'Editar accés', @@ -450,6 +450,7 @@ URL: [url]', 'edit_folder_props' => 'Editar directori', 'edit_group' => 'Editar grup...', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -460,7 +461,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => '', 'email_footer' => 'Sempre es pot canviar la configuració de correu electrònic utilitzant les funcions de «El meu compte»', +'email_footer_html' => '', 'email_header' => 'Aquest es un missatge automàtic del servidor de DMS.', +'email_header_html' => '', 'email_not_given' => '', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Sense documents o carpetes', @@ -495,6 +498,7 @@ URL: [url]', 'exclude_items' => '', 'expired' => 'Caducat', 'expired_at_date' => '', +'expired_docs_mail_subject' => '', 'expired_documents' => '', 'expires' => 'Caduca', 'expire_by_date' => 'Expiració segons data', @@ -515,6 +519,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'Gestiona les Extensions', 'extension_mgr_error_upload' => '', @@ -522,6 +528,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'Febrer', 'file' => 'Fitxer', @@ -622,6 +630,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copiar llista d\'accés heretat', 'inherits_access_empty_msg' => 'Començar amb una llista d\'accés buida', 'inherits_access_msg' => 'Accés heretat', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Error intern', 'internal_error_exit' => 'Error intern. No és possible acabar la sol.licitud.', @@ -867,7 +876,7 @@ URL: [url]', 'pl_PL' => 'Polonès', 'possible_substitutes' => '', 'preset_expires' => '', -'preview' => '', +'preview' => 'Previsualitzar', 'preview_converters' => '', 'preview_images' => '', 'preview_markdown' => '', @@ -947,7 +956,7 @@ URL: [url]', 'review_deletion_email_subject' => '', 'review_file' => '', 'review_group' => 'Grup de revisió', -'review_log' => '', +'review_log' => 'Log de revisió', 'review_request_email' => 'Petició de revisió', 'review_request_email_body' => '', 'review_request_email_subject' => '', @@ -959,6 +968,7 @@ URL: [url]', 'review_update_failed' => 'Error actualitzant l\'estat de la revisió. L\'actualizació ha fallat.', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1047,6 +1057,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Selecció', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Prem per seleccionar la categoria', @@ -1526,6 +1537,7 @@ URL: [url]', 'splash_edit_user' => '', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1628,8 +1640,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1670,6 +1685,7 @@ URL: [url]', 'transfer_content' => '', 'transfer_document' => 'transferir document', 'transfer_no_read_access' => '', +'transfer_no_users' => '', 'transfer_no_write_access' => 'transferir sense poder escriure', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1755,7 +1771,7 @@ URL: [url]', 'version_deleted_email_subject' => '', 'version_info' => 'Informació de versió', 'view' => '', -'view_document' => '', +'view_document' => 'Informació del document', 'view_folder' => '', 'view_online' => 'Veure online', 'warning' => 'Advertència', @@ -1794,6 +1810,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] objectes més', 'year_view' => 'Vista d\'any', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index b531c6a1d..0ab02f967 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1537), kreml (579) +// Translators: Admin (1540), kreml (579) $text = array( '2_factor_auth' => 'dvoufaktorové ověření', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Upravit složku', 'edit_group' => 'Upravit skupinu', 'edit_online' => 'Upravit online', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'Upravit úkol', 'edit_transmittal_props' => 'Upravit vlastnosti přenosu', @@ -526,7 +527,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Není zadána emailová adresa', 'email_footer' => 'Změnu nastavení e-mailu můžete kdykoliv provést pomocí funkce\'Můj účet\'', +'email_footer_html' => '', 'email_header' => 'Toto je automatická zpráva ze serveru DMS.', +'email_header_html' => '', 'email_not_given' => 'Zadejte platnou emailovou adresu.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Žádné dokumenty nebo složky', @@ -561,6 +564,7 @@ URL: [url]', 'exclude_items' => 'Vyloučit položky', 'expired' => 'Platnost vypršela', 'expired_at_date' => 'Platnost vyprší v [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Expirované dokumenty', 'expires' => 'Platnost vyprší', 'expire_by_date' => 'Platnost vyprší k datu', @@ -585,6 +589,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Rozšíření', 'extension_changelog' => 'Changelog', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Načítání rozšíření', 'extension_manager' => 'Správa rozšíření', 'extension_mgr_error_upload' => '', @@ -592,6 +598,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Nahrání nového rozšíření není možné, jelikož do složky rozšíření nelze zapisovat.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Dostupný', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Verze', 'february' => 'Únor', 'file' => 'Soubor', @@ -705,7 +713,7 @@ URL: [url]', 'include_subdirectories' => 'Včetně podadresářů', 'indexing_tasks_in_queue' => 'Indexování úkolů ve frontě', 'index_converters' => 'Indexování převodníků', -'index_document_unchanged' => '', +'index_document_unchanged' => 'dokument nezměněn', 'index_done' => 'Indexování hotovo', 'index_error' => 'Chyba', 'index_folder' => 'Složka indexu', @@ -719,6 +727,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Zkopírovat zděděný seznam řízení přístupu', 'inherits_access_empty_msg' => 'Založit nový seznam řízení přístupu', 'inherits_access_msg' => 'Přístup se dědí.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Vnitřní chyba', 'internal_error_exit' => 'Vnitřní chyba. Nebylo možné dokončit požadavek. Ukončuje se.', @@ -1140,6 +1149,7 @@ URL: [url]', 'review_update_failed' => 'Chyba při aktualizaci stavu recenze. Aktualizace selhala.', 'revise_document' => 'Revize dokumentu', 'revise_document_on' => 'Další revize verze dokumentu v [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] již přijato', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '[no_revisions] revizí nebylo dotčeno', @@ -1246,6 +1256,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Výběr', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Vybrat, kdy chcete zobrazit', 'select_attribute_value' => 'Vybrat hodnotu atributu', 'select_category' => 'Kliknutím vybrat kategorii', @@ -1730,6 +1741,7 @@ Jméno: [username] 'splash_edit_user' => 'Uživatel uložen', 'splash_error_add_to_transmittal' => 'Chyba při přidávání dokumentu k přenosu', 'splash_error_rm_download_link' => 'Chyba při odstranění odkazu ke stažení', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Chyba při odesílání odkazu ke stažení', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1832,8 +1844,11 @@ Jméno: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Převzít jednotlivého recenzenta z poslední verze.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Úkoly', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Popis', 'task_disabled' => 'Vypnuto', 'task_frequency' => 'Frekvence', @@ -1874,6 +1889,7 @@ Jméno: [username] 'transfer_content' => '', 'transfer_document' => 'Přenést dokument', 'transfer_no_read_access' => 'Uživatel nemá přístup ke čtení ve složce', +'transfer_no_users' => '', 'transfer_no_write_access' => 'Uživatel nemá přístup k zápisu do složky', 'transfer_objects' => 'Přenos objektů', 'transfer_objects_to_user' => 'Nový vlastník', @@ -1973,7 +1989,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Verze smazána', 'version_info' => 'Informace o verzi', 'view' => 'Posouzení', -'view_document' => '', +'view_document' => 'Zobrazit podrobnosti dokumentu', 'view_folder' => '', 'view_online' => 'Zobrazit online', 'warning' => 'Upozornění', @@ -2012,6 +2028,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Alespoň jedna z transformací pracovního postupu nemá uživatele ani skupinu!', 'workflow_user_summary' => 'Přehled uživatelů', +'wrong_checksum' => 'Špatný kontrolní součet', 'wrong_filetype' => '', 'x_more_objects' => 'Načíst další dokumenty ([number])', 'year_view' => 'Zobrazení roku', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index a34f7d44b..632af19b8 100644 --- a/languages/de_DE/lang.inc +++ b/languages/de_DE/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2848), dgrutsch (22) +// Translators: Admin (2867), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Bearbeiten', 'edit_group' => 'Gruppe bearbeiten', 'edit_online' => 'Online editieren', +'edit_online_not_allowed' => 'Sie dürfen diese Fassung nicht verändern, weil Sie nicht von Ihnen angelegt wurde. Laden Sie stattdessen eine neue Version hoch.', 'edit_online_warning' => 'Mit dem Speichern wird die aktuellen Version des Dokuments überschrieben. Es wird keine neue Version angelegt.', 'edit_task' => 'Task editieren', 'edit_transmittal_props' => 'Attribute der Dokumentenliste bearbeiten', @@ -526,7 +527,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Keine E-Mail-Adresse eingegeben', 'email_footer' => 'Sie können zu jeder Zeit Ihre E-Mail-Adresse über \'Mein Profil\' ändern.', +'email_footer_html' => '

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

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

Dies ist eine automatische Nachricht des DMS-Servers.

', 'email_not_given' => 'Bitte geben Sie eine gültige E-Mail-Adresse ein.', 'empty_attribute_group_list' => 'Keine Attributgruppen', 'empty_folder_list' => 'Keine Dokumente oder Ordner', @@ -561,6 +564,7 @@ URL: [url]', 'exclude_items' => 'Einträge auslassen', 'expired' => 'abgelaufen', 'expired_at_date' => 'Abgelaufen am [datetime]', +'expired_docs_mail_subject' => 'Abgelaufende Dokumente', 'expired_documents' => 'Abgelaufene Dokumente', 'expires' => 'Ablaufdatum', 'expire_by_date' => 'Ablauf nach Datum', @@ -585,6 +589,8 @@ URL: [url]', 'export_user_list_csv' => 'Exportiere Benutzer als CSV-Datei', 'extension_archive' => 'Erweiterung', 'extension_changelog' => 'Versionshistorie', +'extension_is_off_now' => 'Erweiterung ist ausgeschaltet', +'extension_is_on_now' => 'Erweiterung ist eingeschaltet', 'extension_loading' => 'Lade Erweiterungen ...', 'extension_manager' => 'Erweiterungen verwalten', 'extension_mgr_error_upload' => 'Beim Hochladen der Extension ist ein Fehler aufgetreten.', @@ -592,6 +598,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Der Upload neuer Erweiterungen ist nicht möglich, weil das Verzeichnis für Erweiterungen nicht beschreibbar ist.', 'extension_mgr_no_zipfile' => 'Die hochgeladene Erweiterung ist keine Zip-Datei', 'extension_mgr_repository' => 'Verfügbar', +'extension_missing_name' => 'Kein Erweiterungsname übergeben', +'extension_toggle_error' => 'Konnte Erweiterung nicht aus/einschalten', 'extension_version_list' => 'Versionen', 'february' => 'Februar', 'file' => 'Datei', @@ -719,6 +727,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Berechtigungen kopieren', 'inherits_access_empty_msg' => 'Leere Zugriffsliste', 'inherits_access_msg' => 'Zur Zeit werden die Rechte geerbt', +'installed_apache_extensions' => 'Installierte Apache-Erweiterungen', 'installed_php_extensions' => 'Installierte PHP-Erweiterungen', 'internal_error' => 'Interner Fehler', 'internal_error_exit' => 'Interner Fehler: Anfrage kann nicht ausgeführt werden.', @@ -1144,6 +1153,7 @@ URL: [url]', 'review_update_failed' => 'Störung bei Aktualisierung des Prüfstatus. Aktualisierung gescheitert.', 'revise_document' => 'Wiederholungsprüfung', 'revise_document_on' => 'Nächste Wiederholungsprüfung des Dokuments am [date]', +'revision' => 'Wiederholungsprüfung', 'revisions_accepted' => '[no_revisions] Wiederholungsprüfungen', 'revisions_accepted_latest' => '(davon [no_revisions] in letzter Version)', 'revisions_not_touched' => '[no_revisions] offene Wiederholungspüfungen', @@ -1257,6 +1267,7 @@ URL: [url]', 'seeddms_info' => 'Informationen über SeedDMS', 'seeddms_version' => 'SeedDMS Version', 'selection' => 'Auswahl', +'select_attrdef' => 'Attributdefinition auswählen', 'select_attrdefgrp_show' => 'Anzeigeort auswählen', 'select_attribute_value' => 'Attributwert auswählen', 'select_category' => 'Klicken zur Auswahl einer Kategorie', @@ -1416,7 +1427,7 @@ Name: [username] 'settings_enableDuplicateDocNames_desc' => 'Erlaube doppelte Dokumentennamen in einem Ordner.', 'settings_enableDuplicateSubFolderNames' => 'Erlaube doppelte Namen von Unterordnern', 'settings_enableDuplicateSubFolderNames_desc' => 'Erlaube doppelte Namen von Unterordnern in einem Ordner.', -'settings_enableEmail' => 'E-Mail aktivieren', +'settings_enableEmail' => 'E-Mail-Benachrichtigung aktivieren', 'settings_enableEmail_desc' => 'Automatische E-Mail-Benachrichtigung ein-/ausschalten', 'settings_enableFilterReceipt' => 'Besitzer, Prüfer, ... aus Empfängerliste filtern', 'settings_enableFilterReceipt_desc' => 'Anwählen, um einige Empfänger aus der Liste zu entfernen, wenn diese als Mitglieder einer Gruppe eingetragen werden.', @@ -1741,6 +1752,7 @@ Name: [username] 'splash_edit_user' => 'Benutzer gespeichert', 'splash_error_add_to_transmittal' => 'Fehler beim Hinzufügen zur Dokumentenliste', 'splash_error_rm_download_link' => 'Fehler beim Löschen des Download-Links', +'splash_error_saving_file' => 'Fehler beim Speichern der Datei', 'splash_error_send_download_link' => 'Fehler beim Verschicken des Download-Links', 'splash_expiration_date_cleared' => 'Ablaufdatum gelöscht', 'splash_expiration_date_set' => 'Ablaufdatum auf [date] gesetzt', @@ -1843,8 +1855,11 @@ Name: [username] 'takeOverIndApprovers' => 'Einzelfreigeber übernehmen', 'takeOverIndReviewer' => 'Übernehme die Einzelprüfer von der letzten Version.', 'takeOverIndReviewers' => 'Einzelprüfer übernehmen', +'target_equals_source_folder' => 'Zielordner ist identisch zu Quellordner', 'tasks' => 'Aufgaben', 'task_core_expireddocs_days' => 'Tage', +'task_core_expireddocs_email' => 'E-Mail', +'task_core_indexingdocs_recreate' => 'Index neu erzeugen', 'task_description' => 'Beschreibung', 'task_disabled' => 'Deaktiviert', 'task_frequency' => 'Häufigkeit', @@ -1885,6 +1900,7 @@ Name: [username] 'transfer_content' => 'Inhalt übertragen', 'transfer_document' => 'Dokument übertragen', 'transfer_no_read_access' => 'Der Benutzer hat in dem Ordner keine Schreibrechte', +'transfer_no_users' => 'Es existieren zur Zeit keine Benutzer auf die dieses Dokument übertragen werden kann.', 'transfer_no_write_access' => 'Der Benutzer hat in dem Ordner keine Schreibrechte', 'transfer_objects' => 'Objekte übertragen', 'transfer_objects_to_user' => 'Neuer Eigentümer', @@ -2023,6 +2039,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Mindestens eine Transition hat weder einen Benutzer noch eine Gruppe zugewiesen!', 'workflow_user_summary' => 'Übersicht Benutzer', +'wrong_checksum' => 'Falsche Prüfsumme', 'wrong_filetype' => 'Falscher Dateityp', 'x_more_objects' => '[number] weitere Objekte', 'year_view' => 'Jahresansicht', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index b4cb4fc10..acae5f2f2 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (347) +// Translators: Admin (359) $text = array( '2_factor_auth' => '', @@ -116,7 +116,7 @@ $text = array( 'approval_submit_email' => '', 'approval_submit_email_body' => '', 'approval_submit_email_subject' => '', -'approval_summary' => '', +'approval_summary' => 'Σύνολο Εγκρίσεων', 'approval_update_failed' => '', 'approvers' => '', 'approver_already_assigned' => '', @@ -223,7 +223,7 @@ $text = array( 'change_assignments' => '', 'change_password' => 'Αλλαγή κωδικού', 'change_password_message' => 'Ο κωδικός σας έχει αλλάξει.', -'change_recipients' => '', +'change_recipients' => 'Ορισμός παραληπτών', 'change_revisors' => '', 'change_status' => 'Αλλαγή κατάστασης', 'charts' => 'Διαγράμματα', @@ -267,7 +267,7 @@ $text = array( 'comment_for_current_version' => 'τρέχουσα έκδοση', 'configure_extension' => '', 'confirm_clear_cache' => '', -'confirm_create_fulltext_index' => '', +'confirm_create_fulltext_index' => 'Ναι, Θα ήθελα την επαναδημιουργία των δεικτών πλήρους κειμένου', 'confirm_move_document' => '', 'confirm_move_folder' => '', 'confirm_pwd' => 'Επιβεβαίωση κωδικού', @@ -297,7 +297,7 @@ $text = array( 'copied_to_checkout_as' => '', 'create_download_link' => '', 'create_fulltext_index' => 'Δημιούργησε Αρίθμηση των Κειμένων', -'create_fulltext_index_warning' => '', +'create_fulltext_index_warning' => 'Είσαστε έτοιμοι για επαναδημιουργία των δεικτών πλήρους κειμένου. Αυτό θα χρειαστεί κάποιο χρόνο και θα μειώσει τη συνολική απόδοση του συστήματος. Αν πραγματικά θέλετε την επαναδημιουργία των δεικτών, παρακαλώ να επιβεβαιώσετε τη λειτουργία αυτή.', 'creation_date' => 'Δημιουργήθηκε', 'cs_CZ' => 'Τσέχικα', 'current_password' => '', @@ -329,9 +329,9 @@ $text = array( 'documents' => 'Έγγραφα', 'documents_checked_out_by_you' => '', 'documents_expired' => 'Ληγμένα έγγραφα', -'documents_in_process' => '', +'documents_in_process' => 'Κείμενα σε Εξέλιξη', 'documents_locked' => '', -'documents_locked_by_you' => '', +'documents_locked_by_you' => 'Κλειδώθηκε από', 'documents_only' => 'Έγγραφα μόνο', 'documents_rejected' => '', 'documents_to_approve' => '', @@ -445,6 +445,7 @@ $text = array( 'edit_folder_props' => 'Επεξεργασία φακέλου', 'edit_group' => '', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -455,7 +456,9 @@ $text = array( 'email' => 'Email', 'email_error_title' => '', 'email_footer' => '', +'email_footer_html' => '', 'email_header' => '', +'email_header_html' => '', 'email_not_given' => '', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Δεν υπάρχουν αρχεία ή φάκελοι', @@ -490,6 +493,7 @@ $text = array( 'exclude_items' => '', 'expired' => 'Έχει λήξει', 'expired_at_date' => '', +'expired_docs_mail_subject' => '', 'expired_documents' => '', 'expires' => 'Λήγει', 'expire_by_date' => 'Λήγει στην ημερομηνία', @@ -510,6 +514,8 @@ $text = array( 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'Διαχείριση πρόσθετων', 'extension_mgr_error_upload' => '', @@ -517,6 +523,8 @@ $text = array( 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'Φεβρουάριος', 'file' => 'Αρχείο', @@ -601,7 +609,7 @@ $text = array( 'include_content' => '', 'include_documents' => '', 'include_subdirectories' => '', -'indexing_tasks_in_queue' => '', +'indexing_tasks_in_queue' => 'Δημιουργία δεικτών σε ουρά', 'index_converters' => '', 'index_document_unchanged' => '', 'index_done' => '', @@ -609,7 +617,7 @@ $text = array( 'index_folder' => 'Ταξινόμηση φακέλου', 'index_no_content' => '', 'index_pending' => '', -'index_waiting' => '', +'index_waiting' => 'Αναμονή', 'individuals' => 'Άτομα', 'individuals_in_groups' => '', 'info_recipients_tab_not_released' => '', @@ -617,6 +625,7 @@ $text = array( 'inherits_access_copy_msg' => 'Αντιγραφή δικαιωμάτων πρόσβασης', 'inherits_access_empty_msg' => 'Έναρξη με κενή λίστα δικαιωμάτων πρόσβασης', 'inherits_access_msg' => 'Η πρόσβαση κληρονομήθηκε', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Εσωτερικό λάθος', 'internal_error_exit' => '', @@ -839,7 +848,7 @@ URL: [url]', 'operation_disallowed' => '', 'order_by_sequence_off' => '', 'original_filename' => '', -'overall_indexing_progress' => '', +'overall_indexing_progress' => 'Συνολική πρόοδος δημιουργίας δεικτών', 'owner' => 'Ιδιοκτήτης', 'ownership_changed_email' => '', 'ownership_changed_email_body' => '', @@ -961,10 +970,11 @@ URL: [url]', 'review_submit_email' => '', 'review_submit_email_body' => '', 'review_submit_email_subject' => '', -'review_summary' => '', +'review_summary' => 'Σύνολο Ανασκοπήσεων', 'review_update_failed' => '', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1013,7 +1023,7 @@ URL: [url]', 'rm_workflow_state' => '', 'rm_workflow_warning' => '', 'role' => 'Ρόλος', -'role_admin' => '', +'role_admin' => 'Διαχειριστής', 'role_guest' => 'Επισκέπτης', 'role_info' => '', 'role_management' => 'Διαχείριση Ρόλων', @@ -1053,6 +1063,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Επιλογή', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Επιλογή κατηγορίας', @@ -1077,7 +1088,7 @@ URL: [url]', 'select_one' => 'Επιλογή', 'select_owner' => '', 'select_user' => 'Επιλογή χρήστη', -'select_users' => '', +'select_users' => 'Κάντε κλικ για να επιλέξετε χρήστες', 'select_value' => 'Επιλέξτε τιμή', 'select_workflow' => '', 'send_email' => '', @@ -1532,6 +1543,7 @@ URL: [url]', 'splash_edit_user' => '', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1634,8 +1646,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1676,6 +1691,7 @@ URL: [url]', 'transfer_content' => '', 'transfer_document' => 'Μεταφορά εγγράφου', 'transfer_no_read_access' => '', +'transfer_no_users' => '', 'transfer_no_write_access' => '', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1800,6 +1816,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '', 'year_view' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 28f117828..184d5532c 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1956), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1976), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Edit folder', 'edit_group' => 'Edit group', 'edit_online' => 'Edit online', +'edit_online_not_allowed' => 'You are not allowed to edit this file because you have not created the latest version. Just upload a new version of the document.', 'edit_online_warning' => 'Saving your changes will overwrite the content of the current version, instead of creating a new version.', 'edit_task' => 'Edit task', 'edit_transmittal_props' => 'Edit transmittal properties', @@ -526,7 +527,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'No email entered', 'email_footer' => 'You can always change your e-mail settings using \'My Account\' functions', +'email_footer_html' => '

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

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

This is an automatic message from the DMS server.

', 'email_not_given' => 'Please enter a valid email address.', 'empty_attribute_group_list' => 'No attribute groups', 'empty_folder_list' => 'No documents or folders', @@ -561,6 +564,7 @@ URL: [url]', 'exclude_items' => 'Exclude items', 'expired' => 'Expired', 'expired_at_date' => 'Expired at [datetime]', +'expired_docs_mail_subject' => 'Expired documents', 'expired_documents' => 'Expired documents', 'expires' => 'Expires', 'expire_by_date' => 'Expires by date', @@ -585,6 +589,8 @@ URL: [url]', 'export_user_list_csv' => 'Export users as CSV', 'extension_archive' => 'Extension', 'extension_changelog' => 'Changelog', +'extension_is_off_now' => 'Extension off now', +'extension_is_on_now' => 'Extension now enabled', 'extension_loading' => 'Loading extensions ...', 'extension_manager' => 'Manage extensions', 'extension_mgr_error_upload' => 'Error while uploading the extension.', @@ -592,6 +598,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Uploading new extensions is not possible because the extentension directory is not writable.', 'extension_mgr_no_zipfile' => 'The uploaded extension is not a zip file', 'extension_mgr_repository' => 'Available', +'extension_missing_name' => 'No extension name given', +'extension_toggle_error' => 'Could not toggle extension', 'extension_version_list' => 'Versions', 'february' => 'February', 'file' => 'File', @@ -719,6 +727,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copy inherited access list', 'inherits_access_empty_msg' => 'Start with empty access list', 'inherits_access_msg' => 'Access is being inherited.', +'installed_apache_extensions' => 'Installed apache Extensions', 'installed_php_extensions' => 'Installed php extensions', 'internal_error' => 'Internal error', 'internal_error_exit' => 'Internal error. Unable to complete request.', @@ -1145,6 +1154,7 @@ URL: [url]', 'review_update_failed' => 'Error updating review status. Update failed.', 'revise_document' => 'Revise document', 'revise_document_on' => 'Next revision of document version on [date]', +'revision' => 'Revision', 'revisions_accepted' => '[no_revisions] revisions already accepted', 'revisions_accepted_latest' => '(being [no_revisions] in latest version)', 'revisions_not_touched' => '[no_revisions] revisions not being touched', @@ -1251,6 +1261,7 @@ URL: [url]', 'seeddms_info' => 'Information about SeedDMS', 'seeddms_version' => 'Version of SeedDMS', 'selection' => 'Selection', +'select_attrdef' => 'Select attribute definition', 'select_attrdefgrp_show' => 'Choose when to show', 'select_attribute_value' => 'Select attribute value', 'select_category' => 'Click to select category', @@ -1410,7 +1421,7 @@ Name: [username] 'settings_enableDuplicateDocNames_desc' => 'Allows to have duplicate document names in a folder.', 'settings_enableDuplicateSubFolderNames' => 'Allow duplicat subfolder names', 'settings_enableDuplicateSubFolderNames_desc' => 'Allows to have duplicate subfolder names in a folder.', -'settings_enableEmail' => 'Enable E-mail', +'settings_enableEmail' => 'Enable E-mail Notification', 'settings_enableEmail_desc' => 'Enable/disable automatic email notification', 'settings_enableFilterReceipt' => 'Filter out owner, reviewer, ... from reception list', 'settings_enableFilterReceipt_desc' => 'Enable, in order to filter out some recipients from a reception list if members of a group are selected.', @@ -1653,7 +1664,7 @@ Name: [username] 'settings_System' => 'System', 'settings_tasksInMenu' => 'Selected tasks', 'settings_tasksInMenu_approval' => 'Approvals', -'settings_tasksInMenu_checkedout' => '', +'settings_tasksInMenu_checkedout' => 'Checked out', 'settings_tasksInMenu_desc' => 'Select those tasks which are to be counted. If none is selected, then all tasks will be counted.', 'settings_tasksInMenu_needscorrection' => 'Correction needed', 'settings_tasksInMenu_receipt' => 'Receipts', @@ -1735,6 +1746,7 @@ Name: [username] 'splash_edit_user' => 'User saved', 'splash_error_add_to_transmittal' => 'Error while adding document to transmittal', 'splash_error_rm_download_link' => 'Error when removing download link', +'splash_error_saving_file' => 'Error while saving file', 'splash_error_send_download_link' => 'Error while sending download link', 'splash_expiration_date_cleared' => 'Cleared expiration date', 'splash_expiration_date_set' => 'Set expiration date on [date]', @@ -1837,8 +1849,11 @@ Name: [username] 'takeOverIndApprovers' => 'Take Over Individual Approvers', 'takeOverIndReviewer' => 'Take over individual reviewer from last version.', 'takeOverIndReviewers' => 'Take Over Individual Reviewers', +'target_equals_source_folder' => 'Target folder equals source folder', 'tasks' => 'Tasks', 'task_core_expireddocs_days' => 'Days', +'task_core_expireddocs_email' => 'Email', +'task_core_indexingdocs_recreate' => 'Recreate index', 'task_description' => 'Description', 'task_disabled' => 'Disabled', 'task_frequency' => 'Frequency', @@ -1879,6 +1894,7 @@ Name: [username] 'transfer_content' => 'Transfer content', 'transfer_document' => 'Transfer document', 'transfer_no_read_access' => 'The user does not have read access in the folder', +'transfer_no_users' => 'There are currenlty no users the document can be transfered to.', 'transfer_no_write_access' => 'The user does not have write access in the folder', 'transfer_objects' => 'Transfer objects', 'transfer_objects_to_user' => 'New owner', @@ -2017,6 +2033,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'At least one of the transitions has neither a user nor a group!', 'workflow_user_summary' => 'User summary', +'wrong_checksum' => 'Wrong checksum', 'wrong_filetype' => 'Wrong file type', 'x_more_objects' => '[number] more objects', 'year_view' => 'Year View', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 03c596068..10e506dbe 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -19,10 +19,10 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: acabello (20), Admin (1292), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1310), angel (123), francisco (2), jaimem (14) $text = array( -'2_factor_auth' => '', +'2_factor_auth' => 'Autenticación de doble factor', '2_factor_auth_info' => '', '2_fact_auth_secret' => '', 'abbr_day' => '', @@ -499,6 +499,7 @@ URL: [url]', 'edit_folder_props' => 'Editar carpeta', 'edit_group' => 'Editar grupo...', 'edit_online' => 'Editar en línea', +'edit_online_not_allowed' => '', 'edit_online_warning' => 'Al guardar sus cambios sobrescribirá el contenido de la versión actual, en lugar de crear una nueva versión.', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -509,7 +510,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'No ha introducido un correo', 'email_footer' => 'Siempre se puede cambiar la configuración de correo electrónico utilizando las funciones de «Mi cuenta»', +'email_footer_html' => '', 'email_header' => 'Este es un mensaje automático del servidor de DMS.', +'email_header_html' => '', 'email_not_given' => 'Por favor, introduzca una dirección de correo válida.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Sin documentos o carpetas', @@ -544,6 +547,7 @@ URL: [url]', 'exclude_items' => 'Registros excluidos', 'expired' => 'Caducado', 'expired_at_date' => 'Expirado en [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Documentos expirados', 'expires' => 'Caduca', 'expire_by_date' => 'Fecha de expiración', @@ -568,6 +572,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => 'Log de Cambios', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Cargando extensiones', 'extension_manager' => 'Administrar extensiones', 'extension_mgr_error_upload' => '', @@ -575,6 +581,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'No es posible cargar mas extensiones porque el directorio de extensiones no se puede escribir', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Disponible', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versiones', 'february' => 'Febrero', 'file' => 'Fichero', @@ -695,6 +703,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copiar lista de acceso heredado', 'inherits_access_empty_msg' => 'Empezar con una lista de acceso vacía', 'inherits_access_msg' => 'Acceso heredado.', +'installed_apache_extensions' => '', 'installed_php_extensions' => 'Extensiones PHP instaladas', 'internal_error' => 'Error interno', 'internal_error_exit' => 'Error interno. No es posible terminar la solicitud.', @@ -1011,10 +1020,10 @@ Si continua teniendo problemas de acceso, por favor contacte con el administrado 'receipt_update_failed' => '', 'recent_uploads' => 'Subidas recientes', 'reception' => 'Recepción', -'reception_acknowleged' => '', -'reception_noaction' => '', -'reception_rejected' => '', -'recipients' => '', +'reception_acknowleged' => 'Recepción aceptada', +'reception_noaction' => 'Sin acciones', +'reception_rejected' => 'Recepción rechazada', +'recipients' => 'Destinatario', 'recipient_already_removed' => '', 'redraw' => '', 'refresh' => 'Actualizar', @@ -1093,6 +1102,7 @@ URL: [url]', 'review_update_failed' => 'Error actualizando el estado de la revisión. La actualización ha fallado.', 'revise_document' => 'Revisar documento', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1103,7 +1113,7 @@ URL: [url]', 'revisions_rejected_latest' => '', 'revisions_without_group' => 'Revisiones sin grupo', 'revisions_without_user' => 'Revisiones sin usuario', -'revision_date' => '', +'revision_date' => 'Fecha de revisión', 'revision_log' => 'Histórico de revisiones', 'revision_request_email_body' => '', 'revision_request_email_subject' => '', @@ -1173,7 +1183,7 @@ URL: [url]', 'scheduler_class_description' => 'Descripción', 'scheduler_class_parameter' => 'Parametro', 'scheduler_class_tasks' => '', -'scheduler_task_mgr' => 'Rrogramacion', +'scheduler_task_mgr' => 'Programación', 'search' => 'Buscar', 'search_fulltext' => 'Buscar en texto completo', 'search_in' => 'Buscar en', @@ -1194,6 +1204,7 @@ URL: [url]', 'seeddms_info' => 'Acerca de SeedDMS', 'seeddms_version' => 'Versión de SeedDMS', 'selection' => 'Selección', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => 'Seleccionar valores de atributos', 'select_category' => 'Haga Click para seleccionar categoría', @@ -1204,16 +1215,16 @@ URL: [url]', 'select_grp_ind_notification' => '', 'select_grp_ind_recipients' => 'Seleccione grupo', 'select_grp_ind_reviewers' => 'Dar click para seleccionar el grupo', -'select_grp_ind_revisors' => '', +'select_grp_ind_revisors' => 'Clic para seleccionar grupo', 'select_grp_notification' => 'Clic para seleccionar la notificación grupal', 'select_grp_recipients' => 'Dar click para selecionar el grupo', 'select_grp_reviewers' => 'Haga Click para seleccionar grupo de revisores', -'select_grp_revisors' => '', +'select_grp_revisors' => 'Clic para seleccionar grupo de revisores', 'select_ind_approvers' => 'Haga Click para seleccionar aprobador individual', 'select_ind_notification' => 'Clic para seleccionar la notificación individual', 'select_ind_recipients' => 'Dar click para asignar los receptores', 'select_ind_reviewers' => 'Haga Click para seleccionar revisor individual', -'select_ind_revisors' => '', +'select_ind_revisors' => 'Clic para seleccionar revisores individuales', 'select_mimetype' => '', 'select_one' => 'Seleccionar uno', 'select_owner' => '', @@ -1287,9 +1298,9 @@ URL: [url]', 'settings_createdirectory' => 'Crear carpeta', 'settings_currentvalue' => 'Valor actual', 'settings_Database' => 'Configuración de Base de datos', -'settings_dateformat' => '', +'settings_dateformat' => 'Formato de fecha', 'settings_dateformat_desc' => '', -'settings_datetimeformat' => '', +'settings_datetimeformat' => 'Format fecha/hora', 'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Base de datos', 'settings_dbDatabase_desc' => 'Nombre para su base de datos introducido durante el proceso de instalación. No edite este campo a menos que sea necesario, por ejemplo si la base de datos se traslada.', @@ -1447,7 +1458,7 @@ URL: [url]', 'settings_initialDocumentStatus_desc' => 'Este estatus se fijará cuando un documento sea añadido.', 'settings_initialDocumentStatus_draft' => 'Borrador', 'settings_initialDocumentStatus_released' => 'Liberado', -'settings_inlineEditing' => '', +'settings_inlineEditing' => 'Edición en linea', 'settings_inlineEditing_desc' => 'Si se encuentra habilitado, será posible editar el nombre del documentos en la página de detalles', 'settings_installADOdb' => 'Instalar ADOdb', 'settings_install_disabled' => 'El archivo ENABLE_INSTALL_TOOL ha sido eliminado. Ahora puede conectarse a SeedDMS y seguir con la configuración.', @@ -1673,6 +1684,7 @@ URL: [url]', 'splash_edit_user' => 'Usuario guardado', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1728,7 +1740,7 @@ URL: [url]', 'status_approver_removed' => 'Aprobador eliminado del proceso', 'status_needs_correction' => '', 'status_not_approved' => 'Sin aprobar', -'status_not_receipted' => '', +'status_not_receipted' => 'Aún no asignado destinario', 'status_not_reviewed' => 'Sin revisar', 'status_not_revised' => 'No revisado', 'status_receipted' => '', @@ -1755,7 +1767,7 @@ URL: [url]', 'submit_userinfo' => 'Enviar información', 'submit_webauthn_login' => '', 'submit_webauthn_register' => '', -'subsribe_timelinefeed' => '', +'subsribe_timelinefeed' => 'Suscríbase a la línea de tiempo', 'substitute_to_user' => 'Cambiar a \'[username]\'', 'substitute_user' => 'Cambiar de usuario', 'success_add_aro' => '', @@ -1775,8 +1787,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Tomar control de la revisión de la última versión', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Tareas', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1806,8 +1821,8 @@ URL: [url]', 'timeline_skip_status_change_1' => 'aprovaciones pendientes', 'timeline_skip_status_change_2' => 'versiones', 'timeline_skip_status_change_3' => 'con flujo de trabajo', -'timeline_skip_status_change_4' => '', -'timeline_skip_status_change_5' => '', +'timeline_skip_status_change_4' => 'en revisión', +'timeline_skip_status_change_5' => 'borrador', 'timeline_status_change' => 'Versión [version]: [estado]', 'to' => 'Hasta', 'toggle_manager' => 'Intercambiar mánager', @@ -1817,6 +1832,7 @@ URL: [url]', 'transfer_content' => '', 'transfer_document' => 'Transferir documento', 'transfer_no_read_access' => 'El usuario no tiene acceso de lectura en la carpeta', +'transfer_no_users' => '', 'transfer_no_write_access' => 'El usuario no tiene acceso de escritura en la carpeta', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1847,7 +1863,7 @@ URL: [url]', 'tuesday_abbr' => 'M', 'types_generic' => '', 'type_of_hook' => '', -'type_to_filter' => '', +'type_to_filter' => 'Escriba para filtrar lista', 'type_to_search' => 'Tipo de búsqueda', 'uk_UA' => 'Ucraniano', 'under_folder' => 'En carpeta', @@ -1955,6 +1971,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Resumen Usuario', +'wrong_checksum' => '', 'wrong_filetype' => 'Tipo de archivo erróneo', 'x_more_objects' => '[number] más objetos', 'year_view' => 'Vista del año', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 9eaa41622..0c43c6509 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1108), jeromerobert (50), lonnnew (9), Oudiceval (977) +// Translators: Admin (1111), jeromerobert (50), lonnnew (9), Oudiceval (977) $text = array( '2_factor_auth' => 'Authentification forte', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Modifier le dossier', 'edit_group' => 'Modifier un groupe', 'edit_online' => 'Modification en ligne', +'edit_online_not_allowed' => '', 'edit_online_warning' => 'L’enregistrement de vos modifications écrasera le contenu de la version actuelle au lieu de créer une nouvelle version.', 'edit_task' => 'Modifier la tâche', 'edit_transmittal_props' => 'Modifier les propriétés de la transmission', @@ -526,7 +527,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Aucun e-mail indiqué', 'email_footer' => 'Vous pouvez modifier vos notifications via « Mon compte ».', +'email_footer_html' => '', 'email_header' => 'Ceci est un message automatique généré par le serveur DMS.', +'email_header_html' => '', 'email_not_given' => 'Veuillez entrer une adresse e-mail valide.', 'empty_attribute_group_list' => 'Aucun groupe d’attributs', 'empty_folder_list' => 'Pas de documents ou de dossier', @@ -561,6 +564,7 @@ URL: [url]', 'exclude_items' => 'Exclure des élements', 'expired' => 'Expiré', 'expired_at_date' => 'Expiré le [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Documents expirés', 'expires' => 'Expiration', 'expire_by_date' => 'Expire à une date', @@ -585,6 +589,8 @@ URL : [url]', 'export_user_list_csv' => 'Exporter les utilisateurs en CSV', 'extension_archive' => 'Extension', 'extension_changelog' => 'Journal des modifications', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Chargement des extensions…', 'extension_manager' => 'Gestionnaire d\'extensions', 'extension_mgr_error_upload' => 'Erreur lors du chargement de l’extension', @@ -592,6 +598,8 @@ URL : [url]', 'extension_mgr_no_upload' => 'L’ajout de nouvelles extensions n’est pas possible car le répertoire des extensions n’est pas accessible en écriture.', 'extension_mgr_no_zipfile' => 'L’extension chargée n’est pas un dossier zip', 'extension_mgr_repository' => 'Disponibles', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versions', 'february' => 'Février', 'file' => 'Fichier', @@ -719,6 +727,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Recopier la liste des accès hérités', 'inherits_access_empty_msg' => 'Commencer avec une liste d\'accès vide', 'inherits_access_msg' => 'L\'accès est hérité.', +'installed_apache_extensions' => '', 'installed_php_extensions' => 'Extensions PHP installées', 'internal_error' => 'Erreur interne', 'internal_error_exit' => 'Erreur interne. Impossible d\'achever la demande.', @@ -1142,6 +1151,7 @@ URL : [url]', 'review_update_failed' => 'Erreur lors de la mise à jour du statut de vérification. Échec de la mise à jour.', 'revise_document' => 'Réviser le document', 'revise_document_on' => 'Prochaine révision de la version du document le [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] révisions déjà confirmées', 'revisions_accepted_latest' => '(dont [no_revisions] dans la dernière version)', 'revisions_not_touched' => '[no_revisions] révisions non amorcées', @@ -1249,6 +1259,7 @@ URL : [url]', 'seeddms_info' => 'Informations sur SeedDMS', 'seeddms_version' => 'Version de SeedDMS', 'selection' => 'Sélection', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Choisir quand afficher', 'select_attribute_value' => 'Sélectionnez la valeur de l’attribut', 'select_category' => 'Cliquer pour choisir une catégorie', @@ -1347,9 +1358,9 @@ Nom : [username] 'settings_createdirectory' => 'Créer répertoire', 'settings_currentvalue' => 'Valeur actuelle', 'settings_Database' => 'Paramètres base de données', -'settings_dateformat' => '', -'settings_dateformat_desc' => '', -'settings_datetimeformat' => '', +'settings_dateformat' => 'Format de date', +'settings_dateformat_desc' => 'Ce format de date utilise la syntaxe de la fonction date() de php', +'settings_datetimeformat' => 'Format de date/heure', 'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => 'Base de données', 'settings_dbDatabase_desc' => 'Le nom de votre base de données entré pendant le processus d\'installation. Ne pas modifier le champ sauf si absolument nécessaire, par exemple si la base de données a été déplacé.', @@ -1733,6 +1744,7 @@ Nom : [username] 'splash_edit_user' => 'Utilisateur modifié', 'splash_error_add_to_transmittal' => 'Erreur lors de l’ajout du document à la transmission', 'splash_error_rm_download_link' => 'Erreur lors de la suppression du lien de téléchargement', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Erreur lors de l’envoi du lien de téléchargement', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1835,8 +1847,11 @@ Nom : [username] 'takeOverIndApprovers' => 'Récupérer les approbateurs individuels', 'takeOverIndReviewer' => 'Récupérer les examinateurs de la dernière version.', 'takeOverIndReviewers' => 'Récupérer les examinateurs individuels', +'target_equals_source_folder' => '', 'tasks' => 'Tâches', 'task_core_expireddocs_days' => 'jours', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Description', 'task_disabled' => 'Désactivée', 'task_frequency' => 'Fréquence', @@ -1877,6 +1892,7 @@ Nom : [username] 'transfer_content' => 'Transférer le contenu', 'transfer_document' => 'Transférer le document', 'transfer_no_read_access' => 'L’utilisateur n’a pas le droit de lecture dans ce dossier', +'transfer_no_users' => '', 'transfer_no_write_access' => 'L’utilisateur n’a pas le droit d’écriture dans ce dossier', 'transfer_objects' => 'Transférer les objets', 'transfer_objects_to_user' => 'Nouveau propriétaire', @@ -2015,6 +2031,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Au moins une transition a ni utilisateur, ni groupe !', 'workflow_user_summary' => 'Récapitulatif utilisateur', +'wrong_checksum' => '', 'wrong_filetype' => 'Mauvais type de fichier', 'x_more_objects' => '[number] objets supplémentaires', 'year_view' => 'Vue annuelle', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index e237696b1..bccfa8253 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1242), marbanas (16) +// Translators: Admin (1243), marbanas (16) $text = array( '2_factor_auth' => '', @@ -336,7 +336,7 @@ Internet poveznica: [url]', 'daily' => 'Dnevno', 'databasesearch' => 'Pretraživanje baze podataka', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Molim pričekati, dok se podaci učitavaju ...', 'date' => 'Datum', 'days' => 'dani', 'debug' => 'Ispravljanje', @@ -504,6 +504,7 @@ Internet poveznica: [url]', 'edit_folder_props' => 'Uredi mapu', 'edit_group' => 'Uredi mapu', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Izmjena postavki proslijeđivanja', @@ -514,7 +515,9 @@ Internet poveznica: [url]', 'email' => 'Email', 'email_error_title' => 'Nema ulaznog emaila', 'email_footer' => 'Koristeći funckcije \'Moj račun\' možete promijeniti postavke email obavještavanja.', +'email_footer_html' => '', 'email_header' => 'Ovo je automatski generirana poruka iz DMS sustava', +'email_header_html' => '', 'email_not_given' => 'Molimo unesite valjanu email adresu.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Nema dokumenata ili mapa', @@ -549,6 +552,7 @@ Internet poveznica: [url]', 'exclude_items' => 'Isključivanje stavki', 'expired' => 'Isteklo', 'expired_at_date' => '', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Istekli dokumenti', 'expires' => 'Datum isteka', 'expire_by_date' => 'Istječe po datumu', @@ -573,6 +577,8 @@ Internet poveznica: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => 'Popis promjena', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Učitavanje dodataka…', 'extension_manager' => 'Upravljanje ekstenzijama', 'extension_mgr_error_upload' => '', @@ -580,6 +586,8 @@ Internet poveznica: [url]', 'extension_mgr_no_upload' => 'Upload novih ekstenzija nije moguć pošto mapa ekstenzija nema dozvolu pisanja', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Dostupno', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Inačice', 'february' => 'Veljača', 'file' => 'Datoteka', @@ -700,6 +708,7 @@ Internet poveznica: [url]', 'inherits_access_copy_msg' => 'Kopiraj listu naslijeđenih prava pristupa', 'inherits_access_empty_msg' => 'Započnite s praznim popisom pristupa', 'inherits_access_msg' => 'Prava pristupa se naslijeđuju.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Interna greška', 'internal_error_exit' => 'Interna greška. Ne mogu završiti zahtjev.', @@ -1114,6 +1123,7 @@ Internet poveznica: [url]', 'review_update_failed' => 'Greška kod izmjene statusa pregleda. Izmjena nije uspjela.', 'revise_document' => 'Revidiraj dokument', 'revise_document_on' => 'Slijedeća revizija verzije dokumenta na dan [date]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1215,6 +1225,7 @@ Internet poveznica: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Odabir', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => 'Izbari vrednost atributa', 'select_category' => 'Kliknite za odabir kategorije', @@ -1694,6 +1705,7 @@ Internet poveznica: [url]', 'splash_edit_user' => 'Korisnik pohranjen', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1796,8 +1808,11 @@ Internet poveznica: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Preuzimanje pojedinačnog revizora iz zadnje verzije.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Zadaci', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1838,6 +1853,7 @@ Internet poveznica: [url]', 'transfer_content' => '', 'transfer_document' => 'Prijenos dokumenta', 'transfer_no_read_access' => 'Korisnik nema pravo čitanja u ovom folderu', +'transfer_no_users' => '', 'transfer_no_write_access' => 'Korisnik nema pravo pisanja u ovom folderu', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1976,6 +1992,7 @@ Internet poveznica: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Pregled korisnika', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] više objekata', 'year_view' => 'Pregled po godini', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index f58b0a8e3..588ce6b26 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (644), Kalpy (113), ribaz (1036) +// Translators: Admin (646), Kalpy (113), ribaz (1036) $text = array( '2_factor_auth' => 'Kétfaktoros azonosítás', @@ -330,7 +330,7 @@ URL: [url]', 'current_version' => 'Aktuális verzió', 'daily' => 'Napi', 'databasesearch' => 'Adatbázis keresés', -'database_schema_version' => '', +'database_schema_version' => 'Adatbázis séma verziója', 'data_loading' => '', 'date' => 'Dátum', 'days' => 'nap', @@ -499,6 +499,7 @@ URL: [url]', 'edit_folder_props' => 'Mappa szerkesztése', 'edit_group' => 'Csoport szerkesztése', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -509,7 +510,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nem adott meg email címet', 'email_footer' => 'Bármikor módosíthatja email beállításait a \'My Account\' funkcióval', +'email_footer_html' => '', 'email_header' => 'Ez egy automatikus üzenet a DMS kiszolgálótól.', +'email_header_html' => '', 'email_not_given' => 'Kérem adjon meg egy érvényes email címet.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Mappa vagy dokumentum nem található', @@ -544,6 +547,7 @@ URL: [url]', 'exclude_items' => 'Kizárt elemek', 'expired' => 'Lejárt', 'expired_at_date' => '', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Lejárt dokumentumok', 'expires' => 'Lejárat', 'expire_by_date' => 'Érvényesség dátum szerint', @@ -568,6 +572,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Bővítmények', 'extension_changelog' => 'Változásnapló', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Kiterjesztések betöltése ...', 'extension_manager' => 'Bővítmények kezelése', 'extension_mgr_error_upload' => '', @@ -575,6 +581,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Telepíthető', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Verziók', 'february' => 'Február', 'file' => 'Állomány', @@ -695,6 +703,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Örökített hozzáférési lista másolása', 'inherits_access_empty_msg' => 'Indulás üres hozzáférési listával', 'inherits_access_msg' => 'Jogosultság örökítése folyamatban.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Belső hiba', 'internal_error_exit' => 'Belső hiba. Nem lehet teljesíteni a kérést.', @@ -1093,6 +1102,7 @@ URL: [url]', 'review_update_failed' => 'Hiba a felülvizsgálat állapot frissítése során. Frissítés sikertelen.', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1191,8 +1201,9 @@ URL: [url]', 'search_time' => 'Felhasznßlt id: [time] mßsodperc.', 'seconds' => 'másodperc', 'seeddms_info' => '', -'seeddms_version' => '', +'seeddms_version' => 'SeedDMS verziója', 'selection' => 'Selection', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Kattintson a kategória kiválasztásához', @@ -1672,6 +1683,7 @@ URL: [url]', 'splash_edit_user' => 'Felhasználó mentve', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1774,8 +1786,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1816,6 +1831,7 @@ URL: [url]', 'transfer_content' => '', 'transfer_document' => 'Tulajdonos váltás', 'transfer_no_read_access' => '', +'transfer_no_users' => '', 'transfer_no_write_access' => '', 'transfer_objects' => 'Adatok átadása', 'transfer_objects_to_user' => 'Új tulajdonos', @@ -1954,6 +1970,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Felhasználó áttekintés', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] további tétel', 'year_view' => 'Éves nézet', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 7c84f2649..cbbb8cc62 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2049), rickr (144), s.pnt (26) +// Translators: Admin (2054), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -335,7 +335,7 @@ URL: [url]', 'current_version' => 'Versione attuale', 'daily' => 'Giornaliero', 'databasesearch' => 'Ricerca nel Database', -'database_schema_version' => '', +'database_schema_version' => 'Versione dello schema del database', 'data_loading' => 'Attendere il caricamento dei dati...', 'date' => 'Data', 'days' => 'Giorni', @@ -509,6 +509,7 @@ URL: [url]', 'edit_folder_props' => 'Modifica proprietà cartella', 'edit_group' => 'Modifica il gruppo', 'edit_online' => 'Modifica online', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'Modifica attività', 'edit_transmittal_props' => 'Modifica proprietà trasmissione', @@ -519,7 +520,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nessuna email immessa', 'email_footer' => 'Puoi cambiare l\'impostazione della tua email utilizzando le funzioni del menu \'Account personale\'', +'email_footer_html' => '', 'email_header' => 'Questo è un messaggio automatico inviato dal server DMS', +'email_header_html' => '', 'email_not_given' => 'Inserisci un indirizzo email valido.', 'empty_attribute_group_list' => 'Nessun gruppo di attributi', 'empty_folder_list' => 'Cartella vuota', @@ -554,6 +557,7 @@ URL: [url]', 'exclude_items' => 'Escludi elementi', 'expired' => 'Scaduto', 'expired_at_date' => 'Scadenza il [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Documenti scaduti', 'expires' => 'Scadenza', 'expire_by_date' => 'Scadenza per data', @@ -578,6 +582,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Archivio estensioni', 'extension_changelog' => 'Registro delle modifiche delle estensioni', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Caricamento estensioni...', 'extension_manager' => 'Gestisci le estensioni dei files', 'extension_mgr_error_upload' => '', @@ -585,6 +591,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Il caricamento della nuova estensione non è possibile perchè la cartella delle estensioni non ha diritti di scrittura', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Disponibile', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versioni', 'february' => 'Febbraio', 'file' => 'File', @@ -705,6 +713,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copia la lista degli accessi ereditati', 'inherits_access_empty_msg' => 'Reimposta una lista di permessi vuota', 'inherits_access_msg' => 'È impostato il permesso ereditario.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Errore interno', 'internal_error_exit' => 'Errore interno. Impossibile completare la richiesta.', @@ -1131,6 +1140,7 @@ URL: [url]', 'review_update_failed' => 'Errore nella variazione dello stato di revisione. Aggiornamento fallito.', 'revise_document' => 'Riesamina documento', 'revise_document_on' => 'Prossimo riesame del documento il [date]', +'revision' => 'Revisione', 'revisions_accepted' => '[no_reviews] riesami già accettati', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '[no_reviews] riesami non gestiti', @@ -1234,9 +1244,10 @@ URL: [url]', 'search_results_access_filtered' => 'La ricerca può produrre risultati al cui contenuto è negato l\'accesso.', 'search_time' => 'Tempo trascorso: [time] secondi.', 'seconds' => 'secondi', -'seeddms_info' => '', +'seeddms_info' => 'Informazioni riguardo SeedDMS', 'seeddms_version' => 'Versione di SeedDMS', 'selection' => 'Selezione', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Scegli quando mostrare', 'select_attribute_value' => 'Seleziona il valore dell\'attributo', 'select_category' => 'Clicca per selezionare la categoria', @@ -1721,6 +1732,7 @@ Name: [username] 'splash_edit_user' => 'Utente modificato', 'splash_error_add_to_transmittal' => 'Errore durante l\'aggiunta di documento per la trasmissione', 'splash_error_rm_download_link' => 'Errore durante la rimozione del collegamento di scaricamento', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Errore durante l\'invio del collegamento di scaricamento', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1823,8 +1835,11 @@ Name: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Riprendi il revisore dall\'ultima versione.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Attività', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Descrizione', 'task_disabled' => 'Disabilitata', 'task_frequency' => 'Frequenza', @@ -1865,6 +1880,7 @@ Name: [username] 'transfer_content' => 'Trasferisci contenuto', 'transfer_document' => 'Trasferisci documento', 'transfer_no_read_access' => 'L\'utente non ha i permessi in lettura per la cartella', +'transfer_no_users' => '', 'transfer_no_write_access' => 'L\'utente non ha i permessi in scrittura per la cartella', 'transfer_objects' => 'Trasferisci oggetti', 'transfer_objects_to_user' => 'Trasferisci all\'utente', @@ -1964,7 +1980,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Versione cancellata', 'version_info' => 'Informazioni versione', 'view' => 'Visualizza', -'view_document' => '', +'view_document' => 'Visualizza i dettagli del documento', 'view_folder' => '', 'view_online' => 'Visualizza on-line', 'warning' => 'Attenzione', @@ -2003,6 +2019,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Almeno una delle transizioni non ha un utente o un gruppo!', 'workflow_user_summary' => 'Riepilogo utenti', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] altri oggetti', 'year_view' => 'Vista anno', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index fc2160321..5637c4ad4 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -505,6 +505,7 @@ URL: [url]', 'edit_folder_props' => '폴더 편집', 'edit_group' => '편집 그룹', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '전송 속성 편집', @@ -515,7 +516,9 @@ URL: [url]', 'email' => '전자우편', 'email_error_title' => '기입된 전자우편 없음', 'email_footer' => '귀하는 언제든지 \'내 계정\' 기능을 사용하여 전자우편 주소를 바꿀 수 있습니다.', +'email_footer_html' => '', 'email_header' => 'DMS 서버에서의 자동화 메시지입니다.', +'email_header_html' => '', 'email_not_given' => '유효한 전자우편을 기입해주세요.', 'empty_attribute_group_list' => '', 'empty_folder_list' => '문서 또는 폴더 입력', @@ -550,6 +553,7 @@ URL: [url]', 'exclude_items' => '항목 제외', 'expired' => '만료됨', 'expired_at_date' => '', +'expired_docs_mail_subject' => '', 'expired_documents' => '', 'expires' => '만료하기', 'expire_by_date' => '지정일에 만료', @@ -574,6 +578,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => '확장자 관리', 'extension_mgr_error_upload' => '', @@ -581,6 +587,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => '2월', 'file' => '파일', @@ -701,6 +709,7 @@ URL: [url]', 'inherits_access_copy_msg' => '상속 액세스 목록 복사', 'inherits_access_empty_msg' => '빈 액세스 목록으로 시작', 'inherits_access_msg' => '액세스가 상속됩니다.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => '내부 오류', 'internal_error_exit' => '내부 오류가 발생했습니다. 요청을 완료 할 수 없습니다. .', @@ -1108,6 +1117,7 @@ URL: [url]', 'review_update_failed' => '오류 업데이트 검토 상태. 업데이트에 실패했습니다 rewind_workflow워크플로우 되돌리기', 'revise_document' => '개정 문서', 'revise_document_on' => '문서 버전의 다음 개정 [날짜]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1209,6 +1219,7 @@ URL : [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => '선택', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => '범주를 선택합니다', @@ -1688,6 +1699,7 @@ URL : [url]', 'splash_edit_user' => '사용자 저장', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1790,8 +1802,11 @@ URL : [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '최종 버전의 개인별 검수자를 상속합니다.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '작업', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1832,6 +1847,7 @@ URL : [url]', 'transfer_content' => '', 'transfer_document' => '', 'transfer_no_read_access' => '', +'transfer_no_users' => '', 'transfer_no_write_access' => '', 'transfer_objects' => '', 'transfer_objects_to_user' => '새 소유자', @@ -1970,6 +1986,7 @@ URL : [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '사용자 요약', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '', 'year_view' => '연간 단위로 보기', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index 9b1633fec..1ccc81720 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -502,6 +502,7 @@ URL: [url]', 'edit_folder_props' => 'ແກ້ໄຂໂຟລເດີ', 'edit_group' => 'ແກ້ໄຂກຸ່ມ', 'edit_online' => 'ແກ້ໄຂອອນລາຍ', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'ແກ້ໄຂຄຸນສົມບັດໃນການຖ່າຍທອດ', @@ -512,7 +513,9 @@ URL: [url]', 'email' => 'ອີເມວ', 'email_error_title' => 'ບໍ່ໄດ້ປ້ອນອີເມວ', 'email_footer' => 'ເຈົ້າສາມາດປ່ຽນການຕັ້ງຄ່າອີເມວຂອງທ່ານໄດ້ຕະຫຼອດເວລາໂດຍໄຊ້ຟັງຊັນ "ບັນຊີຂອງຊັນ "', +'email_footer_html' => '', 'email_header' => 'DMS ເປັນຂໍ້ຄວາມອັດຕະໂນມັດຈາກເຊີເວີ', +'email_header_html' => '', 'email_not_given' => 'ກະລຸນາປ້ອນອີເມວໃຫ້ຖືກຕ້ອງ', 'empty_attribute_group_list' => 'ບໍ່ມີແອັດທີບິວ', 'empty_folder_list' => 'ບໍ່ມີເອກະສານຫຼືໂຟລເດີ', @@ -547,6 +550,7 @@ URL: [url]', 'exclude_items' => 'ຍົກເວັນລາຍການ', 'expired' => 'ໝົດອາຍຸ', 'expired_at_date' => 'ໝົດອາຍຸເມື່ອ [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'ເອກະສານໝົດອາຍຸແລ້ວ', 'expires' => 'ວັນທີໝົດອາຍຸ', 'expire_by_date' => 'ໝົດອາຍຸຕາມວັນທີ', @@ -571,6 +575,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'ການຈັດການສ່ວນຂະຫຍາຍ', 'extension_mgr_error_upload' => '', @@ -578,6 +584,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'ເດືອນ ກຸມພາ', 'file' => 'ໄຟລ', @@ -698,6 +706,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'ຄັດລັອກລາຍການເຂົາເຖິງທີສືບທອດ', 'inherits_access_empty_msg' => 'ເລີ້ມຕົ້ນດ້ວຍລາຍການທີ່ວ່າງເປົ່າ', 'inherits_access_msg' => 'ຂໍຜິດພາດພາຍໃນ', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'ຂໍ້ຜິດພາດພາຍໃນ', 'internal_error_exit' => 'ຂໍ້ຜິດພາດພາຍໃນບໍ່ສາມາດດຳເນີນການຕາມຄຳຂໍໄດ້', @@ -1124,6 +1133,7 @@ URL: [url]', 'review_update_failed' => 'ເກີດຂໍ້ຜິດພາດໃນການອັບເດດສະຖານະຄຳເຫັນໄດ້ລົ້ມເຫຼວ', 'revise_document' => 'ແກ້ໄຂເອກະສານ', 'revise_document_on' => 'ແກ້ໄຂເອກະສານຮູບແບບໄຫມ່ ໃນ ວັນທີ', +'revision' => '', 'revisions_accepted' => 'ໄດ້ມີການແກ້ໄຂເອກະສານແລ້ວ ບໍ່ມີການແກ້ໄຂ', 'revisions_accepted_latest' => '', 'revisions_not_touched' => 'ບໍ່ມີການແກ້ໄຂ ການແກ້ໄຂບໍ່ຖືກຕ້ອງ', @@ -1230,6 +1240,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'ການເລືອກ', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'ເລືອກເວລາທີ່ຈະສະແດງ', 'select_attribute_value' => '', 'select_category' => 'ຄິກເພື່ອເລືອກປະເພດ', @@ -1714,6 +1725,7 @@ URL: [url]', 'splash_edit_user' => 'ບັນທຶກຜູ້ໄຊ້ແລ້ວ', 'splash_error_add_to_transmittal' => 'ເກີດຂໍ້ຜິດພາດໃນຂະນະທີ່ເພີ່ມເອກະສານເພື່ອຕິດຕໍ່', 'splash_error_rm_download_link' => 'ຂໍ້ຜິດພາດໃນການລົບລິງການດາວໂຫລດ', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'ຂໍ້ຜິດພາດໃນການລົບລິງການດາວໂຫລດ', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1816,8 +1828,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'ການກວດສອບແຕ່ລະບຸກຄົນຈາກເວີຊັ້ນລ່າສຸດ', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'ງານ', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1858,6 +1873,7 @@ URL: [url]', 'transfer_content' => '', 'transfer_document' => '', 'transfer_no_read_access' => '', +'transfer_no_users' => '', 'transfer_no_write_access' => '', 'transfer_objects' => 'ຖ່າຍໂອນວັດຖຸ', 'transfer_objects_to_user' => 'ເຈົ້າຂອງໄຫມ່', @@ -1996,6 +2012,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'ການປ່ຽນພາບຢ່າງນ້ອຍໜື່ງຄັ້ງບໍ່ມີທັງຜູ້ໄຊ້ແລະກຸ່ມ', 'workflow_user_summary' => 'ສະຫລູບຂໍ້ມູນຂອງຜູ້ໄຊ້', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '', 'year_view' => 'ແຜນປະຈຳປີ', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index 9f9a47c03..dc800dffe 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1731) +// Translators: Admin (1732) $text = array( '2_factor_auth' => '2-trinns autentisering', @@ -336,7 +336,7 @@ URL: [url]', 'daily' => 'Daglig', 'databasesearch' => 'Søk i database', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Vennligst vent, til dataene er lastet ...', 'date' => 'Dato', 'days' => 'dager', 'debug' => 'Feilsøking', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Rediger mappe', 'edit_group' => 'Rediger gruppe', 'edit_online' => 'Rediger online', +'edit_online_not_allowed' => '', 'edit_online_warning' => 'Lagring av endringene vil overskrive innholdet i den gjeldende versjonen, i stedet for å opprette en ny versjon.', 'edit_task' => 'Redigere oppgave', 'edit_transmittal_props' => 'Rediger overføringsegenskaper', @@ -526,7 +527,9 @@ URL: [url]', 'email' => 'E-post', 'email_error_title' => 'Ingen e-post adresse er oppgitt', 'email_footer' => 'Du kan alltid endre e-postinnstillingene dine ved å bruke \'Min side\' funksjoner', +'email_footer_html' => '', 'email_header' => 'Dette er en automatisk melding fra DMS-serveren.', +'email_header_html' => '', 'email_not_given' => 'Vennligst skriv inn en gyldig e-post adresse.', 'empty_attribute_group_list' => 'Ingen egenskapsgrupper', 'empty_folder_list' => 'Ingen dokumenter eller mapper', @@ -561,6 +564,7 @@ URL: [url]', 'exclude_items' => 'Ekskluderte elementer', 'expired' => 'Utløpt', 'expired_at_date' => 'Utløpt pr. [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Utløpte dokumenter', 'expires' => 'Utløper', 'expire_by_date' => 'Utgått på dato', @@ -585,6 +589,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Utvidelse', 'extension_changelog' => 'Endringslogg', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Laster inn utvidelser ...', 'extension_manager' => 'Administrer utvidelser', 'extension_mgr_error_upload' => '', @@ -592,6 +598,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Det er ikke mulig å laste opp nye utvidelser fordi utvidelseskatalogen ikke kan skrives til.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Tilgjengelig', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versjon', 'february' => 'Februar', 'file' => 'Fil', @@ -719,6 +727,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Kopier arvet adgangsliste', 'inherits_access_empty_msg' => 'Start med tom adgangsliste', 'inherits_access_msg' => 'Tilgang blir arvet.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Intern feil', 'internal_error_exit' => 'Intern feil. Kan ikke fullføre forespørselen.', @@ -1139,6 +1148,7 @@ URL: [url]', 'review_update_failed' => 'Feil ved oppdatering av korrekturstatus. Oppdatering mislyktes.', 'revise_document' => 'Korrektur av dokumentet', 'revise_document_on' => 'Neste korrektur av dokumentversjonen den [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] korrektur allerede godkjent', 'revisions_accepted_latest' => '(er [no_revisions] i siste versjon)', 'revisions_not_touched' => '[no_revisions] korrektur blir ikke berørt', @@ -1245,6 +1255,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Utvalg', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Velg visings alternativ', 'select_attribute_value' => 'Velg egenskapsverdi', 'select_category' => 'Klikk for å velge kategori', @@ -1727,6 +1738,7 @@ Bruker: [username] 'splash_edit_user' => 'Bruker lagret', 'splash_error_add_to_transmittal' => 'Feil under tilføyelse av dokument til overføringen', 'splash_error_rm_download_link' => 'Feil ved fjerning av nedlastingslenke', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Feil under sending av nedlastingslenke', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1829,8 +1841,11 @@ Bruker: [username] 'takeOverIndApprovers' => 'Ta over individuelle godkjennere', 'takeOverIndReviewer' => 'Ta over individuell anmelder fra forrige versjon.', 'takeOverIndReviewers' => 'Ta over individuelle korrekturleser', +'target_equals_source_folder' => '', 'tasks' => 'Oppgaver', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Beskrivelse', 'task_disabled' => 'Deaktivert', 'task_frequency' => 'Frekvens', @@ -1871,6 +1886,7 @@ Bruker: [username] 'transfer_content' => 'Overfør innhold', 'transfer_document' => 'Overfør dokumentet', 'transfer_no_read_access' => 'Brukeren har ikke lesetilgang i mappen', +'transfer_no_users' => '', 'transfer_no_write_access' => 'Brukeren har ikke skrivetilgang i mappen', 'transfer_objects' => 'Overfør objekter', 'transfer_objects_to_user' => 'Ny eier', @@ -2009,6 +2025,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Minst en av overgangene har verken en bruker eller en gruppe!', 'workflow_user_summary' => 'Brukersammendrag', +'wrong_checksum' => '', 'wrong_filetype' => 'Feil filtype', 'x_more_objects' => '[number] flere objekter', 'year_view' => 'Årsvisning', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 96aa7d2d3..5a7df7e30 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -19,19 +19,19 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1167), gijsbertush (651), pepijn (45), reinoutdijkstra@hotmail.com (270) +// Translators: Admin (1167), gijsbertush (673), pepijn (45), reinoutdijkstra@hotmail.com (270) $text = array( '2_factor_auth' => '2-factor-authenticatie', '2_factor_auth_info' => 'Dit systeem werkt met 2-factor-authenticatie. U heeft de Google Authenticator nodig op uw mobiele telfoon. Hieronder staan 2 QR-codes. De rechter is uw huidige geheime code. Met de linker kunt u een nieuwe geheime code instellen. Denk erom de nieuwe code opnieuw te scannen met Googke Authenticator.', '2_fact_auth_secret' => 'Toegangscode 2-factor-authenticatie', -'abbr_day' => '', -'abbr_hour' => '', -'abbr_minute' => '', -'abbr_month' => '', -'abbr_second' => '', -'abbr_week' => '', -'abbr_year' => '', +'abbr_day' => 'd', +'abbr_hour' => 'u', +'abbr_minute' => 'min', +'abbr_month' => 'mnd', +'abbr_second' => 'sec', +'abbr_week' => 'w', +'abbr_year' => 'jr', 'accept' => 'Accepteren', 'access_control' => 'Toegangscontrole', 'access_control_is_off' => 'Toegangscontrole staat uit', @@ -222,7 +222,7 @@ URL: [url]', 'calendar' => 'Kalender', 'calendar_week' => 'Weekkalender', 'cancel' => 'Annuleren', -'cancel_checkout' => '', +'cancel_checkout' => 'stop', 'cancel_checkout_warning' => '', 'cannot_assign_invalid_state' => 'Kan het document niet aanpassen in deze status', 'cannot_change_final_states' => 'Waarschuwing: U kunt de Status [afgewezen], [vervallen], [in afwachting van] (nog) niet wijzigen.', @@ -355,7 +355,7 @@ URL: [url]', 'documents_locked' => 'Geblokkeerde documenten', 'documents_locked_by_you' => 'Documenten door u geblokkeerd', 'documents_only' => 'Alleen documenten', -'documents_rejected' => '', +'documents_rejected' => 'Document afgewezen', 'documents_to_approve' => 'Documenten die wachten op uw goedkeuring', 'documents_to_correct' => 'Te corrigeren documenten', 'documents_to_process' => 'Te verwerken documenten', @@ -509,6 +509,7 @@ URL: [url]', 'edit_folder_props' => 'Wijzig Map eigenschappen', 'edit_group' => 'Wijzig Groep', 'edit_online' => 'Online bewerken', +'edit_online_not_allowed' => 'Online edit niet toegestaan', 'edit_online_warning' => 'Waarschuwing: als u de wijzigingen opslaat, wordt de bestaande versie van het document overschreven. Er wordt dus geen nieuwe versie gemaakt.', 'edit_task' => 'Taak bewerken', 'edit_transmittal_props' => 'Opmerkingen bij verzending', @@ -519,7 +520,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Geen email ingevoerd', 'email_footer' => 'U kunt altijd uw e-mail instellingen wijzigen via de \'Mijn Account\' opties', +'email_footer_html' => '', 'email_header' => 'Dit is een automatisch gegenereerd bericht van de DMS server.', +'email_header_html' => '', 'email_not_given' => 'Voer aub een geldig email adres in.', 'empty_attribute_group_list' => 'Lege lijst van attributen', 'empty_folder_list' => 'Geen documenten of mappen', @@ -554,6 +557,7 @@ URL: [url]', 'exclude_items' => 'Sluit iets uit', 'expired' => 'Verlopen', 'expired_at_date' => 'Verloopdatum', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Verlopen documenten', 'expires' => 'Verloopt', 'expire_by_date' => 'Vervaldatum', @@ -578,6 +582,8 @@ URL: [url]', 'export_user_list_csv' => 'Exporteer gebruikers in csv-formaat', 'extension_archive' => 'Extensies', 'extension_changelog' => 'Overzicht van wijzigingen', +'extension_is_off_now' => 'Extensie uitgeschakeld', +'extension_is_on_now' => 'Extensie ingeschakeld', 'extension_loading' => 'Laden van extensies ...', 'extension_manager' => 'Extensies beheren', 'extension_mgr_error_upload' => 'Fout bij het uploaden van de extensie', @@ -585,6 +591,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Installeren nieuwe extensies is niet mogelijk omdat de extensies map niet schrijfbaar is.', 'extension_mgr_no_zipfile' => 'Fout bij uploaden extensie: is geen zipfile', 'extension_mgr_repository' => 'Beschikbaar', +'extension_missing_name' => 'Naam extensie ontbreekt', +'extension_toggle_error' => 'Omschakelen mislukt', 'extension_version_list' => 'Versies', 'february' => 'februari', 'file' => 'Bestand', @@ -712,6 +720,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Lijst van overgeërfde toegang', 'inherits_access_empty_msg' => 'Begin met een lege toegangslijst', 'inherits_access_msg' => 'Toegang is overgeërfd.', +'installed_apache_extensions' => '', 'installed_php_extensions' => 'Geïnstalleerde PHP-extensies', 'internal_error' => 'Interne fout', 'internal_error_exit' => 'Interne fout. niet mogelijk om verzoek uit de voeren.', @@ -943,7 +952,7 @@ URL: [url]', 'october' => 'oktober', 'old' => 'Oude', 'only_jpg_user_images' => 'U mag alleen .jpg afbeeldingen gebruiken als gebruikersafbeeldingen.', -'operation_disallowed' => '', +'operation_disallowed' => 'Bewerking niet toegestaan', 'order_by_sequence_off' => 'Volgorde uit', 'original_filename' => 'Originele bestandsnaam', 'overall_indexing_progress' => 'Voortgang van de indexering', @@ -1136,6 +1145,7 @@ URL: [url]', 'review_update_failed' => 'Fout: bijwerken status beoordeling mislukt.', 'revise_document' => 'Document herzien', 'revise_document_on' => 'Volgende herziening van document op [date]', +'revision' => 'Versie nr', 'revisions_accepted' => '[no_revisions] revisies geaccepteerd', 'revisions_accepted_latest' => '(er zijn [no_revisions] in de nieuwste versie)', 'revisions_not_touched' => '[no_revisions] revisies geopend', @@ -1242,6 +1252,7 @@ URL: [url]', 'seeddms_info' => 'Informatie over SeedDMS', 'seeddms_version' => 'De versie van SeedDMS', 'selection' => 'Selectie', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Toon attribuut-definities-groep', 'select_attribute_value' => 'Kies een waarde voor het attribuut', 'select_category' => 'klik om categorie te selecteren', @@ -1385,7 +1396,7 @@ Name: [username] 'settings_enableAdminRevApp_desc' => 'Uitvinken om beheerder niette tonen als controleerder/beoordeler', 'settings_enableCalendar' => 'Agenda inschakelen', 'settings_enableCalendar_desc' => 'Inschakelen/uitschakelen agenda', -'settings_enableCancelCheckout' => '', +'settings_enableCancelCheckout' => 'Uitschakelen checkout toestaan', 'settings_enableCancelCheckout_desc' => '', 'settings_enableClipboard' => 'Activeer klembord', 'settings_enableClipboard_desc' => 'Activeer/ blokkeer het klembord', @@ -1726,6 +1737,7 @@ Name: [username] 'splash_edit_user' => 'Gebruiker opgeslagen', 'splash_error_add_to_transmittal' => 'Fout: toevoeging aan verzending', 'splash_error_rm_download_link' => 'Fout bij verwijderen download-link', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Fout bij verzenden download-link', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1828,8 +1840,11 @@ Name: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Onthoud de laatste groep individuele herzieners', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => 'Doel- en bronmap zijn dezelfde', 'tasks' => 'taken', 'task_core_expireddocs_days' => 'Dagen', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Omschrijving', 'task_disabled' => 'Inactief', 'task_frequency' => 'Frequentie', @@ -1865,11 +1880,12 @@ Name: [username] 'to' => 'aan', 'toggle_manager' => 'Wijzig Beheerder', 'toggle_qrcode' => 'Tonen/Verbergen QR-code', -'total' => '', +'total' => 'totaal', 'to_before_from' => 'De einddatum mag nietvoor de startdatum liggen', 'transfer_content' => 'Inhoud verzenden', 'transfer_document' => 'Document verzenden', 'transfer_no_read_access' => 'De gebruiker heeft geen leesrechten in deze map', +'transfer_no_users' => '', 'transfer_no_write_access' => 'De gebruiker heeft geen schrijfrechten in deze map', 'transfer_objects' => 'Objecten overdragen', 'transfer_objects_to_user' => 'Objecten verzenden aan gebruiker', @@ -1969,8 +1985,8 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Versie verwijderd', 'version_info' => 'Versie-informatie', 'view' => 'Bekijk', -'view_document' => '', -'view_folder' => '', +'view_document' => 'Document bekijken', +'view_folder' => 'Map bekijken', 'view_online' => 'Bekijk online', 'warning' => 'Waarschuwing', 'webauthn_auth' => 'WebAuthn Authentificatie', @@ -2008,6 +2024,7 @@ URL: [url]', 'workflow_title' => 'Titel van de workflow', 'workflow_transition_without_user_group' => 'Minstens één transitie kent geen gebruiker of groep', 'workflow_user_summary' => 'Gebruiker samenvatting', +'wrong_checksum' => 'Fout in checksum', 'wrong_filetype' => 'Fout bestandstype', 'x_more_objects' => 'meer items', 'year_view' => 'Jaaroverzicht', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index cb794098a..36e13fef1 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1456), netixw (84), romi (93), uGn (112) +// Translators: Admin (1480), netixw (84), romi (93), uGn (112) $text = array( '2_factor_auth' => 'Uwierzytelnianie dwuetapowe', @@ -323,8 +323,8 @@ URL: [url]', 'current_version' => 'Bieżąca wiersja', 'daily' => 'Codziennie', 'databasesearch' => 'Przeszukiwanie bazy danych', -'database_schema_version' => '', -'data_loading' => '', +'database_schema_version' => 'Wersja schematu bazy danych', +'data_loading' => 'Proszę czekać, dane są pobierane...', 'date' => 'Data', 'days' => 'dni', 'debug' => 'Debugowanie', @@ -492,6 +492,7 @@ URL: [url]', 'edit_folder_props' => 'Edytuj folder', 'edit_group' => 'Edytuj grupę', 'edit_online' => 'Edytuj online', +'edit_online_not_allowed' => '', 'edit_online_warning' => 'Zapisanie zmian spowoduje zastąpienie zawartości bieżącej wersji, zamiast tworzenia nowej wersji.', 'edit_task' => 'Edytuj zadanie', 'edit_transmittal_props' => 'Edytuj właściwości przekazu', @@ -502,7 +503,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nie wprowadzono adresu email', 'email_footer' => 'W każdej chwili możesz zmienić swój email używając zakładki \'Moje konto\'.', +'email_footer_html' => '', 'email_header' => 'To jest automatyczne powiadomienie serwera DMS.', +'email_header_html' => '', 'email_not_given' => 'Proszę podać poprawny adres email.', 'empty_attribute_group_list' => 'Brak grup atrybutów', 'empty_folder_list' => 'Nie ma dokumentów lub folderów', @@ -537,6 +540,7 @@ URL: [url]', 'exclude_items' => 'Pozycje wykluczone', 'expired' => 'Wygasłe', 'expired_at_date' => 'Wygasło [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Wygasłe dokumenty', 'expires' => 'Wygasa', 'expire_by_date' => 'Wygaśnięcie wg daty', @@ -561,6 +565,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Rozszerzenie', 'extension_changelog' => 'Log Zmian', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Wgrywam dodatki...', 'extension_manager' => 'Zarządzanie rozszerzeniami', 'extension_mgr_error_upload' => '', @@ -568,6 +574,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Wgrywanie nowych rozszerzeń jest niemożliwe ponieważ folder rozszerzeń jest zablokowany do zapisu', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Dostępne', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Wersje', 'february' => 'Luty', 'file' => 'Plik', @@ -688,6 +696,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Kopiuj odziedziczoną listę dostępu', 'inherits_access_empty_msg' => 'Rozpocznij z pustą listą dostępu', 'inherits_access_msg' => 'Dostęp jest dziedziczony.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Błąd wewnętrzny', 'internal_error_exit' => 'Błąd wewnętrzny. Nie można ukończyć zadania.', @@ -1072,6 +1081,7 @@ URL: [url]', 'review_update_failed' => 'Błąd podczas aktualizowania statusu recenzji. Aktualizacja nie powiodła się.', 'revise_document' => 'Zweryfikuj dokument', 'revise_document_on' => 'Sprawdź dokument', +'revision' => '', 'revisions_accepted' => 'Korekty zaakceptowane', 'revisions_accepted_latest' => 'Korekty zaakceptowane później', 'revisions_not_touched' => 'Korekty nie oglądane', @@ -1170,9 +1180,10 @@ URL: [url]', 'search_results_access_filtered' => 'Wyniki wyszukiwania mogą zawierać treści, do których dostęp jest zabroniony.', 'search_time' => 'Upływający czas: [time] sec.', 'seconds' => 'sekund', -'seeddms_info' => '', -'seeddms_version' => '', +'seeddms_info' => 'Informacje o SeedDMS', +'seeddms_version' => 'Wersja SeedDMS', 'selection' => 'Wybierz', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Wybierz, kiedy pokazać', 'select_attribute_value' => 'Wybierz wartość atrybutu', 'select_category' => 'Kliknij by wybrać kategorię', @@ -1232,12 +1243,12 @@ Name: [username] 'settings_allowReviewerOnly' => 'Zezwalaj tylko na ustawianie recenzenta', 'settings_allowReviewerOnly_desc' => 'Włącz to, jeśli będzie można zezwolić na ustawienie tylko recenzenta, ale bez osoby zatwierdzającej w tradycyjnym trybie przepływu pracy.', 'settings_apache_mod_rewrite' => 'Apache - Moduł Rewrite', -'settings_apiKey' => '', -'settings_apiKey_desc' => '', -'settings_apiOrigin' => '', -'settings_apiOrigin_desc' => '', -'settings_apiUserId' => '', -'settings_apiUserId_desc' => '', +'settings_apiKey' => 'Klucz autentyfikacyjny dla REST API', +'settings_apiKey_desc' => 'Ten klucz jest używany jako alternatywna autentyfikacja dla REST API. Wybierz 32-znakowy łańcuch.', +'settings_apiOrigin' => 'Dozwolone źródła wywołań API', +'settings_apiOrigin_desc' => 'Lista adresów oddzielonych średnikami. Każdy adres ma formę ://[:]. Port może być pominięty. Jeżeli to pole jest puste, nie ma żadnych ograniczeń.', +'settings_apiUserId' => 'Użytkownik dla REST API', +'settings_apiUserId_desc' => 'Ten użytkownik będzie użyty przez REST API, jeżeli do autentyfikacji użyto prekonfigurowanego klucza REST API.', 'settings_Authentication' => 'Ustawienia uwierzytelniania', 'settings_autoLoginUser' => 'Automatyczne logowanie', 'settings_autoLoginUser_desc' => 'Użyj tego identyfikatora użytkownika, aby uzyskać dostęp, jeśli użytkownik nie jest jeszcze zalogowany. Taki dostęp nie utworzy sesji.', @@ -1271,10 +1282,10 @@ Name: [username] 'settings_createdirectory' => 'Utwórz katalog', 'settings_currentvalue' => 'Bieżąca wartość', 'settings_Database' => 'Ustawienia bazy danych', -'settings_dateformat' => '', -'settings_dateformat_desc' => '', -'settings_datetimeformat' => '', -'settings_datetimeformat_desc' => '', +'settings_dateformat' => 'Format daty', +'settings_dateformat_desc' => 'Format daty używa składni funkcji php date()', +'settings_datetimeformat' => 'Format daty i czasu', +'settings_datetimeformat_desc' => 'Format daty używa składni funkcji php date()', 'settings_dbDatabase' => 'Baza danych', 'settings_dbDatabase_desc' => 'Nazwa dla bazy danych podana w procesie instalacji. Nie zmieniaj tego pola bez konieczności, na przykład kiedy baza danych została przeniesiona.', 'settings_dbDriver' => 'Typ bazy danych', @@ -1431,8 +1442,8 @@ Name: [username] 'settings_initialDocumentStatus_desc' => 'Ten stan zostanie ustawiony po dodaniu dokumentu.', 'settings_initialDocumentStatus_draft' => 'Projekt', 'settings_initialDocumentStatus_released' => 'Wydany', -'settings_inlineEditing' => '', -'settings_inlineEditing_desc' => '', +'settings_inlineEditing' => 'Edycja w szczegółach', +'settings_inlineEditing_desc' => 'Pozwala edytować nazwę dokumentu na stronie szczegółów dokumentu.', 'settings_installADOdb' => 'Zainstaluj ADOdb', 'settings_install_disabled' => 'Plik ENABLE_INSTALL_TOOL został usunięty. Możesz teraz zalogować się do LetoDMS i przeprowadzić dalszą konfigurację.', 'settings_install_pear_package_log' => 'Zainstaluj pakiet Pear \'Log\'', @@ -1478,8 +1489,8 @@ Name: [username] 'settings_onePageMode_desc' => 'Tryb jednostronicowy włączy kod javascript na stronie Wyświetl folder, który aktualizuje listę folderów / dokumentów, nawigację itp. Po kliknięciu folderu lub zmianie parametru sortowania.', 'settings_overrideMimeType' => 'Nadpisz typ rozszerzenia', 'settings_overrideMimeType_desc' => 'Zastąp typ MimeType dostarczony przez przeglądarkę, jeśli plik zostanie przesłany. Nowy typ MimeType jest określany przez sam SeedDMS.', -'settings_overrideTheme' => '', -'settings_overrideTheme_desc' => '', +'settings_overrideTheme' => 'Przykryj motyw', +'settings_overrideTheme_desc' => 'Włącz tą opcję aby przykryć motyw zapisany w danych użytkownika motywem wybranym w tej konfiguracji.', 'settings_partitionSize' => 'Rozmiar części pliku', 'settings_partitionSize_desc' => 'Rozmiar części pliku, w bajtach, wczytywane przez jumploader. Nie wpisuj wartości większej niż maksymalna wartość wczytywanego pliku ustawiona na serwerze.', 'settings_passwordExpiration' => 'Wygaśnięcie hasła', @@ -1593,8 +1604,8 @@ Name: [username] 'settings_updateNotifyTime' => 'Okres powiadamiania o zmianach', 'settings_updateNotifyTime_desc' => 'Użytkownicy są powiadamiani o zmianach w dokumentach, które miały miejsce w ciągu ostatnich \'Update Notify Time\' sekund', 'settings_upgrade_php' => 'Uaktualnij PHP do wersji przynajmniej 5.6.38', -'settings_useHomeAsRootFolder' => '', -'settings_useHomeAsRootFolder_desc' => '', +'settings_useHomeAsRootFolder' => 'Użyj folderu domowego jako początkowego', +'settings_useHomeAsRootFolder_desc' => 'Włącz tą opcję jeżeli folder domowy użytkownika (nie-administratora) ma być folderem początkowym (eksperymentalne)', 'settings_versioningFileName' => 'Nazwa pliku z wersjonowaniem', 'settings_versioningFileName_desc' => 'Nazwa pliku, zawierającego informacje o wersjonowaniu, utworzonego przez narzędzie kopii zapasowej.', 'settings_versiontolow' => 'Za niska wersja', @@ -1657,6 +1668,7 @@ Name: [username] 'splash_edit_user' => 'Zapisano użytkownika', 'splash_error_add_to_transmittal' => 'Błąd podczas dodawania dokumentu do przekazu', 'splash_error_rm_download_link' => 'Błąd podczas usuwania linku do pobrania', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Błąd podczas wysyłania linku do pobrania', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1759,8 +1771,11 @@ Name: [username] 'takeOverIndApprovers' => 'Przejmij indywidualne osoby zatwierdzające', 'takeOverIndReviewer' => 'Przejmij kontrolę nad indywidualnym recenzentem z ostatniej wersji.', 'takeOverIndReviewers' => 'Przejmij poszczególnych recenzentów', +'target_equals_source_folder' => '', 'tasks' => 'Zadania', 'task_core_expireddocs_days' => 'Rdzeń zadania wygasa', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Opis zadania', 'task_disabled' => 'Zadanie wyłączone', 'task_frequency' => 'Częstotliwość zadania', @@ -1801,6 +1816,7 @@ Name: [username] 'transfer_content' => 'Przenieś zawartość', 'transfer_document' => 'Transfer dokumentu', 'transfer_no_read_access' => 'Użytkownik nie ma prawa do odczytu w tym folderze', +'transfer_no_users' => '', 'transfer_no_write_access' => 'Użytkownik nie ma prawa do zapisu w tym folderze', 'transfer_objects' => 'Przenieś obiekty', 'transfer_objects_to_user' => 'Nowy właściciel', @@ -1900,7 +1916,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Usunięcie wersji', 'version_info' => 'Informacje o wersji', 'view' => 'Widok', -'view_document' => '', +'view_document' => 'Wyświetl szczegóły dokumentu', 'view_folder' => '', 'view_online' => 'Obejrzyj online', 'warning' => 'Ostrzeżenie', @@ -1939,6 +1955,7 @@ URL: [url]', 'workflow_title' => 'Tytuł przepływu pracy', 'workflow_transition_without_user_group' => 'Co najmniej jedno z przejść nie ma ani użytkownika, ani grupy!', 'workflow_user_summary' => 'Podsumowanie użytkownika', +'wrong_checksum' => 'Nieprawidłowa suma kontrolna', 'wrong_filetype' => 'Nieprawidłowy typ pliku', 'x_more_objects' => '[number] więcej obiektów', 'year_view' => 'Widok roczny', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 64f1ee6b0..4a0cad204 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1845), flaviove (627), lfcristofoli (352) +// Translators: Admin (1846), flaviove (627), lfcristofoli (352) $text = array( '2_factor_auth' => 'Autenticação de dois fatores', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Editar pasta', 'edit_group' => 'Editar grupo', 'edit_online' => 'Editar on-line', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'Editar tarefa', 'edit_transmittal_props' => 'Editar propriedades de transmissão', @@ -526,7 +527,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Nenhum e-mail informado', 'email_footer' => 'Você sempre pode alterar suas configurações de e-mail usando as funções \'Minha conta\'', +'email_footer_html' => '', 'email_header' => 'Este é um gerenciador automático do servidor DMS.', +'email_header_html' => '', 'email_not_given' => 'Por favor insira um endereço de e-mail válido.', 'empty_attribute_group_list' => 'Nenhum grupo de atributos', 'empty_folder_list' => 'Nenhum documento ou pasta', @@ -561,6 +564,7 @@ URL: [url]', 'exclude_items' => 'Excluir ítens', 'expired' => 'Expirado', 'expired_at_date' => 'Expirado em [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Documentos expirados', 'expires' => 'Expira', 'expire_by_date' => 'Data de vencimento', @@ -585,6 +589,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Extensão', 'extension_changelog' => 'Alterações no Log', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Carregando Extensões', 'extension_manager' => 'Gerenciar extensões', 'extension_mgr_error_upload' => '', @@ -592,6 +598,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'O envio de novas extensões não esta disponível pois o diretório Extensões recebeu a atribuição de Somente Leitura.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Disponível', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versões', 'february' => 'Fevereiro', 'file' => 'Arquivo', @@ -705,7 +713,7 @@ URL: [url]', 'include_subdirectories' => 'Include subdirectories', 'indexing_tasks_in_queue' => 'Tarefas de indexação em fila', 'index_converters' => 'conversores de índice', -'index_document_unchanged' => '', +'index_document_unchanged' => 'documento inalterado', 'index_done' => 'Finalizado', 'index_error' => 'Erro', 'index_folder' => 'Pasta Raiz', @@ -719,6 +727,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copiar lista de acesso herdada', 'inherits_access_empty_msg' => 'Inicie com a lista de acesso vazia', 'inherits_access_msg' => 'acesso está endo herdado.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Erro interno', 'internal_error_exit' => 'Erro interno. Não é possível concluir o pedido.', @@ -1143,6 +1152,7 @@ URL: [url]', 'review_update_failed' => 'Erro ao atualizar o status da revisão. Atualização falhou.', 'revise_document' => 'Revisar documento', 'revise_document_on' => 'Próxima revisão da versão do documento em [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] revisões já aceitas', 'revisions_accepted_latest' => 'revisões aceitas mais recentes', 'revisions_not_touched' => '[no_revisions] revisões não sendo tocadas', @@ -1249,6 +1259,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Seleção', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Escolha quando mostrar', 'select_attribute_value' => 'Selecione o valor do atributo', 'select_category' => 'Clique para selecionar a categoria', @@ -1733,6 +1744,7 @@ Nome: [username] 'splash_edit_user' => 'Usuário salvo', 'splash_error_add_to_transmittal' => 'Erro ao adicionar documento à transmissão', 'splash_error_rm_download_link' => 'Erro ao remover o link de download', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Erro ao enviar o link de download', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1835,8 +1847,11 @@ Nome: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Assuma o revisor individual da última versão.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Tarefas', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Descrição', 'task_disabled' => 'Desativado', 'task_frequency' => 'Frequência', @@ -1877,6 +1892,7 @@ Nome: [username] 'transfer_content' => 'Transferir conteúdo', 'transfer_document' => 'Transferir documento', 'transfer_no_read_access' => 'O usuário não possui acesso de leitura na pasta', +'transfer_no_users' => '', 'transfer_no_write_access' => 'O usuário não possui acesso de escrita na pasta', 'transfer_objects' => 'Transferir objetos', 'transfer_objects_to_user' => 'Novo proprietário', @@ -2015,6 +2031,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'transição do fluxo de trabalho sem grupo de usuários', 'workflow_user_summary' => 'Sumário de usuário', +'wrong_checksum' => '', 'wrong_filetype' => 'Tipo de arquivo errado', 'x_more_objects' => 'mais itens', 'year_view' => 'Visualização Anual', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 3ee604f57..1afc38c9f 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1101), balan (87) +// Translators: Admin (1107), balan (87) $text = array( '2_factor_auth' => '', @@ -336,7 +336,7 @@ URL: [url]', 'daily' => 'Zilnic', 'databasesearch' => 'Căutare baza de date', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Așteaptă, datele se încarcă...', 'date' => 'Data', 'days' => 'zile', 'debug' => '', @@ -504,6 +504,7 @@ URL: [url]', 'edit_folder_props' => 'Editează folder', 'edit_group' => 'Editează grup', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Editeaza proprietatile de transmitere', @@ -514,7 +515,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nici un email introdus', 'email_footer' => 'Puteți schimba oricând setările de e-mail folosind functionalitatile din \'Contul meu\'', +'email_footer_html' => '', 'email_header' => 'Acesta este un mesaj automat de la serverul DMS.', +'email_header_html' => '', 'email_not_given' => 'Vă rugăm să introduceți o adresă de email validă.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Nu există documente sau foldere', @@ -548,7 +551,8 @@ URL: [url]', 'event_details' => 'Detalii eveniment', 'exclude_items' => 'Elemente excluse', 'expired' => 'Expirat', -'expired_at_date' => '', +'expired_at_date' => 'Expirat la [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => '', 'expires' => 'Expiră', 'expire_by_date' => 'Expirare dupa data', @@ -573,6 +577,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Se incarca extensiile', 'extension_manager' => 'Gestionați extensiile', 'extension_mgr_error_upload' => '', @@ -580,6 +586,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Nu se poate incarca o extensie noua pentru ca directorul nu are drepturi de scriere', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Disponibila', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versiuni', 'february' => 'Februarie', 'file' => 'Fișier', @@ -686,7 +694,7 @@ URL: [url]', 'include_subdirectories' => 'Include subfoldere', 'indexing_tasks_in_queue' => 'Actiuni de indexare in stiva', 'index_converters' => '', -'index_document_unchanged' => '', +'index_document_unchanged' => 'document neschimbat', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Index folder', @@ -700,6 +708,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Copie lista de acces moștenită', 'inherits_access_empty_msg' => 'Începeți cu lista de acces goală', 'inherits_access_msg' => 'Accesul este moștenit.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Eroare internă', 'internal_error_exit' => 'Eroare internă. Nu se poate finaliza cererea.', @@ -1115,6 +1124,7 @@ URL: [url]', 'review_update_failed' => 'Eroare actualizarea status revizuire. Actualizarea a eșuat.', 'revise_document' => 'Revizuiti documentul', 'revise_document_on' => 'Urmatoarea revizuire a versiunii document pe [data]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1216,6 +1226,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Selecție', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Click pentru a selecta categoria', @@ -1695,6 +1706,7 @@ URL: [url]', 'splash_edit_user' => 'Utilizator salvat', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1797,8 +1809,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Preia revizuitorul individual din ultima versiune.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1834,11 +1849,12 @@ URL: [url]', 'to' => 'La', 'toggle_manager' => 'Comută Manager', 'toggle_qrcode' => '', -'total' => '', +'total' => 'Total', 'to_before_from' => 'Data de încheiere nu poate fi înainte de data de începere', 'transfer_content' => '', 'transfer_document' => 'Transfer document', 'transfer_no_read_access' => 'Utilizatorul nu are acces de citire pentru acest folder', +'transfer_no_users' => '', 'transfer_no_write_access' => 'Utilizatorul nu are drepturi de scriere pe acest dosar', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1921,7 +1937,7 @@ URL: [url]', 'use_comment_of_document' => 'Utilizați comentarii la documente', 'use_default_categories' => 'Utilizați categorii predefinite', 'use_default_keywords' => 'Utilizați cuvinte cheie predefinite', -'valid_till' => '', +'valid_till' => 'Valabil până la', 'version' => 'Versiune', 'versioning_file_creation' => 'Creare fișier de versionare', 'versioning_file_creation_warning' => 'Cu această operațiune puteți crea un fișier care conține informațiile versiunilor pentru un întreg folder DMS. După creare, fiecare fisier va fi salvat in folder-ul de documente.', @@ -1938,7 +1954,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name] - Versiune ștearsă', 'version_info' => 'Informații versiune', 'view' => 'Vizualizare', -'view_document' => '', +'view_document' => 'Afișează detaliile documentului', 'view_folder' => '', 'view_online' => 'Vizualizare online', 'warning' => 'Avertisment', @@ -1977,6 +1993,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Sumar Utilizator', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => 'Mai multe', 'year_view' => 'Vizualizare an', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index b9df1fc11..ae16c7a54 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1704) +// Translators: Admin (1717) $text = array( '2_factor_auth' => 'Двухфакторная аутентификация', @@ -248,7 +248,7 @@ URL: [url]', 'category_in_use' => 'Эта категория используется документами', 'category_noname' => 'Введите название категории', 'ca_ES' => 'Catalan', -'changelog_loading' => '', +'changelog_loading' => 'Подождите, пока не загрузится журнал изменений', 'change_assignments' => 'Изменить назначения', 'change_password' => 'Изменить пароль', 'change_password_message' => 'Пароль изменён', @@ -335,7 +335,7 @@ URL: [url]', 'current_version' => 'Текущая версия', 'daily' => 'Ежедневно', 'databasesearch' => 'Поиск по БД', -'database_schema_version' => '', +'database_schema_version' => 'Версия базы', 'data_loading' => 'Пожалуйста подождите, данные загружаются...', 'date' => 'Дата', 'days' => 'дни', @@ -504,6 +504,7 @@ URL: [url]', 'edit_folder_props' => 'Изменить свойства', 'edit_group' => 'Изменить группу', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Редактировать группы получателей', @@ -514,7 +515,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Не указан e-mail', 'email_footer' => 'Вы можете изменить e-mail используя меню «Моя учётка».', +'email_footer_html' => '', 'email_header' => 'Это автоматическое уведомление сервера документооборота.', +'email_header_html' => '', 'email_not_given' => 'Введите настоящий адрес e-mail.', 'empty_attribute_group_list' => 'Пустой список группы атрибутов', 'empty_folder_list' => 'Нет документов или каталогов', @@ -549,6 +552,7 @@ URL: [url]', 'exclude_items' => 'Не показывать события:', 'expired' => 'Срок действия вышел', 'expired_at_date' => 'Истекает в', +'expired_docs_mail_subject' => '', 'expired_documents' => '', 'expires' => 'Срок действия', 'expire_by_date' => 'дата', @@ -559,7 +563,7 @@ URL: [url]', 'expire_in_1y' => '1 год', 'expire_in_2h' => 'Истекает через два часа', 'expire_in_2y' => '2 года', -'expire_in_3y' => '', +'expire_in_3y' => 'Истекает через 3 года', 'expire_today' => 'Истекает сегодня', 'expire_tomorrow' => 'Истекает завтра', 'expiry_changed_email' => 'Срок действия изменен', @@ -572,15 +576,19 @@ URL: [url]', 'export' => 'Экспорт', 'export_user_list_csv' => '', 'extension_archive' => '', -'extension_changelog' => '', -'extension_loading' => '', +'extension_changelog' => 'Журнал изменений', +'extension_is_off_now' => '', +'extension_is_on_now' => '', +'extension_loading' => 'Загрузка расширений', 'extension_manager' => 'Управление расширениями', 'extension_mgr_error_upload' => '', -'extension_mgr_installed' => '', -'extension_mgr_no_upload' => '', +'extension_mgr_installed' => 'установлены', +'extension_mgr_no_upload' => 'Загрузка новых расширений невозможна, потому что каталог расширений недоступен для записи.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Установленные', -'extension_version_list' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', +'extension_version_list' => 'Версии', 'february' => 'Февраль', 'file' => 'Файл', 'files' => 'Файлы', @@ -633,7 +641,7 @@ URL: [url]', 'folder_renamed_email_subject' => '[sitename]: переименован каталог «[name]»', 'folder_title' => 'Каталог [foldername]', 'foot_note' => '', -'force_update' => '', +'force_update' => 'обновить', 'friday' => 'Пятница', 'friday_abbr' => 'Пт', 'from' => 'От', @@ -700,6 +708,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Скопировать наследованный список', 'inherits_access_empty_msg' => 'Начать с пустого списка доступа', 'inherits_access_msg' => 'Доступ унаследован.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Внутренняя ошибка', 'internal_error_exit' => 'Внутренняя ошибка. Невозможно выполнить запрос.', @@ -1117,6 +1126,7 @@ URL: [url]', 'review_update_failed' => 'Ошибка обновления статуса рецензии', 'revise_document' => 'Ревизировать документ', 'revise_document_on' => 'Следующий ревизия версии документа назначен на [date]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1220,9 +1230,10 @@ URL: [url]', 'search_results_access_filtered' => 'Результаты поиска могут содержать объекты к которым у вас нет доступа', 'search_time' => 'Прошло: [time] с', 'seconds' => 'секунды', -'seeddms_info' => '', -'seeddms_version' => '', +'seeddms_info' => 'Информация о системе', +'seeddms_version' => 'Версия', 'selection' => 'Выбор', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Выберите категорию', @@ -1658,8 +1669,8 @@ URL: [url]', 'set_owner_error' => 'Ошибка при установке владельца', 'set_password' => 'Установить пароль', 'set_workflow' => 'Установить процесс', -'show_extension_changelog' => '', -'show_extension_version_list' => '', +'show_extension_changelog' => 'Показать журнал изменений', +'show_extension_version_list' => 'Показать список версий', 'signed_in_as' => 'Пользователь', 'sign_in' => 'Войти', 'sign_out' => 'Выйти', @@ -1702,6 +1713,7 @@ URL: [url]', 'splash_edit_user' => 'Пользователь сохранён', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1804,8 +1816,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Использовать рецензентов из прошлой версии', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Задания', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1846,6 +1861,7 @@ URL: [url]', 'transfer_content' => '', 'transfer_document' => 'Передать документ', 'transfer_no_read_access' => 'Пользователь не имеет доступа на чтение в этой папке', +'transfer_no_users' => '', 'transfer_no_write_access' => 'Пользователь не имеет доступа на запись в этой папке', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1984,6 +2000,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Сводка по пользователю', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '', 'year_view' => 'Год', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index 3cd2845d5..db2bc48fd 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1226), destinqo (26), pS2017 (508), ssebech (4) +// Translators: Admin (1229), destinqo (26), pS2017 (508), ssebech (4) $text = array( '2_factor_auth' => '2-faktorové overovanie', @@ -336,7 +336,7 @@ URL: [url]', 'daily' => 'Denná', 'databasesearch' => 'Hľadať databázu', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => 'Prosím počkajte, kým sa nenahrajú dáta', 'date' => 'Dátum', 'days' => 'dní', 'debug' => 'Ladiť', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => 'Upraviť zložku', 'edit_group' => 'Upraviť skupinu', 'edit_online' => 'Upraviť online', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => 'Upraviť úlohu', 'edit_transmittal_props' => 'Edit transmittal properties', @@ -526,7 +527,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => 'Nebol zadaný žiadny E-mail', 'email_footer' => 'Nastavenia e-mailu si kedykoľvek môžete zmeniť cez \'Môj účet\'', +'email_footer_html' => '', 'email_header' => 'Toto je automatická správa od Dokument servera.', +'email_header_html' => '', 'email_not_given' => 'Prosím, zadajte platnú emailovú adresu.', 'empty_attribute_group_list' => 'No attribute groups', 'empty_folder_list' => 'Žiadne dokumenty alebo zložky', @@ -561,6 +564,7 @@ URL: [url]', 'exclude_items' => 'Vylúčiť položky', 'expired' => 'Platnosť vypršala', 'expired_at_date' => 'Platnosť vypršala [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Dokumenty, ktorým skončila platnosť', 'expires' => 'Platnosť vyprší', 'expire_by_date' => 'Platnosť skončí podľa dátumu', @@ -585,6 +589,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => 'Rozšírenie', 'extension_changelog' => 'Denník zmien', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Nahrávajú sa rozšírenia ...', 'extension_manager' => 'Spravovať rozšírenia', 'extension_mgr_error_upload' => '', @@ -592,6 +598,8 @@ URL: [url]', 'extension_mgr_no_upload' => 'Uploading new extensions is not possible because the extentension directory is not writable.', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Available', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Versions', 'february' => 'Február', 'file' => 'Súbor', @@ -719,6 +727,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Skopírovať zdedený zoznam riadenia prístupu', 'inherits_access_empty_msg' => 'Založiť nový zoznam riadenia prístupu', 'inherits_access_msg' => 'Prístup sa dedí.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Vnútorná chyba', 'internal_error_exit' => 'Vnútorná chyba. Nebolo možné dokončiť požiadavku.', @@ -853,7 +862,7 @@ URL: [url]', 'my_documents' => 'Moje dokumenty', 'my_transmittals' => 'My Transmittals', 'name' => 'Meno', -'nb_NO' => '', +'nb_NO' => 'Nórčina (Bokmål)', 'needs_correction' => 'Vyžaduje opravu', 'needs_workflow_action' => 'Tento dokument si vyžaduje vašu pozornosť. Skontrolujte kartu pracovného postupu.', 'network_drive' => 'Sieťová jednotka', @@ -1145,6 +1154,7 @@ URL: [url]', 'review_update_failed' => 'Chyba pri aktualizácii stavu recenzie. Aktualizácia zlyhala.', 'revise_document' => 'Revidovať dokument', 'revise_document_on' => 'Next revision of document version on [date]', +'revision' => '', 'revisions_accepted' => '[no_revisions] revisions already accepted', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '[no_revisions] revisions not being touched', @@ -1251,6 +1261,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Výber', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Choose when to show', 'select_attribute_value' => 'Vyberte hodnotu atribútu', 'select_category' => 'Vyber kategóriu', @@ -1735,6 +1746,7 @@ Meno: [username] 'splash_edit_user' => 'Používateľ bol uložený', 'splash_error_add_to_transmittal' => 'Error while adding document to transmittal', 'splash_error_rm_download_link' => 'Error when removing download link', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Error while sending download link', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1837,8 +1849,11 @@ Meno: [username] 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Take over individual reviewer from last version.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Úlohy', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => 'Description', 'task_disabled' => 'Disabled', 'task_frequency' => 'Frequency', @@ -1879,6 +1894,7 @@ Meno: [username] 'transfer_content' => '', 'transfer_document' => 'Zmeniť vlastníka', 'transfer_no_read_access' => 'Používateľ nemá práva na čítanie v adresári', +'transfer_no_users' => '', 'transfer_no_write_access' => 'Používateľ nemá práva na zapisovanie v adresári', 'transfer_objects' => 'Prenesené objekty', 'transfer_objects_to_user' => 'Nový vlastník', @@ -2017,6 +2033,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'At least one of the transitions has neither a user nor a group!', 'workflow_user_summary' => 'User summary', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => 'ďalších [number] objektov', 'year_view' => 'Rok', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index 43f175a67..b7515ee84 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -510,6 +510,7 @@ URL: [url]', 'edit_folder_props' => 'Ändra katalog', 'edit_group' => 'Ändra grupp', 'edit_online' => 'Uppdatera online', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Ändra egenskaper för meddelande', @@ -520,7 +521,9 @@ URL: [url]', 'email' => 'E-post', 'email_error_title' => 'E-post saknas', 'email_footer' => 'Du kan alltid ändra dina e-postinställningar genom att gå till \'Min Sida\'', +'email_footer_html' => '', 'email_header' => 'Detta meddelande skapades automatiskt från dokumentservern.', +'email_header_html' => '', 'email_not_given' => 'Skriv in en giltig e-postadress.', 'empty_attribute_group_list' => 'Grupp för attribut saknas', 'empty_folder_list' => 'Inga dokument eller mappar', @@ -555,6 +558,7 @@ URL: [url]', 'exclude_items' => '', 'expired' => 'Har gått ut', 'expired_at_date' => 'Upphörde per [datetime]', +'expired_docs_mail_subject' => '', 'expired_documents' => 'Utgångna dokument', 'expires' => 'Kommer att gå ut', 'expire_by_date' => 'Upphör att gälla per', @@ -579,6 +583,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'Hantera tillägg', 'extension_mgr_error_upload' => '', @@ -586,6 +592,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'februari', 'file' => 'Fil', @@ -706,6 +714,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Kopiera lista för behörighetsarv', 'inherits_access_empty_msg' => 'Börja med tom behörighetslista', 'inherits_access_msg' => 'Behörigheten har ärvts.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Internt fel', 'internal_error_exit' => 'Internt fel. Förfrågan kunde inte utföras.', @@ -1118,6 +1127,7 @@ URL: [url]', 'review_update_failed' => 'Fel vid uppdatering av granskningsstatus. Kunde inte uppdatera.', 'revise_document' => 'Revidera dokument', 'revise_document_on' => 'Nästa revidering av dokumentversion [date]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1224,6 +1234,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Urval', +'select_attrdef' => '', 'select_attrdefgrp_show' => 'Välj visingsalternativ', 'select_attribute_value' => '', 'select_category' => 'Klicka för att välja en kategori', @@ -1708,6 +1719,7 @@ Kommentar: [comment]', 'splash_edit_user' => 'Användare sparad', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => 'Fel vid borttagande av nedladdningslänk', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => 'Fel vid sändning av nedladdningslänk', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1810,8 +1822,11 @@ Kommentar: [comment]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Ta över individuell granskare från senaste version', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Uppgifter', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1852,6 +1867,7 @@ Kommentar: [comment]', 'transfer_content' => '', 'transfer_document' => 'Överför dokument', 'transfer_no_read_access' => 'Användaren har inte läsrättigheter i katalogen', +'transfer_no_users' => '', 'transfer_no_write_access' => 'Användaren har inte skrivrättigheter i katalogen', 'transfer_objects' => 'Överför objekt', 'transfer_objects_to_user' => 'Ny ägare', @@ -1990,6 +2006,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => 'Minst en av övergångarna i arbetsflödet saknar användare eller grupp.', 'workflow_user_summary' => 'Sammanfattning användare', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] ytterligare objekt', 'year_view' => 'Årsvy', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 8144bff19..463b5b873 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1120), aydin (83) +// Translators: Admin (1125), aydin (83) $text = array( '2_factor_auth' => 'İki faktörlü yetkilendirme', @@ -465,7 +465,7 @@ URL: [url]', 'do_object_setfilesize' => 'Dosya boyutu ayarla', 'do_object_setfiletype' => '', 'do_object_unlink' => 'Doküman versiyonunu sil', -'draft' => '', +'draft' => 'Taslak', 'draft_pending_approval' => 'Taslak - onay bekliyor', 'draft_pending_review' => 'Taslak - kontrol bekliyor', 'drag_icon_here' => 'Klasör veya dokümanın ikonunu buraya sürükleyin!', @@ -498,6 +498,7 @@ URL: [url]', 'edit_folder_props' => 'Klasörü düzenle', 'edit_group' => 'Grubu düzenle', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -508,7 +509,9 @@ URL: [url]', 'email' => 'E-posta', 'email_error_title' => 'E-posta adresi girilmedi', 'email_footer' => '\'My Account\' özelliklerini kullanarak her zaman e-posta ayarlarınızı değiştirebilirsiniz', +'email_footer_html' => '', 'email_header' => 'Bu DYS sunucusu tarafından gönderilen otomatik bir mesajdır.', +'email_header_html' => '', 'email_not_given' => 'Lütfen geçerli bir e-posta adresi giriniz.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Hiç klasör veya doküman yok', @@ -543,6 +546,7 @@ URL: [url]', 'exclude_items' => '', 'expired' => 'Süresi doldu', 'expired_at_date' => '', +'expired_docs_mail_subject' => '', 'expired_documents' => '', 'expires' => 'Süresinin dolacağı zaman', 'expire_by_date' => 'Tarihe göre sil', @@ -567,6 +571,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => 'Değişiklik Listesi', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => 'Uzantı yüklendi', 'extension_manager' => 'Uzantıları düzenle', 'extension_mgr_error_upload' => '', @@ -574,6 +580,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => 'Mevcut', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => 'Veysionlar', 'february' => 'Şubat', 'file' => 'Dosya', @@ -694,6 +702,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Devralınan erişim listesini kopyala', 'inherits_access_empty_msg' => 'Boş erişim listesiyle başla', 'inherits_access_msg' => 'Erişim devralınıyor', +'installed_apache_extensions' => '', 'installed_php_extensions' => 'Kurulu php eklentileri', 'internal_error' => 'İç hata', 'internal_error_exit' => 'İç hata. İstek tamamlanmadı.', @@ -719,7 +728,7 @@ URL: [url]', 'invalid_user_id' => 'Geçersiz Kullanıcı ID', 'invalid_version' => 'Geçersiz Doküman Versiyonu', 'in_folder' => '', -'in_revision' => '', +'in_revision' => 'revizyonda', 'in_workflow' => 'İş Akışında', 'is_disabled' => 'Hesap devredışı', 'is_hidden' => 'Kullanıcı listesinde gizle', @@ -1013,8 +1022,8 @@ Giriş yaparken halen sorun yaşıyorsanız lütfen sistem yöneticinizle görü 'recent_uploads' => 'En son yüklenenler', 'reception' => '', 'reception_acknowleged' => '', -'reception_noaction' => '', -'reception_rejected' => '', +'reception_noaction' => 'Hareket yok', +'reception_rejected' => 'Resepsiyon reddedildi', 'recipients' => '', 'recipient_already_removed' => '', 'redraw' => '', @@ -1094,6 +1103,7 @@ URL: [url]', 'review_update_failed' => 'Kontrol güncelleme durumu hatalı. Güncelleme başarısız.', 'revise_document' => '', 'revise_document_on' => '', +'revision' => 'Revizyon', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1195,6 +1205,7 @@ URL: [url]', 'seeddms_info' => 'SeedDMS hakkında bilgi', 'seeddms_version' => 'SeedDMS Sürümü', 'selection' => 'Seçim', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Kategori seçmek için tıklayın', @@ -1674,6 +1685,7 @@ URL: [url]', 'splash_edit_user' => 'Kullanıcı kaydedildi', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1776,8 +1788,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Bir önceki versiyonu kontrol edeni al.', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1818,6 +1833,7 @@ URL: [url]', 'transfer_content' => '', 'transfer_document' => 'Dokumanı gönder', 'transfer_no_read_access' => 'Kullanıcının klasörde okuma erişimi yok.', +'transfer_no_users' => '', 'transfer_no_write_access' => 'Kullanıcının klasör üzerinde yazma hakkı yok', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1956,6 +1972,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Kullanıcı özeti', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] více objektů', 'year_view' => 'Yıllık Görünüm', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index e0c4179c4..e3d80fea1 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -504,6 +504,7 @@ URL: [url]', 'edit_folder_props' => 'Змінити каталог', 'edit_group' => 'Змінити групу', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => 'Редагувати налаштування перенесення', @@ -514,7 +515,9 @@ URL: [url]', 'email' => 'E-mail', 'email_error_title' => 'Не вказано e-mail', 'email_footer' => 'Ви можете змінити e-mail використовуючи меню «Мій обліковий запис».', +'email_footer_html' => '', 'email_header' => 'Це автоматичне сповіщення сервера документообігу', +'email_header_html' => '', 'email_not_given' => 'Введіть справжній e-mail.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Немає документів або каталогів', @@ -549,6 +552,7 @@ URL: [url]', 'exclude_items' => 'Виключені елементи', 'expired' => 'Термін виконання вийшов', 'expired_at_date' => '', +'expired_docs_mail_subject' => '', 'expired_documents' => '', 'expires' => 'Термін виконання виходить', 'expire_by_date' => '', @@ -573,6 +577,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '', 'extension_manager' => 'Керування розширеннями', 'extension_mgr_error_upload' => '', @@ -580,6 +586,8 @@ URL: [url]', 'extension_mgr_no_upload' => '', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '', 'february' => 'Лютий', 'file' => 'Файл', @@ -700,6 +708,7 @@ URL: [url]', 'inherits_access_copy_msg' => 'Скопіювати успадкований список', 'inherits_access_empty_msg' => 'Почати з порожнього списку доступу', 'inherits_access_msg' => 'Доступ успадковано.', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => 'Внутрішня помилка', 'internal_error_exit' => 'Внутрішня помилка. Неможливо виконати запит.', @@ -1110,6 +1119,7 @@ URL: [url]', 'review_update_failed' => 'Помилка оновлення статусу рецензії', 'revise_document' => 'Ревізувати документ', 'revise_document_on' => 'Наступна ревізія документу [date]', +'revision' => '', 'revisions_accepted' => '', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1216,6 +1226,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => 'Вибір', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => 'Оберіть категорію', @@ -1695,6 +1706,7 @@ URL: [url]', 'splash_edit_user' => 'Користувача збережено', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1797,8 +1809,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => 'Використати рецензентів з попередньої версії', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => 'Завдання', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1839,6 +1854,7 @@ URL: [url]', 'transfer_content' => '', 'transfer_document' => '', 'transfer_no_read_access' => '', +'transfer_no_users' => '', 'transfer_no_write_access' => '', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1977,6 +1993,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Підсумки по користувачу', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '[number] більше об\'єктів', 'year_view' => 'Рік', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index a5acfc69e..fb054e15e 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (774), archonwang (469), fengjohn (5), yang86 (1) +// Translators: Admin (783), archonwang (469), fengjohn (5), yang86 (1) $text = array( '2_factor_auth' => '双重认证', @@ -313,7 +313,7 @@ URL: [url]', 'confirm_update_transmittalitem' => '确认更新', 'content' => '内容', 'continue' => '继续', -'converter_new_cmd' => '', +'converter_new_cmd' => '命令', 'converter_new_mimetype' => '新建 MIME 类型', 'copied_to_checkout_as' => '', 'create_download_link' => '', @@ -329,8 +329,8 @@ URL: [url]', 'current_version' => '当前版本', 'daily' => '天', 'databasesearch' => '数据库搜索', -'database_schema_version' => '', -'data_loading' => '', +'database_schema_version' => '数据库数据版本', +'data_loading' => '数据加载中,请稍后...', 'date' => '日期', 'days' => '天', 'debug' => '调试', @@ -498,6 +498,7 @@ URL: [url]', 'edit_folder_props' => '编辑文件夹', 'edit_group' => '编辑组别', 'edit_online' => '', +'edit_online_not_allowed' => '', 'edit_online_warning' => '', 'edit_task' => '', 'edit_transmittal_props' => '', @@ -508,7 +509,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => '未输入 Email 地址', 'email_footer' => '您可以用‘我的账户’选项来改变您的e-mail设置', +'email_footer_html' => '', 'email_header' => '这是来自于DMS(文档管理系统)的自动发送消息', +'email_header_html' => '', 'email_not_given' => '请输入有效的 Email 地址', 'empty_attribute_group_list' => '', 'empty_folder_list' => '没有文件或子目录', @@ -543,6 +546,7 @@ URL: [url]', 'exclude_items' => '排除项目', 'expired' => '过期', 'expired_at_date' => '过期时间', +'expired_docs_mail_subject' => '', 'expired_documents' => '过期文档', 'expires' => '有效限期', 'expire_by_date' => '指定过期时间', @@ -563,6 +567,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '', 'extension_changelog' => '更新日志', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '加载扩展', 'extension_manager' => '扩展管理器', 'extension_mgr_error_upload' => '', @@ -570,6 +576,8 @@ URL: [url]', 'extension_mgr_no_upload' => '上传新扩展名是不可能的,因为extentension目录不可写', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '可得到', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '版本列表', 'february' => '二 月', 'file' => '文件', @@ -690,6 +698,7 @@ URL: [url]', 'inherits_access_copy_msg' => '复制继承访问权限列表', 'inherits_access_empty_msg' => '从访问权限空列表开始', 'inherits_access_msg' => '继承访问权限', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => '内部错误', 'internal_error_exit' => '内部错误.无法完成请求.离开系统', @@ -1014,7 +1023,7 @@ URL: [url]', 'reception_acknowleged' => '', 'reception_noaction' => '', 'reception_rejected' => '', -'recipients' => '', +'recipients' => '收件者', 'recipient_already_removed' => '', 'redraw' => '', 'refresh' => '刷新', @@ -1086,6 +1095,7 @@ URL: [url]', 'review_update_failed' => '错误 更新校对状态.更新失败', 'revise_document' => '', 'revise_document_on' => '', +'revision' => '', 'revisions_accepted' => '[no_revisions] 修订已被接受', 'revisions_accepted_latest' => '', 'revisions_not_touched' => '', @@ -1184,8 +1194,9 @@ URL: [url]', 'search_time' => '耗时:[time]秒', 'seconds' => '秒', 'seeddms_info' => '', -'seeddms_version' => '', +'seeddms_version' => 'SeedDMS 版本', 'selection' => '选择', +'select_attrdef' => '', 'select_attrdefgrp_show' => '', 'select_attribute_value' => '', 'select_category' => '选中分类', @@ -1284,9 +1295,9 @@ URL: [url]', 'settings_createdirectory' => '创建目录', 'settings_currentvalue' => '当前值', 'settings_Database' => '数据库设置', -'settings_dateformat' => '', +'settings_dateformat' => '日期格式', 'settings_dateformat_desc' => '', -'settings_datetimeformat' => '', +'settings_datetimeformat' => '日期时间格式', 'settings_datetimeformat_desc' => '', 'settings_dbDatabase' => '数据库名称', 'settings_dbDatabase_desc' => '设置连接的数据库', @@ -1670,6 +1681,7 @@ URL: [url]', 'splash_edit_user' => '用户信息已保存', 'splash_error_add_to_transmittal' => '', 'splash_error_rm_download_link' => '移除下载链接时报错', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '发送下载链接时报错', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1725,10 +1737,10 @@ URL: [url]', 'status_approver_removed' => '从审核队列中删除', 'status_needs_correction' => '', 'status_not_approved' => '未批准', -'status_not_receipted' => '', +'status_not_receipted' => '尚未接收', 'status_not_reviewed' => '未校对', 'status_not_revised' => '', -'status_receipted' => '', +'status_receipted' => '已接收', 'status_receipt_rejected' => '', 'status_recipient_removed' => '', 'status_reviewed' => '通过', @@ -1772,8 +1784,11 @@ URL: [url]', 'takeOverIndApprovers' => '', 'takeOverIndReviewer' => '', 'takeOverIndReviewers' => '', +'target_equals_source_folder' => '', 'tasks' => '任务', 'task_core_expireddocs_days' => '', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '', 'task_disabled' => '', 'task_frequency' => '', @@ -1814,6 +1829,7 @@ URL: [url]', 'transfer_content' => '', 'transfer_document' => '共享文档', 'transfer_no_read_access' => '用户没有该文件夹的读权限', +'transfer_no_users' => '', 'transfer_no_write_access' => '当前用户没有文件夹写入权限', 'transfer_objects' => '', 'transfer_objects_to_user' => '', @@ -1943,6 +1959,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '用户概述', +'wrong_checksum' => '', 'wrong_filetype' => '', 'x_more_objects' => '浏览更多', 'year_view' => '年视图', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index ca319ef79..d482d27da 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2425) +// Translators: Admin (2429) $text = array( '2_factor_auth' => '2階段認證', @@ -336,7 +336,7 @@ URL: [url]', 'daily' => '每日', 'databasesearch' => '資料庫搜索', 'database_schema_version' => '', -'data_loading' => '', +'data_loading' => '請等到資料載入完畢', 'date' => '日期', 'days' => '天數', 'debug' => '除錯', @@ -516,6 +516,7 @@ URL: [url]', 'edit_folder_props' => '編輯資料夾', 'edit_group' => '編輯組別', 'edit_online' => '線上編輯', +'edit_online_not_allowed' => '', 'edit_online_warning' => '保存更改將覆蓋當前版本的內容,而不是創建新版本。', 'edit_task' => '編輯工作', 'edit_transmittal_props' => '編輯傳輸屬性', @@ -526,7 +527,9 @@ URL: [url]', 'email' => 'Email', 'email_error_title' => '信箱沒有輸入', 'email_footer' => '您可以用‘我的帳戶’選項來改變您的e-mail設置', +'email_footer_html' => '', 'email_header' => '這是來自于DMS(文件管理系統)的自動發送消息', +'email_header_html' => '', 'email_not_given' => '請輸入有效的信箱網址', 'empty_attribute_group_list' => '沒有屬性組', 'empty_folder_list' => '沒有檔或子目錄', @@ -561,6 +564,7 @@ URL: [url]', 'exclude_items' => '例外項目', 'expired' => '過期', 'expired_at_date' => '已於[datetime]過期', +'expired_docs_mail_subject' => '', 'expired_documents' => '過期的文件', 'expires' => '有效限期', 'expire_by_date' => '到期日', @@ -585,6 +589,8 @@ URL: [url]', 'export_user_list_csv' => '', 'extension_archive' => '擴充', 'extension_changelog' => '修改紀錄', +'extension_is_off_now' => '', +'extension_is_on_now' => '', 'extension_loading' => '擴充套件讀取中', 'extension_manager' => '擴充套件的管理', 'extension_mgr_error_upload' => '', @@ -592,6 +598,8 @@ URL: [url]', 'extension_mgr_no_upload' => '無法上傳新的套件因為套件目錄無法寫入', 'extension_mgr_no_zipfile' => '', 'extension_mgr_repository' => '可用', +'extension_missing_name' => '', +'extension_toggle_error' => '', 'extension_version_list' => '版本', 'february' => '二 月', 'file' => '文件', @@ -697,7 +705,7 @@ URL: [url]', 'import_extension' => '匯入擴充', 'import_fs' => '由檔案系統匯入', 'import_fs_warning' => '這僅適用於放置文件夾中的文件夾。該操作以遞歸方式導入所有文件夾和文件。文件將立即釋放。', -'import_users' => '', +'import_users' => '導入用戶', 'import_users_addnew' => '', 'import_users_update' => '', 'include_content' => '包含內容', @@ -705,7 +713,7 @@ URL: [url]', 'include_subdirectories' => '包含子目錄', 'indexing_tasks_in_queue' => '索引任務正在序列中', 'index_converters' => '', -'index_document_unchanged' => '', +'index_document_unchanged' => '文件未改變', 'index_done' => '完成', 'index_error' => '錯誤', 'index_folder' => '索引目錄', @@ -719,6 +727,7 @@ URL: [url]', 'inherits_access_copy_msg' => '複製繼承存取權限列表', 'inherits_access_empty_msg' => '從存取權限空列表開始', 'inherits_access_msg' => '繼承存取權限', +'installed_apache_extensions' => '', 'installed_php_extensions' => '', 'internal_error' => '內部錯誤', 'internal_error_exit' => '內部錯誤.無法完成請求.離開系統', @@ -1143,6 +1152,7 @@ URL: [url]', 'review_update_failed' => '錯誤 更新校對狀態.更新失敗', 'revise_document' => '修改文件', 'revise_document_on' => '[date]文檔版本的下一修訂版', +'revision' => '', 'revisions_accepted' => '[no_revisions]個修訂已被接受', 'revisions_accepted_latest' => '(最新版本為[no_revisions])', 'revisions_not_touched' => '[no_revisions]修訂未涉及', @@ -1249,6 +1259,7 @@ URL: [url]', 'seeddms_info' => '', 'seeddms_version' => '', 'selection' => '選擇', +'select_attrdef' => '', 'select_attrdefgrp_show' => '選擇當展示時', 'select_attribute_value' => '選擇屬性值', 'select_category' => '選中分類', @@ -1733,6 +1744,7 @@ URL: [url]', 'splash_edit_user' => '使用者已儲存', 'splash_error_add_to_transmittal' => '將文件添加到傳送時出錯', 'splash_error_rm_download_link' => '刪除下載鏈接時出錯', +'splash_error_saving_file' => '', 'splash_error_send_download_link' => '發送下載鏈接時出錯', 'splash_expiration_date_cleared' => '', 'splash_expiration_date_set' => '', @@ -1835,8 +1847,11 @@ URL: [url]', 'takeOverIndApprovers' => '接管個人批准人', 'takeOverIndReviewer' => '從上個版本接管個別審稿人', 'takeOverIndReviewers' => '接管個人審稿人', +'target_equals_source_folder' => '', 'tasks' => '任務', 'task_core_expireddocs_days' => '天數', +'task_core_expireddocs_email' => '', +'task_core_indexingdocs_recreate' => '', 'task_description' => '描述', 'task_disabled' => '不啟用', 'task_frequency' => '頻率', @@ -1877,6 +1892,7 @@ URL: [url]', 'transfer_content' => '傳送內容', 'transfer_document' => '傳送檔案', 'transfer_no_read_access' => '用戶在文件夾中沒有讀取權限', +'transfer_no_users' => '', 'transfer_no_write_access' => '用戶在文件夾中沒有寫權限', 'transfer_objects' => '傳送物件', 'transfer_objects_to_user' => '新擁有者', @@ -1976,7 +1992,7 @@ URL: [url]', 'version_deleted_email_subject' => '[sitename]: [name]-版本已刪除', 'version_info' => '版本資訊', 'view' => '檢視', -'view_document' => '', +'view_document' => '檢視文件細節', 'view_folder' => '', 'view_online' => '線上流覽', 'warning' => '警告', @@ -2015,6 +2031,7 @@ URL: [url]', 'workflow_title' => '', 'workflow_transition_without_user_group' => '至少有一個過渡既沒有用戶也沒有組!', 'workflow_user_summary' => '使用者摘要', +'wrong_checksum' => '', 'wrong_filetype' => '錯誤的檔案類型', 'x_more_objects' => '增加[number]物件', 'year_view' => '年視圖', diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index f76224216..fa6af0400 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -79,7 +79,7 @@ $version_comment = !empty($_POST["version_comment"]) ? trim($_POST["version_comm if($version_comment == "" && isset($_POST["use_comment"])) $version_comment = $comment; -$keywords = trim($_POST["keywords"]); +$keywords = isset($_POST["keywords"]) ? trim($_POST["keywords"]) : ''; $categories = isset($_POST["categories"]) ? $_POST["categories"] : null; $cats = array(); if($categories) { @@ -201,45 +201,15 @@ if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'tra } } // add mandatory reviewers/approvers - $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); if($settings->_workflowMode == 'traditional') { - $res=$user->getMandatoryReviewers(); - foreach ($res as $r){ - - if ($r['reviewerUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['reviewerUserID']){ - $reviewers["i"][] = $r['reviewerUserID']; - break; - } - } - else if ($r['reviewerGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['reviewerGroupID']){ - $reviewers["g"][] = $r['reviewerGroupID']; - break; - } - } - } + $mreviewers = getMandatoryReviewers($folder, $user); + if($mreviewers['i']) + $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); } - $res=$user->getMandatoryApprovers(); - foreach ($res as $r){ + $mapprovers = getMandatoryApprovers($folder, $user); + if($mapprovers['i']) + $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); - if ($r['approverUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['approverUserID']){ - $approvers["i"][] = $r['approverUserID']; - break; - } - } - else if ($r['approverGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['approverGroupID']){ - $approvers["g"][] = $r['approverGroupID']; - break; - } - } - } if($settings->_workflowMode == 'traditional' && !$settings->_allowReviewerOnly) { /* Check if reviewers are send but no approvers */ if(($reviewers["i"] || $reviewers["g"]) && !$approvers["i"] && !$approvers["g"]) { @@ -421,11 +391,13 @@ for ($file_num=0;$file_num_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } + /* Get workflow from controller in case it was modified in a hook */ + $workflow = $controller->getParam('workflow'); if($workflow && $settings->_enableNotificationWorkflow) { $subject = "request_workflow_action_email_subject"; $message = "request_workflow_action_email_body"; @@ -442,16 +414,21 @@ for ($file_num=0;$file_numgetNextTransitions($workflow->getInitState()) as $ntransition) { foreach($ntransition->getUsers() as $tuser) { - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } foreach($ntransition->getGroups() as $tuser) { - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } if($settings->_enableNotificationAppRev) { /* Reviewers and approvers will be informed about the new document */ + /* Get reviewers and approvers from controller in case it was + * modified in a hook + */ + $reviewers = $controller->getParam('reviewers'); + $approvers = $controller->getParam('approvers'); if($reviewers['i'] || $reviewers['g']) { $subject = "review_request_email_subject"; $message = "review_request_email_body"; @@ -466,10 +443,10 @@ for ($file_num=0;$file_num_httpRoot; foreach($reviewers['i'] as $reviewerid) { - $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } foreach($reviewers['g'] as $reviewergrpid) { - $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } @@ -487,10 +464,10 @@ for ($file_num=0;$file_num_httpRoot; foreach($approvers['i'] as $approverid) { - $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } foreach($approvers['g'] as $approvergrpid) { - $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } diff --git a/op/op.AddDocumentLink.php b/op/op.AddDocumentLink.php index 3bd4cb7e3..fc664f730 100644 --- a/op/op.AddDocumentLink.php +++ b/op/op.AddDocumentLink.php @@ -20,6 +20,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Utils.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); @@ -28,6 +29,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('adddocumentlink', 'GET')) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } diff --git a/op/op.AddEvent.php b/op/op.AddEvent.php index b5ce57a54..84a83da65 100644 --- a/op/op.AddEvent.php +++ b/op/op.AddEvent.php @@ -34,6 +34,11 @@ if ($user->isGuest()) { UI::exitError(getMLText("edit_event"),getMLText("access_denied")); } +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('addevent')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_POST["from"]) && !(isset($_POST["frommonth"]) && isset($_POST["fromday"]) && isset($_POST["fromyear"])) ) { UI::exitError(getMLText("add_event"),getMLText("error_occured")); } diff --git a/op/op.AddFile.php b/op/op.AddFile.php index 3eb2d566f..5f970afdd 100644 --- a/op/op.AddFile.php +++ b/op/op.AddFile.php @@ -123,9 +123,9 @@ for ($file_num=0;$file_num_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.AddSubFolder.php b/op/op.AddSubFolder.php index c7fe9f600..a98c9d7ac 100644 --- a/op/op.AddSubFolder.php +++ b/op/op.AddSubFolder.php @@ -139,9 +139,9 @@ if(!$subFolder = $controller->run()) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$subFolder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.Ajax.php b/op/op.Ajax.php index cb70295e9..03431a504 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -63,7 +63,8 @@ if (isset($_COOKIE["mydms_session"])) { $dms->setRootFolderID($user->getHomeFolder()); } - $notifier = new SeedDMS_NotificationService(); + global $logger; + $notifier = new SeedDMS_NotificationService($logger); if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) { if(method_exists($notificationObj, 'preAddService')) { @@ -473,9 +474,9 @@ switch($command) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$parent->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } header('Content-Type: application/json'); @@ -529,9 +530,9 @@ switch($command) { $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -721,45 +722,14 @@ switch($command) { if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'traditional_only_approval') { // add mandatory reviewers/approvers - $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); if($settings->_workflowMode == 'traditional') { - $res=$user->getMandatoryReviewers(); - foreach ($res as $r){ - - if ($r['reviewerUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['reviewerUserID']){ - $reviewers["i"][] = $r['reviewerUserID']; - break; - } - } - else if ($r['reviewerGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['reviewerGroupID']){ - $reviewers["g"][] = $r['reviewerGroupID']; - break; - } - } - } - } - $res=$user->getMandatoryApprovers(); - foreach ($res as $r){ - - if ($r['approverUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['approverUserID']){ - $approvers["i"][] = $r['approverUserID']; - break; - } - } - else if ($r['approverGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['approverGroupID']){ - $approvers["g"][] = $r['approverGroupID']; - break; - } - } + $mreviewers = getMandatoryReviewers($folder, $user); + if($mreviewers['i']) + $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); } + $mapprovers = getMandatoryApprovers($folder, $user); + if($mapprovers['i']) + $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); } elseif($settings->_workflowMode == 'advanced') { $workflow = $user->getMandatoryWorkflow(); @@ -830,11 +800,13 @@ switch($command) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } + /* Get workflow from controller in case it was modified in a hook */ + $workflow = $controller->getParam('workflow'); if($workflow && $settings->_enableNotificationWorkflow) { $subject = "request_workflow_action_email_subject"; $message = "request_workflow_action_email_body"; @@ -851,16 +823,21 @@ switch($command) { foreach($workflow->getNextTransitions($workflow->getInitState()) as $ntransition) { foreach($ntransition->getUsers() as $tuser) { - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } foreach($ntransition->getGroups() as $tuser) { - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } if($settings->_enableNotificationAppRev) { /* Reviewers and approvers will be informed about the new document */ + /* Get reviewers and approvers from controller in case it was + * modified in a hook + */ + $reviewers = $controller->getParam('reviewers'); + $approvers = $controller->getParam('approvers'); if($reviewers['i'] || $reviewers['g']) { $subject = "review_request_email_subject"; $message = "review_request_email_body"; @@ -875,10 +852,10 @@ switch($command) { $params['http_root'] = $settings->_httpRoot; foreach($reviewers['i'] as $reviewerid) { - $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } foreach($reviewers['g'] as $reviewergrpid) { - $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } @@ -896,10 +873,10 @@ switch($command) { $params['http_root'] = $settings->_httpRoot; foreach($approvers['i'] as $approverid) { - $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } foreach($approvers['g'] as $approvergrpid) { - $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } diff --git a/op/op.ApproveDocument.php b/op/op.ApproveDocument.php index 597573814..0eb9f08f4 100644 --- a/op/op.ApproveDocument.php +++ b/op/op.ApproveDocument.php @@ -113,15 +113,15 @@ if ($_POST["approvalType"] == "ind") { $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."¤ttab=revapp"; - $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); // Send notification to subscribers. $nl=$document->getNotifyList(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -151,15 +151,15 @@ else if ($_POST["approvalType"] == "grp") { $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."¤ttab=revapp"; - $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); // Send notification to subscribers. $nl=$document->getNotifyList(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -182,15 +182,16 @@ if ($_POST["approvalStatus"]==-1){ $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getOverallStatusText(S_REJECTED); + $params['new_status_code'] = S_REJECTED; $params['comment'] = $document->getComment(); $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -234,15 +235,16 @@ if ($_POST["approvalStatus"]==-1){ $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getOverallStatusText($newStatus); + $params['new_status_code'] = $newStatus; $params['comment'] = $document->getComment(); $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.AttributeMgr.php b/op/op.AttributeMgr.php index 918ae29d7..1f086163a 100644 --- a/op/op.AttributeMgr.php +++ b/op/op.AttributeMgr.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.Categories.php b/op/op.Categories.php index 794ffacb3..ce54a75e9 100644 --- a/op/op.Categories.php +++ b/op/op.Categories.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.ChangePassword.php b/op/op.ChangePassword.php index d481dd129..f2c9aa5ca 100644 --- a/op/op.ChangePassword.php +++ b/op/op.ChangePassword.php @@ -38,6 +38,11 @@ function _printMessage($heading, $message) { return; } +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('changepassword')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (isset($_POST["hash"])) { $hash = $_POST["hash"]; } diff --git a/op/op.CreateSubFolderIndex.php b/op/op.CreateSubFolderIndex.php index ec3d7fc6d..6d02e4778 100644 --- a/op/op.CreateSubFolderIndex.php +++ b/op/op.CreateSubFolderIndex.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.DefaultKeywords.php b/op/op.DefaultKeywords.php index e5370082b..c85271f94 100644 --- a/op/op.DefaultKeywords.php +++ b/op/op.DefaultKeywords.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.DocumentAccess.php b/op/op.DocumentAccess.php index 76b48018f..af69f0aa0 100644 --- a/op/op.DocumentAccess.php +++ b/op/op.DocumentAccess.php @@ -160,11 +160,11 @@ if ($action == "setowner") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $oldowner, $subject, $message, $params); +// $notifier->toIndividual($user, $oldowner, $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_setowner'))); } @@ -185,9 +185,9 @@ else if ($action == "notinherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -208,9 +208,9 @@ else if ($action == "inherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_inherit_access'))); @@ -230,9 +230,9 @@ else if ($action == "setdefault") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_set_default_access'))); diff --git a/op/op.DocumentNotify.php b/op/op.DocumentNotify.php index eb546a241..abcbf632e 100644 --- a/op/op.DocumentNotify.php +++ b/op/op.DocumentNotify.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Utils.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); @@ -112,10 +113,10 @@ if ($action == "delnotify"){ $params['http_root'] = $settings->_httpRoot; if ($userid > 0) { - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } else { - $notifier->toGroup($user, $obj, $subject, $message, $params); + $notifier->toGroup($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } break; @@ -154,7 +155,7 @@ else if ($action == "addnotify") { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } break; @@ -188,7 +189,7 @@ else if ($action == "addnotify") { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $obj, $subject, $message, $params); + $notifier->toGroup($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } break; } diff --git a/op/op.EditAttributes.php b/op/op.EditAttributes.php index cde0f86e4..95a5740b7 100644 --- a/op/op.EditAttributes.php +++ b/op/op.EditAttributes.php @@ -114,9 +114,9 @@ if($oldattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -142,9 +142,9 @@ if($newattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.EditComment.php b/op/op.EditComment.php index 7dec214f7..7da9cc26a 100644 --- a/op/op.EditComment.php +++ b/op/op.EditComment.php @@ -103,9 +103,9 @@ if (($oldcomment = $version->getComment()) != $comment) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."&version=".$version->getVersion(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.EditDocument.php b/op/op.EditDocument.php index 44e4556a1..538d3a050 100644 --- a/op/op.EditDocument.php +++ b/op/op.EditDocument.php @@ -32,6 +32,11 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('editdocument')) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_POST["documentid"]) || !is_numeric($_POST["documentid"]) || intval($_POST["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } @@ -162,11 +167,11 @@ if ($oldname != $name) { // if user is not owner send notification to owner if ($user->getID() != $document->getOwner()->getID() && false === SeedDMS_Core_DMS::inList($document->getOwner(), $notifyList['users'])) { - $notifyList['users'][] = $document->getOwner(); + $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -191,11 +196,11 @@ if ($oldcomment != $comment) { // if user is not owner send notification to owner if ($user->getID() != $document->getOwner()->getID() && false === SeedDMS_Core_DMS::inList($document->getOwner(), $notifyList['users'])) { - $notifyList['users'][] = $document->getOwner(); + $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -218,11 +223,11 @@ if ($expires != $oldexpires) { // if user is not owner send notification to owner if ($user->getID() != $document->getOwner()->getID() && false === SeedDMS_Core_DMS::inList($document->getOwner(), $notifyList['users'])) { - $notifyList['users'][] = $document->getOwner(); + $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -249,9 +254,9 @@ if($oldattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -276,9 +281,9 @@ if($newattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.EditFolder.php b/op/op.EditFolder.php index ea2c61510..485069bb8 100644 --- a/op/op.EditFolder.php +++ b/op/op.EditFolder.php @@ -32,6 +32,11 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('editfolder')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_POST["folderid"]) || !is_numeric($_POST["folderid"]) || intval($_POST["folderid"])<1) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } @@ -107,13 +112,13 @@ if($oldname != $name) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $folder->getOwner()->getID()) -// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } @@ -133,13 +138,13 @@ if($oldcomment != $comment) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $folder->getOwner()->getID()) -// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } @@ -163,9 +168,9 @@ if($oldattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -190,9 +195,9 @@ if($newattributes) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.EditOnline.php b/op/op.EditOnline.php index c0dc2d401..2ad2327b4 100644 --- a/op/op.EditOnline.php +++ b/op/op.EditOnline.php @@ -78,9 +78,9 @@ if($lc->getChecksum() == SeedDMS_Core_File::checksum($tmpfname)) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } echo json_encode(array('success'=>true, 'message'=>getMLText('splash_saved_file'))); diff --git a/op/op.EditUserData.php b/op/op.EditUserData.php index 08385c97b..e72028156 100644 --- a/op/op.EditUserData.php +++ b/op/op.EditUserData.php @@ -37,6 +37,11 @@ if (!$user->isAdmin() && ($settings->_disableSelfEdit)) { UI::exitError(getMLText("edit_user_details"),getMLText("access_denied")); } +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('edituserdata')) { + UI::exitError(getMLText("edit_user_details"),getMLText("invalid_request_token")); +} + $fullname = $_POST["fullname"]; $email = $_POST["email"]; $comment = $_POST["comment"]; diff --git a/op/op.ExtensionMgr.php b/op/op.ExtensionMgr.php index 706764640..0ef4dd3f0 100644 --- a/op/op.ExtensionMgr.php +++ b/op/op.ExtensionMgr.php @@ -17,9 +17,9 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); -include("../inc/inc.LogInit.php"); include("../inc/inc.DBInit.php"); include("../inc/inc.Extension.php"); include("../inc/inc.ClassUI.php"); @@ -43,8 +43,8 @@ else $action=NULL; if (isset($_POST["currenttab"])) $currenttab=$_POST["currenttab"]; else $currenttab=NULL; -// add new attribute definition --------------------------------------------- -if ($action == "download") { +// Download extension ------------------------------------------------------- +if ($action == "download") { /* {{{ */ if (!isset($_POST["extname"])) { UI::exitError(getMLText("admin_tools"),getMLText("unknown_id")); } @@ -128,9 +128,10 @@ elseif ($action == "getlist") { /* {{{ */ } add_log_line(); header("Location:../out/out.ExtensionMgr.php?currenttab=".$currenttab); -} elseif ($action == "toggle") { /* {{{ */ +} /* }}} */ +elseif ($action == "toggle") { /* {{{ */ if (!isset($_POST["extname"])) { - echo json_encode(array('success'=>false, 'msg'=>'Could not toggle extension')); + echo json_encode(array('success'=>false, 'msg'=>getMLText('extension_missing_name'))); } $extname = trim($_POST["extname"]); if (!file_exists($settings->_rootDir.'/ext/'.$extname) ) { @@ -139,9 +140,21 @@ elseif ($action == "getlist") { /* {{{ */ $controller->setParam('extmgr', $extMgr); $controller->setParam('extname', $extname); if (!$controller($_POST)) { - echo json_encode(array('success'=>false, 'msg'=>'Could not toggle extension')); + echo json_encode(array('success'=>false, 'msg'=>getMLText('extinsion_toggle_error'))); } else { - echo json_encode(array('success'=>true, 'msg'=>'Operation succeded')); + if($settings->extensionIsDisabled($extname)) + echo json_encode(array('success'=>true, 'msg'=>getMLText('extension_is_off_now'))); + else { + $ret = $extMgr->migrate($extname, $settings, $dms); + if($ret !== null) { + if($ret === true) + echo json_encode(array('success'=>true, 'msg'=>getMLText('extension_migration_success'))); + else + echo json_encode(array('success'=>true, 'msg'=>getMLText('extension_migration_error'))); + } else { + echo json_encode(array('success'=>true, 'msg'=>getMLText('extension_is_on_now'))); + } + } } add_log_line(); } /* }}} */ diff --git a/op/op.FolderAccess.php b/op/op.FolderAccess.php index 6ee5d3e8c..00bb30468 100644 --- a/op/op.FolderAccess.php +++ b/op/op.FolderAccess.php @@ -140,9 +140,9 @@ if ($action == "setowner") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_setowner'))); @@ -171,9 +171,9 @@ else if ($action == "notinherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_notinherit_access'))); } @@ -194,9 +194,9 @@ else if ($action == "notinherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -233,9 +233,9 @@ else if ($action == "inherit") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_inherit_access'))); @@ -260,9 +260,9 @@ else if ($action == "setdefault") { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_set_default_access'))); diff --git a/op/op.FolderNotify.php b/op/op.FolderNotify.php index aa9f235b5..f2dbca2ce 100644 --- a/op/op.FolderNotify.php +++ b/op/op.FolderNotify.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Utils.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); @@ -107,10 +108,10 @@ if ($action == "delnotify") { $params['http_root'] = $settings->_httpRoot; if ($userid > 0) { - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } else { - $notifier->toGroup($user, $obj, $subject, $message, $params); + $notifier->toGroup($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } break; @@ -149,7 +150,7 @@ else if ($action == "addnotify") { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } break; @@ -184,7 +185,7 @@ else if ($action == "addnotify") { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $obj, $subject, $message, $params); + $notifier->toGroup($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } break; } diff --git a/op/op.Logout.php b/op/op.Logout.php index e4075cf62..58d446500 100644 --- a/op/op.Logout.php +++ b/op/op.Logout.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Utils.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.ManageNotify.php b/op/op.ManageNotify.php index 738b67530..0dc92afdf 100644 --- a/op/op.ManageNotify.php +++ b/op/op.ManageNotify.php @@ -18,6 +18,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); include("../inc/inc.Language.php"); @@ -29,7 +30,7 @@ if ($user->isGuest()) { UI::exitError(getMLText("my_account"),getMLText("access_denied")); } -function add_folder_notify($folder,$userid,$recursefolder,$recursedoc) { +function add_folder_notify($folder,$userid,$recursefolder,$recursedoc) { /* {{{ */ global $dms; $folder->addNotify($userid, true); @@ -55,7 +56,7 @@ function add_folder_notify($folder,$userid,$recursefolder,$recursedoc) { foreach($subFolders as $subFolder) add_folder_notify($subFolder,$userid,$recursefolder,$recursedoc); } -} +} /* }}} */ if (!isset($_GET["type"])) UI::exitError(getMLText("my_account"),getMLText("error_occured")); if (!isset($_GET["action"])) UI::exitError(getMLText("my_account"),getMLText("error_occured")); @@ -123,7 +124,7 @@ if ($_GET["type"]=="document"){ $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $obj, $subject, $message, $params); + $notifier->toIndividual($user, $obj, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.MoveClipboard.php b/op/op.MoveClipboard.php index d675e5c6a..2e77ffca4 100644 --- a/op/op.MoveClipboard.php +++ b/op/op.MoveClipboard.php @@ -73,13 +73,13 @@ foreach($clipboard['docs'] as $documentid) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $document->getOwner()->getID()) -// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } $session->removeFromClipboard($document); @@ -120,13 +120,13 @@ foreach($clipboard['folders'] as $folderid) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $folder->getOwner()->getID()) -// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } $session->removeFromClipboard($folder); diff --git a/op/op.MoveDocument.php b/op/op.MoveDocument.php index 54a93683f..56c7a2515 100644 --- a/op/op.MoveDocument.php +++ b/op/op.MoveDocument.php @@ -20,6 +20,7 @@ include("../inc/inc.Settings.php"); include("../inc/inc.LogInit.php"); +include("../inc/inc.Utils.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); @@ -27,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('movedocument', 'GET')) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } @@ -62,46 +68,48 @@ if($document->isLocked()) { } } +if ($targetid == $oldFolder->getID()) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("target_equals_source_folder")); +} + /* Check if name already exists in the folder */ if(!$settings->_enableDuplicateDocNames) { if($targetFolder->hasDocumentByName($document->getName())) { - UI::exitError(getMLText("folder_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("document_duplicate_name")); + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("document_duplicate_name")); } } -if ($targetid != $oldFolder->getID()) { - if ($document->setFolder($targetFolder)) { - // Send notification to subscribers. - if($notifier) { - $nl1 = $oldFolder->getNotifyList(); - $nl2 = $document->getNotifyList(); - $nl3 = $targetFolder->getNotifyList(); - $nl = array( - 'users'=>array_unique(array_merge($nl1['users'], $nl2['users'], $nl3['users']), SORT_REGULAR), - 'groups'=>array_unique(array_merge($nl1['groups'], $nl2['groups'], $nl3['groups']), SORT_REGULAR) - ); - $subject = "document_moved_email_subject"; - $message = "document_moved_email_body"; - $params = array(); - $params['name'] = $document->getName(); - $params['old_folder_path'] = $oldFolder->getFolderPathPlain(); - $params['new_folder_path'] = $targetFolder->getFolderPathPlain(); - $params['username'] = $user->getFullName(); - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $params['sitename'] = $settings->_siteName; - $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); - foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); - } - // if user is not owner send notification to owner -// if ($user->getID() != $document->getOwner()->getID()) -// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params); +if ($document->setFolder($targetFolder)) { + // Send notification to subscribers. + if($notifier) { + $nl1 = $oldFolder->getNotifyList(); + $nl2 = $document->getNotifyList(); + $nl3 = $targetFolder->getNotifyList(); + $nl = array( + 'users'=>array_unique(array_merge($nl1['users'], $nl2['users'], $nl3['users']), SORT_REGULAR), + 'groups'=>array_unique(array_merge($nl1['groups'], $nl2['groups'], $nl3['groups']), SORT_REGULAR) + ); + $subject = "document_moved_email_subject"; + $message = "document_moved_email_body"; + $params = array(); + $params['name'] = $document->getName(); + $params['old_folder_path'] = $oldFolder->getFolderPathPlain(); + $params['new_folder_path'] = $targetFolder->getFolderPathPlain(); + $params['username'] = $user->getFullName(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['sitename'] = $settings->_siteName; + $params['http_root'] = $settings->_httpRoot; + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); + foreach ($nl["groups"] as $grp) { + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } - - } else { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); + // if user is not owner send notification to owner +// if ($user->getID() != $document->getOwner()->getID()) +// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } + +} else { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); } add_log_line(); diff --git a/op/op.MoveFolder.php b/op/op.MoveFolder.php index 84090c704..dbdad0f88 100644 --- a/op/op.MoveFolder.php +++ b/op/op.MoveFolder.php @@ -20,6 +20,7 @@ include("../inc/inc.Settings.php"); include("../inc/inc.LogInit.php"); +include("../inc/inc.Utils.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); @@ -27,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('movefolder', 'GET')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } @@ -52,6 +58,11 @@ if (!is_object($targetFolder)) { UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); } +$oldFolder = $folder->getParent(); +if ($targetid == $oldFolder->getID()) { + UI::exitError(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))),getMLText("target_equals_source_folder")); +} + if($folder->isSubFolder($targetFolder)) { UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("invalid_target_folder")); } @@ -67,7 +78,6 @@ if(!$settings->_enableDuplicateSubFolderNames) { } } -$oldFolder = $folder->getParent(); if ($folder->setParent($targetFolder)) { // Send notification to subscribers. if($notifier) { @@ -88,13 +98,13 @@ if ($folder->setParent($targetFolder)) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner //if ($user->getID() != $folder->getOwner()->getID()) - // $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params); + // $notifier->toIndividual($user, $folder->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } else { diff --git a/op/op.OverrideContentStatus.php b/op/op.OverrideContentStatus.php index 6f8dba701..58d0e7f9b 100644 --- a/op/op.OverrideContentStatus.php +++ b/op/op.OverrideContentStatus.php @@ -28,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('overridecontentstatus')) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_POST["documentid"]) || !is_numeric($_POST["documentid"]) || intval($_POST["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } @@ -83,16 +88,18 @@ if ($overrideStatus != $overallStatus["status"]) { $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getOverallStatusText($overrideStatus); + $params['new_status_code'] = $overrideStatus; + $params['old_status_code'] = $overallStatus["status"]; $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); +// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } } diff --git a/op/op.RemoveDocument.php b/op/op.RemoveDocument.php index 24fd3c614..9d554b335 100644 --- a/op/op.RemoveDocument.php +++ b/op/op.RemoveDocument.php @@ -98,9 +98,9 @@ if ($notifier){ $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.RemoveDocumentFile.php b/op/op.RemoveDocumentFile.php index 70dd02765..dbda46a6d 100644 --- a/op/op.RemoveDocumentFile.php +++ b/op/op.RemoveDocumentFile.php @@ -78,9 +78,9 @@ if (!$document->removeDocumentFile($fileid)) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.RemoveFolder.php b/op/op.RemoveFolder.php index 53c630b03..0d0c948e3 100644 --- a/op/op.RemoveFolder.php +++ b/op/op.RemoveFolder.php @@ -94,9 +94,9 @@ if ($notifier) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$parent->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.RemoveVersion.php b/op/op.RemoveVersion.php index 8f7eede93..764d44827 100644 --- a/op/op.RemoveVersion.php +++ b/op/op.RemoveVersion.php @@ -92,9 +92,9 @@ if (count($document->getContent())==1) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } @@ -103,25 +103,27 @@ else { /* Before deleting the content get a list of all users that should * be informed about the removal. */ - $emailUserList = array(); - $emailUserList[] = $version->getUser()->getID(); - $emailGroupList = array(); + $emailUserListR = array(); + $emailUserListA = array(); + $oldowner = $version->getUser(); + $emailGroupListR = array(); + $emailGroupListA = array(); $status = $version->getReviewStatus(); foreach ($status as $st) { if ($st["status"]==0 && !in_array($st["required"], $emailUserList)) { if($st['type'] == 0) - $emailUserList[] = $st["required"]; + $emailUserListR[] = $st["required"]; else - $emailGroupList[] = $st["required"]; + $emailGroupListR[] = $st["required"]; } } $status = $version->getApprovalStatus(); foreach ($status as $st) { if ($st["status"]==0 && !in_array($st["required"], $emailUserList)) { if($st['type'] == 0) - $emailUserList[] = $st["required"]; + $emailUserListA[] = $st["required"]; else - $emailGroupList[] = $st["required"]; + $emailGroupListA[] = $st["required"]; } } @@ -152,15 +154,25 @@ else { // Notify affected users. if ($notifier){ $nl=$document->getNotifyList(); - $userrecipients = array(); - foreach ($emailUserList as $eID) { + $userrecipientsR = array(); + foreach ($emailUserListR as $eID) { $eU = $version->getDMS()->getUser($eID); - $userrecipients[] = $eU; + $userrecipientsR[] = $eU; } - $grouprecipients = array(); - foreach ($emailGroupList as $eID) { + $grouprecipientsR = array(); + foreach ($emailGroupListR as $eID) { $eU = $version->getDMS()->getGroup($eID); - $grouprecipients[] = $eU; + $grouprecipientsR[] = $eU; + } + $userrecipientsA = array(); + foreach ($emailUserListA as $eID) { + $eU = $version->getDMS()->getUser($eID); + $userrecipientsA[] = $eU; + } + $grouprecipientsA = array(); + foreach ($emailGroupListA as $eID) { + $eU = $version->getDMS()->getGroup($eID); + $grouprecipientsA[] = $eU; } $subject = "version_deleted_email_subject"; @@ -173,13 +185,19 @@ else { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $userrecipients, $subject, $message, $params); - $notifier->toList($user, $nl["users"], $subject, $message, $params); - foreach($grouprecipients as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + if($user->getId() != $oldowner->getId()) + $notifier->toIndividual($user, $oldowner, $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); + $notifier->toList($user, $userrecipientsR, $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); + $notifier->toList($user, $userrecipientsA, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); + foreach($grouprecipientsR as $grp) { + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); + } + foreach($grouprecipientsA as $grp) { + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.RemoveWorkflowFromDocument.php b/op/op.RemoveWorkflowFromDocument.php index 64a64eda5..ce83d2dd2 100644 --- a/op/op.RemoveWorkflowFromDocument.php +++ b/op/op.RemoveWorkflowFromDocument.php @@ -86,9 +86,9 @@ if($version->removeWorkflow($user)) { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.ReturnFromSubWorkflow.php b/op/op.ReturnFromSubWorkflow.php index 0fb7d377d..dfcd2a221 100644 --- a/op/op.ReturnFromSubWorkflow.php +++ b/op/op.ReturnFromSubWorkflow.php @@ -100,9 +100,9 @@ if($version->returnFromSubWorkflow($user, $transition, $_POST["comment"])) { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.ReviewDocument.php b/op/op.ReviewDocument.php index d41f07a39..dcd734ff4 100644 --- a/op/op.ReviewDocument.php +++ b/op/op.ReviewDocument.php @@ -111,14 +111,14 @@ if ($_POST["reviewType"] == "ind") { $params['status'] = getReviewStatusText($_POST["reviewStatus"]); $params['comment'] = $comment; $params['username'] = $user->getFullName(); - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."¤ttab=revapp"; $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); +// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } } @@ -149,11 +149,11 @@ else if ($_POST["reviewType"] == "grp") { $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); +// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } } @@ -176,14 +176,16 @@ if ($_POST["reviewStatus"]==-1){ $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getReviewStatusText(S_REJECTED); + $params['new_status_code'] = S_REJECTED; $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } -// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params); +// $notifier->toIndividual($user, $content->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } } @@ -240,12 +242,13 @@ if ($_POST["reviewStatus"]==-1){ $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['status'] = getReviewStatusText($newStatus); + $params['new_status_code'] = $newStatus; $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } @@ -265,18 +268,18 @@ if ($_POST["reviewStatus"]==-1){ $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."¤ttab=revapp"; foreach ($docApprovalStatus as $dastat) { if ($dastat["status"] == 0) { if ($dastat["type"] == 0) { $approver = $dms->getUser($dastat["required"]); - $notifier->toIndividual($document->getOwner(), $approver, $subject, $message, $params); + $notifier->toIndividual($document->getOwner(), $approver, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } elseif ($dastat["type"] == 1) { $group = $dms->getGroup($dastat["required"]); - $notifier->toGroup($document->getOwner(), $group, $subject, $message, $params); + $notifier->toGroup($document->getOwner(), $group, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } diff --git a/op/op.RewindWorkflow.php b/op/op.RewindWorkflow.php index 6b1648a89..d67cdc8f7 100644 --- a/op/op.RewindWorkflow.php +++ b/op/op.RewindWorkflow.php @@ -85,9 +85,9 @@ if($version->rewindWorkflow()) { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.RunSubWorkflow.php b/op/op.RunSubWorkflow.php index 9775a5677..69c49456c 100644 --- a/op/op.RunSubWorkflow.php +++ b/op/op.RunSubWorkflow.php @@ -94,9 +94,9 @@ if($version->runSubWorkflow($subworkflow)) { $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } diff --git a/op/op.SetExpires.php b/op/op.SetExpires.php index 8dc626487..5efd3eee6 100644 --- a/op/op.SetExpires.php +++ b/op/op.SetExpires.php @@ -28,6 +28,11 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('setexpires')) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (!isset($_POST["documentid"]) || !is_numeric($_POST["documentid"]) || intval($_POST["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } diff --git a/op/op.SetReviewersApprovers.php b/op/op.SetReviewersApprovers.php index 353452b52..1abc8ed3d 100644 --- a/op/op.SetReviewersApprovers.php +++ b/op/op.SetReviewersApprovers.php @@ -144,7 +144,7 @@ foreach ($pIndRev as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$p]], $subject, $message, $params); + $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$p]], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } break; @@ -210,7 +210,7 @@ if (count($reviewIndex["i"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$rx]], $subject, $message, $params); + $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$rx]], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } break; @@ -256,7 +256,7 @@ foreach ($pGrpRev as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$p]], $subject, $message, $params); + $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$p]], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } break; @@ -314,7 +314,7 @@ if (count($reviewIndex["g"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$rx]], $subject, $message, $params); + $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$rx]], $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } break; @@ -376,7 +376,7 @@ foreach ($pIndApp as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$p]], $subject, $message, $params); + $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$p]], $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } break; @@ -434,7 +434,7 @@ if (count($approvalIndex["i"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$rx]], $subject, $message, $params); + $notifier->toIndividual($user, $docAccess["users"][$accessIndex["i"][$rx]], $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } break; @@ -480,7 +480,7 @@ foreach ($pGrpApp as $p) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$p]], $subject, $message, $params); + $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$p]], $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } break; @@ -538,7 +538,7 @@ if (count($approvalIndex["g"]) > 0) { $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$rx]], $subject, $message, $params); + $notifier->toGroup($user, $docAccess["groups"][$accessIndex["g"][$rx]], $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } break; diff --git a/op/op.SetWorkflow.php b/op/op.SetWorkflow.php index 006767a90..b679ab885 100644 --- a/op/op.SetWorkflow.php +++ b/op/op.SetWorkflow.php @@ -91,10 +91,10 @@ if ($notifier) { foreach($workflow->getNextTransitions($workflow->getInitState()) as $ntransition) { foreach($ntransition->getUsers() as $tuser) { - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } foreach($ntransition->getGroups() as $tuser) { - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } diff --git a/op/op.Settings.php b/op/op.Settings.php index 8b3772e19..ca550b1e0 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -44,6 +44,11 @@ if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('savesettings')) { + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + if (isset($_POST["action"])) $action=$_POST["action"]; else if (isset($_GET["action"])) $action=$_GET["action"]; else $action=NULL; diff --git a/op/op.TransferDocument.php b/op/op.TransferDocument.php index 9072c1f9f..69056506a 100644 --- a/op/op.TransferDocument.php +++ b/op/op.TransferDocument.php @@ -30,9 +30,9 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); - -if (!$user->isAdmin()) { - UI::exitError(getMLText("document"),getMLText("access_denied")); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access($controller, $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => "")),getMLText("access_denied")); } /* Check if the form data comes from a trusted request */ @@ -81,9 +81,9 @@ if ($notifier){ $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } diff --git a/op/op.TriggerWorkflow.php b/op/op.TriggerWorkflow.php index f2701d004..6d4b9dac1 100644 --- a/op/op.TriggerWorkflow.php +++ b/op/op.TriggerWorkflow.php @@ -97,9 +97,9 @@ if($version->triggerWorkflowTransition($user, $transition, $_POST["comment"])) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message, $params); + $notifier->toList($user, $nl["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } if($settings->_enableNotificationWorkflow) { @@ -122,13 +122,13 @@ if($version->triggerWorkflowTransition($user, $transition, $_POST["comment"])) { foreach($ntransition->getUsers() as $tuser) { if(!in_array($tuser->getUser()->getID(), $usersinformed)) { $usersinformed[] = $tuser->getUser()->getID(); - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WO▨KFLOW); } } foreach($ntransition->getGroups() as $tuser) { if(!in_array($tuser->getGroup()->getID(), $groupsinformed)) { $groupsinformed[] = $tuser->getGroup()->getID(); - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php index ea2751fef..331c801e4 100644 --- a/op/op.UpdateDocument.php +++ b/op/op.UpdateDocument.php @@ -210,45 +210,14 @@ default: } // add mandatory reviewers/approvers - $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); if($settings->_workflowMode == 'traditional') { - $res=$user->getMandatoryReviewers(); - foreach ($res as $r){ - - if ($r['reviewerUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['reviewerUserID']){ - $reviewers["i"][] = $r['reviewerUserID']; - break; - } - } - else if ($r['reviewerGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['reviewerGroupID']){ - $reviewers["g"][] = $r['reviewerGroupID']; - break; - } - } - } - } - $res=$user->getMandatoryApprovers(); - foreach ($res as $r){ - - if ($r['approverUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['approverUserID']){ - $approvers["i"][] = $r['approverUserID']; - break; - } - } - else if ($r['approverGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['approverGroupID']){ - $approvers["g"][] = $r['approverGroupID']; - break; - } - } + $mreviewers = getMandatoryReviewers($folder, $user); + if($mreviewers['i']) + $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); } + $mapprovers = getMandatoryApprovers($folder, $user); + if($mapprovers['i']) + $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); } elseif($settings->_workflowMode == 'advanced') { if(!$workflows = $user->getMandatoryWorkflows()) { if(isset($_POST["workflow"])) @@ -322,14 +291,16 @@ default: $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } // if user is not owner send notification to owner // if ($user->getID() != $document->getOwner()->getID()) -// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params); +// $notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); + /* Get workflow from controller in case it was modified in a hook */ + $workflow = $controller->getParam('workflow'); if($workflow && $settings->_enableNotificationWorkflow) { $subject = "request_workflow_action_email_subject"; $message = "request_workflow_action_email_body"; @@ -346,16 +317,21 @@ default: foreach($workflow->getNextTransitions($workflow->getInitState()) as $ntransition) { foreach($ntransition->getUsers() as $tuser) { - $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } foreach($ntransition->getGroups() as $tuser) { - $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params, SeedDMS_NotificationService::RECV_WORKFLOW); } } } if($settings->_enableNotificationAppRev) { /* Reviewers and approvers will be informed about the new document */ + /* Get reviewers and approvers from controller in case it was + * modified in a hook + */ + $reviewers = $controller->getParam('reviewers'); + $approvers = $controller->getParam('approvers'); if($reviewers['i'] || $reviewers['g']) { $subject = "review_request_email_subject"; $message = "review_request_email_body"; @@ -370,10 +346,10 @@ default: $params['http_root'] = $settings->_httpRoot; foreach($reviewers['i'] as $reviewerid) { - $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } foreach($reviewers['g'] as $reviewergrpid) { - $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_REVIEWER); } } @@ -391,10 +367,10 @@ default: $params['http_root'] = $settings->_httpRoot; foreach($approvers['i'] as $approverid) { - $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params); + $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } foreach($approvers['g'] as $approvergrpid) { - $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params); + $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params, SeedDMS_NotificationService::RECV_APPROVER); } } } @@ -410,9 +386,9 @@ default: $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + $notifier->toList($user, $notifyList["users"], $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); + $notifier->toGroup($user, $grp, $subject, $message, $params, SeedDMS_NotificationService::RECV_NOTIFICATION); } } } diff --git a/op/op.UserDefaultKeywords.php b/op/op.UserDefaultKeywords.php index 5fe1c1465..93d03b845 100644 --- a/op/op.UserDefaultKeywords.php +++ b/op/op.UserDefaultKeywords.php @@ -19,6 +19,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. include("../inc/inc.Settings.php"); +include("../inc/inc.LogInit.php"); include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); diff --git a/op/op.UsrMgr.php b/op/op.UsrMgr.php index fe9f9035b..f0f919cd9 100644 --- a/op/op.UsrMgr.php +++ b/op/op.UsrMgr.php @@ -296,7 +296,7 @@ else if ($action == "sendlogindata" && $settings->_enableEmail) { $params['url'] = getBaseUrl().$settings->_httpRoot."out/out.ViewFolder.php"; $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toIndividual($user, $newuser, $subject, $message, $params); + $notifier->toIndividual($user, $newuser, $subject, $message, $params, SeedDMS_NotificationService::RECV_OWNER); } add_log_line(".php&action=sendlogindata&userid=".$userid); diff --git a/out/out.ApproveDocument.php b/out/out.ApproveDocument.php index aa4670b6e..0b44248e1 100644 --- a/out/out.ApproveDocument.php +++ b/out/out.ApproveDocument.php @@ -70,7 +70,7 @@ if (!$accessop->mayApprove()){ UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } -$approvals = $latestContent->getApprovalStatus(); +$approvals = $content->getApprovalStatus(); if(!$approvals) { UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("no_action")); } @@ -80,6 +80,8 @@ $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); if($view) { $view->setParam('folder', $folder); $view->setParam('document', $document); + $view->setParam('version', $content); + $view->setParam('approveid', (int) $_GET['approveid']); $view->setParam('accessobject', $accessop); $view($_GET); exit; diff --git a/out/out.ImportUsers.php b/out/out.ImportUsers.php index 4443ba892..1abf2d1b9 100644 --- a/out/out.ImportUsers.php +++ b/out/out.ImportUsers.php @@ -34,7 +34,11 @@ if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } +/* Also have a look at op/op.ImportUsers.php which calls the view as well. */ if($view) { + $view->setParam('log', array()); + $view->setParam('newusers', array()); + $view->setParam('colmap', array()); $view($_GET); exit; } diff --git a/out/out.ManageNotify.php b/out/out.ManageNotify.php index 4ffc38452..5678023ba 100644 --- a/out/out.ManageNotify.php +++ b/out/out.ManageNotify.php @@ -35,6 +35,9 @@ if ($user->isGuest()) { } if($view) { + $view->setParam('showtree', showtree()); + $view->setParam('enableRecursiveCount', $settings->_enableRecursiveCount); + $view->setParam('maxRecursiveCount', $settings->_maxRecursiveCount); $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); $view->setParam('timeout', $settings->_cmdTimeout); diff --git a/out/out.Search.php b/out/out.Search.php index 75d70ff68..d34d3b572 100644 --- a/out/out.Search.php +++ b/out/out.Search.php @@ -359,6 +359,29 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext UI::exitError(getMLText("search"),getMLText("invalid_create_date_end")); } + $statusstartdate = array(); + $statusstopdate = array(); + if (isset($_GET["statusdate"]) && $_GET["statusdate"]!=null) { + $statusdate = true; + } else { + $statusdate = false; + } + + if(isset($_GET["statusstart"])) { + $tmp = explode("-", $_GET["statusstart"]); + $statusstartdate = array('year'=>(int)$tmp[0], 'month'=>(int)$tmp[1], 'day'=>(int)$tmp[2], 'hour'=>0, 'minute'=>0, 'second'=>0); + } + if ($statusstartdate && !checkdate($statusstartdate['month'], $startdate['day'], $startdate['year'])) { + UI::exitError(getMLText("search"),getMLText("invalid_status_date_end")); + } + if(isset($_GET["statusend"])) { + $tmp = explode("-", $_GET["statusend"]); + $statusstopdate = array('year'=>(int)$tmp[0], 'month'=>(int)$tmp[1], 'day'=>(int)$tmp[2], 'hour'=>23, 'minute'=>59, 'second'=>59); + } + if ($statusstopdate && !checkdate($statusstopdate['month'], $stopdate['day'], $stopdate['year'])) { + UI::exitError(getMLText("search"),getMLText("invalid_status_date_end")); + } + $expstartdate = array(); $expstopdate = array(); if (isset($_GET["expirationdate"]) && $_GET["expirationdate"]!=null) { @@ -443,6 +466,22 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext else $attributes = array(); + foreach($attributes as $attrdefid=>$attribute) { + $attrdef = $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)); + } + } + } + } + // // Get the page number to display. If the result set contains more than // 25 entries, it is displayed across multiple pages. @@ -483,6 +522,8 @@ if(((!isset($_GET["fullsearch"]) && $settings->_defaultSearchMethod == 'fulltext 'mode'=>$resultmode, 'expirationstartdate'=>$expirationdate ? $expstartdate : array(), 'expirationenddate'=>$expirationdate ? $expstopdate : array(), + 'statusstartdate'=>$statusdate ? $statusstartdate : array(), + 'statusenddate'=>$statusdate ? $statusstopdate : array(), 'orderby'=>$orderby )); $total = $resArr['totalDocs'] + $resArr['totalFolders']; @@ -556,8 +597,11 @@ if($settings->_showSingleSearchHit && count($entries) == 1) { $view->setParam('stopdate', isset($stopdate) ? $stopdate : array()); $view->setParam('expstartdate', isset($expstartdate) ? $expstartdate : array()); $view->setParam('expstopdate', isset($expstopdate) ? $expstopdate : array()); + $view->setParam('statusstartdate', isset($statusstartdate) ? $statusstartdate : array()); + $view->setParam('statusstopdate', isset($statusstopdate) ? $statusstopdate : array()); $view->setParam('creationdate', isset($creationdate) ? $creationdate : ''); $view->setParam('expirationdate', isset($expirationdate) ? $expirationdate: ''); + $view->setParam('statusdate', isset($statusdate) ? $statusdate: ''); $view->setParam('status', isset($status) ? $status : array()); $view->setParam('categories', isset($categories) ? $categories : ''); $view->setParam('category', isset($categorynames) ? $categorynames : ''); diff --git a/out/out.Settings.php b/out/out.Settings.php index bd9e6087b..bf9f31076 100644 --- a/out/out.Settings.php +++ b/out/out.Settings.php @@ -33,10 +33,6 @@ if (!$user->isAdmin()) { UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } -/* Set an encryption key if is not set */ -if(!trim($settings->_encryptionKey)) - $settings->_encryptionKey = md5(uniqid()); - $users = $dms->getAllUsers($settings->_sortUsersInList); $groups = $dms->getAllGroups(); diff --git a/styles/bootstrap/application.css b/styles/bootstrap/application.css index 0b8ffc87f..2d739031c 100644 --- a/styles/bootstrap/application.css +++ b/styles/bootstrap/application.css @@ -215,6 +215,77 @@ ul.jqtree-tree li.jqtree_common > .jqtree-element:hover { background-color: #E0E0E0; } +span.datepicker { + padding: 0px; +} +/* Sidenav for Docs + * -------------------------------------------------- */ + +.bs-docs-sidenav { + width: 100%; + margin: 0px 0 30px 0; + padding: 0; + background-color: #fff; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065); + -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065); + box-shadow: 0 1px 4px rgba(0,0,0,.065); +} +.bs-docs-sidenav > li > a { + display: block; + width: 190px \9; + margin: 0 0 -1px; + padding: 8px 14px; + border: 1px solid #e5e5e5; +} +.bs-docs-sidenav > li:first-child > a { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} +.bs-docs-sidenav > li:last-child > a { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} +.bs-docs-sidenav > .active > a { + position: relative; + z-index: 2; + padding: 9px 15px; + border: 0; + text-shadow: 0 1px 0 rgba(0,0,0,.15); + -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); + -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); + box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); +} +/* Chevrons */ +.bs-docs-sidenav .badge-right { + float: right; + margin-top: 2px; + margin-right: -6px; +} +.bs-docs-sidenav > li > a:hover { + background-color: #f5f5f5; +} +.bs-docs-sidenav a:hover .icon-chevron-right { + opacity: .5; +} +.bs-docs-sidenav .active .icon-chevron-right, +.bs-docs-sidenav .active a:hover .icon-chevron-right { + background-image: url(../img/glyphicons-halflings-white.png); + opacity: 1; +} +.bs-docs-sidenav.affix { + top: 100px; +} +.bs-docs-sidenav.affix-bottom { + position: absolute; + top: auto; + bottom: 270px; +} + i.success {color: #00b000;} i.enabled {color: #00b000;} i.error {color: #b00000;} diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index b6e349dbf..1528e629e 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -130,10 +130,22 @@ $(document).ready( function() { /* updater is called when the item in the list is clicked. It is * actually provided to update the input field, but here we use * it to set the document location. The passed value is the string - * set in data-value of the list items. */ + * set in data-value of the list items. + * This method relies on some changes in bootstrap-typeahead.js + * Originally, update was passed only the data-value of the li item + * which is set in the render fuction below, + * but the modified version passes all data fields. which also + * contain the 'id' and 'type' (also set in render function). + **/ updater: function (item) { - document.location = "../out/out.Search.php?query=" + encodeURIComponent(item); - return item; + if(item.id) { + if(item.type == 'D') + document.location = "../out/out.ViewDocument.php?documentid=" + item.id; + else + document.location = "../out/out.ViewFolder.php?folderid=" + item.id; + } else + document.location = "../out/out.Search.php?query=" + encodeURIComponent(item.value); + return item.value; }, sorter: function(items) { return items; @@ -144,6 +156,10 @@ $(document).ready( function() { matcher : function (item) { return true; }, + /* highlighter is for modifying the 'a' tag text. It places an icon + * in front of the name and replaces a '<' within the name with an + * entity. + **/ highlighter : function (item) { if(item.type.charAt(0) == 'D') return ' ' + item.name.replace(/' + editBtnLabel + '')); if(callback) { @@ -721,7 +751,7 @@ function onAddClipboard(ev) { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } } @@ -806,7 +836,7 @@ function onAddClipboard(ev) { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 5000, + timeout: 5000 }); } } @@ -831,7 +861,7 @@ function onAddClipboard(ev) { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 5000, + timeout: 5000 }); } } @@ -841,19 +871,19 @@ function onAddClipboard(ev) { /* {{{ */ }( window.SeedDMSUpload = window.SeedDMSUpload || {}, jQuery )); /* }}} */ $(document).ready(function() { /* {{{ */ - $(document).on('dragenter', "#dragandrophandler", function (e) { + $(document).on('dragenter', "#draganddrophandler", function (e) { e.stopPropagation(); e.preventDefault(); $(this).css('border', '2px dashed #0B85A1'); }); - $(document).on('dragleave', "#dragandrophandler", function (e) { + $(document).on('dragleave', "#draganddrophandler", function (e) { $(this).css('border', '0px solid white'); }); - $(document).on('dragover', "#dragandrophandler", function (e) { + $(document).on('dragover', "#draganddrophandler", function (e) { e.stopPropagation(); e.preventDefault(); }); - $(document).on('drop', "#dragandrophandler", function (e) { + $(document).on('drop', "#draganddrophandler", function (e) { $(this).css('border', '0px dotted #0B85A1'); e.preventDefault(); var files = e.originalEvent.dataTransfer.files; @@ -914,7 +944,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -923,7 +953,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -958,7 +988,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -967,7 +997,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -1013,7 +1043,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -1022,7 +1052,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -1043,7 +1073,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -1052,7 +1082,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -1071,6 +1101,11 @@ $(document).ready(function() { /* {{{ */ // document.location = url; } } + } else if(target_type == 'attachment') { + console.log('attachment'); + var files = e.originalEvent.dataTransfer.files; + if(files.length > 0) { + } } }); $(document).on('dragstart', '.table-row-folder', function (e) { @@ -1178,7 +1213,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -1187,7 +1222,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -1219,7 +1254,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 1500 }); } else { noty({ @@ -1228,7 +1263,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 3500, + timeout: 3500 }); } }, @@ -1258,7 +1293,7 @@ $(document).ready(function() { /* {{{ */ dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: (typeof timeout == 'undefined' ? 1500 : timeout), + timeout: (typeof timeout == 'undefined' ? 1500 : timeout) }); }); diff --git a/styles/bootstrap/bootstrap/js/bootstrap-typeahead.js b/styles/bootstrap/bootstrap/js/bootstrap-typeahead.js index 1380fc726..e2b70118e 100644 --- a/styles/bootstrap/bootstrap/js/bootstrap-typeahead.js +++ b/styles/bootstrap/bootstrap/js/bootstrap-typeahead.js @@ -46,7 +46,8 @@ constructor: Typeahead , select: function () { - var val = this.$menu.find('.active').attr('data-value') + // var val = this.$menu.find('.active').attr('data-value') + var val = this.$menu.find('.active').data() this.$element .val(this.updater(val)) .change() diff --git a/styles/bootstrap/passwordstrength/jquery.passwordstrength.js b/styles/bootstrap/passwordstrength/jquery.passwordstrength.js index 6bc670317..1a14118bb 100644 --- a/styles/bootstrap/passwordstrength/jquery.passwordstrength.js +++ b/styles/bootstrap/passwordstrength/jquery.passwordstrength.js @@ -38,7 +38,7 @@ var defaults = { onError: function(data) {}, - onChange: function(data) {}, + onChange: function(data) {} }; var opts = $.extend(defaults, options); diff --git a/views/bootstrap/class.AddDocument.php b/views/bootstrap/class.AddDocument.php index a6bce56f1..a4d5ca1ac 100644 --- a/views/bootstrap/class.AddDocument.php +++ b/views/bootstrap/class.AddDocument.php @@ -70,7 +70,7 @@ $(document).ready(function() { } return false; }, ""); - $("#form1").validate({ + $("#adddocform").validate({ debug: false, ignore: ":hidden:not(.do_validate)", invalidHandler: function(e, validator) { @@ -101,15 +101,15 @@ $(document).ready(function() { if($enablelargefileupload) { ?> 'userfile-fine-uploader-uuids': { - fineuploader: [ userfileuploader, $('#dropfolderfileform1') ] + fineuploader: [ userfileuploader, $('#dropfolderfileadddocform') ] } 'userfile[]': { - alternatives: $('#dropfolderfileform1') + alternatives: $('#dropfolderfileadddocform') }, - dropfolderfileform1: { + dropfolderfileadddocform: { alternatives: $("#userfile") //$(".btn-file input") } printKeywordChooserJs("form1"); + $this->printKeywordChooserJs("adddocform"); if($dropfolderdir) { - $this->printDropFolderChooserJs("form1"); + $this->printDropFolderChooserJs("adddocform"); } $this->printFileChooserJs(); } /* }}} */ @@ -182,7 +182,7 @@ $(document).ready(function() { $msg = getMLText("max_upload_size").": ".SeedDMS_Core_File::format_filesize($mus2); $this->warningMsg($msg); $this->contentHeading(getMLText("add_document")); - + // Retrieve a list of all users and groups that have review / approve // privileges. $docAccess = $folder->getReadAccessList($enableadminrevapp, $enableownerrevapp); @@ -190,14 +190,16 @@ $(document).ready(function() { $txt = $this->callHook('addDocumentPreForm'); if(is_string($txt)) echo $txt; - $this->contentContainerStart(); ?> -
+ rowStart(); + $this->columnStart(6); $this->contentSubHeading(getMLText("document_infos")); + $this->contentContainerStart(); $this->formField( getMLText("name"), array( @@ -222,7 +224,7 @@ $(document).ready(function() { if(!$nodocumentformfields || !in_array('keywords', $nodocumentformfields)) $this->formField( getMLText("keywords"), - $this->getKeywordChooserHtml('form1') + $this->getKeywordChooserHtml('adddocform') ); if(!$nodocumentformfields || !in_array('categories', $nodocumentformfields)) { $options = array(); @@ -294,7 +296,7 @@ $(document).ready(function() { $allUsers = $dms->getAllUsers($sortusersinlist); foreach ($allUsers as $currUser) { if (!$currUser->isGuest()) - $options[] = array($currUser->getID(), htmlspecialchars($currUser->getLogin()), ($currUser->getID()==$user->getID()), array(array('data-subtitle', htmlspecialchars($currUser->getFullName())))); + $options[] = array($currUser->getID(), htmlspecialchars($currUser->getLogin().' - '.$currUser->getFullName()), ($currUser->getID()==$user->getID()), array(array('data-subtitle', htmlspecialchars($currUser->getEmail())))); } $this->formField( getMLText("owner"), @@ -313,7 +315,7 @@ $(document).ready(function() { $arr = $this->callHook('addDocumentAttribute', null, $attrdef); if(is_array($arr)) { if($arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arr)) { echo $arr; @@ -325,13 +327,17 @@ $(document).ready(function() { $arrs = $this->callHook('addDocumentAttributes', null); if(is_array($arrs)) { foreach($arrs as $arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arrs)) { echo $arrs; } + $this->contentContainerEnd(); + $this->columnEnd(); + $this->columnStart(6); $this->contentSubHeading(getMLText("version_info")); + $this->contentContainerStart(); if(!$nodocumentformfields || !in_array('version', $nodocumentformfields)) { $this->formField( getMLText("version"), @@ -351,7 +357,7 @@ $(document).ready(function() { if($dropfolderdir) { $this->formField( getMLText("dropfolder_file"), - $this->getDropFolderChooserHtml("form1", $dropfolderfile) + $this->getDropFolderChooserHtml("adddocform", $dropfolderfile) ); } if(!$nodocumentformfields || !in_array('version_comment', $nodocumentformfields)) { @@ -379,7 +385,7 @@ $(document).ready(function() { foreach($attrdefs as $attrdef) { $arr = $this->callHook('addDocumentContentAttribute', null, $attrdef); if(is_array($arr)) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } elseif(is_string($arr)) { echo $arr; } else { @@ -391,12 +397,13 @@ $(document).ready(function() { $arrs = $this->callHook('addDocumentContentAttributes', $folder); if(is_array($arrs)) { foreach($arrs as $arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arrs)) { echo $arrs; } + $this->contentContainerEnd(); if($workflowmode == 'advanced') { $mandatoryworkflows = $user->getMandatoryWorkflows(); if($mandatoryworkflows) { @@ -445,6 +452,7 @@ $(document).ready(function() { } elseif($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') { if($workflowmode == 'traditional') { $this->contentSubHeading(getMLText("assign_reviewers")); + $this->contentContainerStart(); /* List all mandatory reviewers */ $res=$user->getMandatoryReviewers(); @@ -542,9 +550,11 @@ $(document).ready(function() { } } } + $this->contentContainerEnd(); } $this->contentSubHeading(getMLText("assign_approvers")); + $this->contentContainerStart(); $res=$user->getMandatoryApprovers(); /* List all mandatory approvers */ $tmp = array(); @@ -644,10 +654,12 @@ $(document).ready(function() { } } } + $this->contentContainerEnd(); $this->warningMsg(getMLText("add_doc_reviewer_approver_warning")); } if(!$nodocumentformfields || !in_array('notification', $nodocumentformfields)) { - $this->contentSubHeading(getMLText("add_document_notify")); + $this->contentSubHeading(getMLText("add_document_notify")); + $this->contentContainerStart(); $options = array(); $allUsers = $dms->getAllUsers($sortusersinlist); @@ -683,12 +695,14 @@ $(document).ready(function() { 'options'=>$options ) ); + $this->contentContainerEnd(); } + $this->columnEnd(); + $this->rowEnd(); $this->formSubmit(" ".getMLText('add_document')); ?>
contentContainerEnd(); $txt = $this->callHook('addDocumentPostForm'); if(is_string($txt)) echo $txt; diff --git a/views/bootstrap/class.AddEvent.php b/views/bootstrap/class.AddEvent.php index ec8a62e36..65d32b90e 100644 --- a/views/bootstrap/class.AddEvent.php +++ b/views/bootstrap/class.AddEvent.php @@ -84,6 +84,7 @@ $(document).ready(function() { ?>
+ formField( diff --git a/views/bootstrap/class.AddFile.php b/views/bootstrap/class.AddFile.php index 3df9f3861..7e7acb6b2 100644 --- a/views/bootstrap/class.AddFile.php +++ b/views/bootstrap/class.AddFile.php @@ -35,7 +35,7 @@ class SeedDMS_View_AddFile extends SeedDMS_Bootstrap_Style { $enablelargefileupload = $this->params['enablelargefileupload']; $partitionsize = $this->params['partitionsize']; $maxuploadsize = $this->params['maxuploadsize']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); if($enablelargefileupload) $this->printFineUploaderJs('../op/op.UploadChunks.php', $partitionsize, $maxuploadsize); diff --git a/views/bootstrap/class.AddSubFolder.php b/views/bootstrap/class.AddSubFolder.php index e7542bdf8..f0b573c62 100644 --- a/views/bootstrap/class.AddSubFolder.php +++ b/views/bootstrap/class.AddSubFolder.php @@ -33,7 +33,7 @@ class SeedDMS_View_AddSubFolder extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ $strictformcheck = $this->params['strictformcheck']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> $(document).ready( function() { $("#form1").validate({ @@ -74,7 +74,10 @@ $(document).ready( function() { $this->htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); $this->globalNavigation($folder); $this->contentStart(); - $this->pageNavigation($this->getFolderPathHTML($folder, true), "view_folder", $folder); +// $this->pageNavigation($this->getFolderPathHTML($folder, true), "view_folder", $folder); +?> +
getID()."\"" : "") ?>>
+contentHeading(getMLText("add_subfolder")); $this->contentContainerStart(); ?> @@ -116,7 +119,7 @@ $(document).ready( function() { $arr = $this->callHook('addFolderAttribute', null, $attrdef); if(is_array($arr)) { if($arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arr)) { echo $arr; @@ -132,7 +135,7 @@ $(document).ready( function() { $arrs = $this->callHook('addFolderAttributes', null); if(is_array($arrs)) { foreach($arrs as $arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arrs)) { echo $arrs; diff --git a/views/bootstrap/class.AdminTools.php b/views/bootstrap/class.AdminTools.php index bf4238759..9d03fda18 100644 --- a/views/bootstrap/class.AdminTools.php +++ b/views/bootstrap/class.AdminTools.php @@ -110,7 +110,7 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { ?> callHook('startOfRow', 6); ?> - + diff --git a/views/bootstrap/class.ApproveDocument.php b/views/bootstrap/class.ApproveDocument.php index da2588747..48528649d 100644 --- a/views/bootstrap/class.ApproveDocument.php +++ b/views/bootstrap/class.ApproveDocument.php @@ -94,12 +94,12 @@ $(document).ready(function() { $user = $this->params['user']; $folder = $this->params['folder']; $document = $this->params['document']; + $content = $this->params['version']; + $approveid = $this->params['approveid']; - $latestContent = $document->getLatestContent(); - $approvals = $latestContent->getApprovalStatus(); - + $approvals = $content->getApprovalStatus(); foreach($approvals as $approval) { - if($approval['approveID'] == $_GET['approveid']) { + if($approval['approveID'] == $approveid) { $approvalStatus = $approval; break; } @@ -167,10 +167,9 @@ $(document).ready(function() { - +
contentContainerEnd(); $this->contentEnd(); $this->htmlEndPage(); diff --git a/views/bootstrap/class.AttributeMgr.php b/views/bootstrap/class.AttributeMgr.php index de06bc3dc..28857d099 100644 --- a/views/bootstrap/class.AttributeMgr.php +++ b/views/bootstrap/class.AttributeMgr.php @@ -38,7 +38,7 @@ class SeedDMS_View_AttributeMgr extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ $selattrdef = $this->params['selattrdef']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); parent::jsTranslations(array('cancel', 'splash_move_document', 'confirm_move_document', 'move_document', 'confirm_transfer_link_document', 'transfer_content', 'link_document', 'splash_move_folder', 'confirm_move_folder', 'move_folder')); ?> @@ -189,7 +189,7 @@ $(document).ready( function() { ($attrdef ? htmlspecialchars($attrdef->getName()) : '') ) ); -?> -
- -
- -
-
- - -
- -
- -
-
-formField( + getMLText("attrdef_type"), + array( + 'element'=>'select', + 'name'=>'type', + 'options'=>$options + ) + ); $this->formField( getMLText("attrdef_multiple"), array( diff --git a/views/bootstrap/class.BackupTools.php b/views/bootstrap/class.BackupTools.php index d2567ba58..e83e74903 100644 --- a/views/bootstrap/class.BackupTools.php +++ b/views/bootstrap/class.BackupTools.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_BackupTools extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); // $this->printFolderChooserJs("form1"); // $this->printFolderChooserJs("form2"); diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index beaa916cc..0e291157d 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -73,7 +73,7 @@ class SeedDMS_Bootstrap_Style extends SeedDMS_View_Common { } } header('X-Content-Type-Options: nosniff'); - header('Strict-Transport-Security: max-age=15768000'); + header('Strict-Transport-Security: max-age=15768000; includeSubDomains; preload'); if($httpheader) { foreach($httpheader as $name=>$value) { header($name . ": " . $value); @@ -120,7 +120,7 @@ class SeedDMS_Bootstrap_Style extends SeedDMS_View_Common { echo ''."\n"; echo ''."\n"; // echo ''."\n"; - if($this->extraheader['favicon']) + if(!empty($this->extraheader['favicon'])) echo $this->extraheader['favicon']; else { echo ''."\n"; @@ -221,7 +221,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } /* }}} */ function webrootjs() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); echo "var seeddms_absbaseprefix=\"".$this->params['absbaseprefix']."\";\n"; echo "var seeddms_webroot=\"".$this->params['settings']->_httpRoot."\";\n"; /* Place the current folder id in a js variable, just in case some js code @@ -281,13 +281,13 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } /* }}} */ function contentStart() { /* {{{ */ - echo "
\n"; + echo "
\n"; echo "
\n"; } /* }}} */ function contentEnd() { /* {{{ */ echo "
\n"; - echo "
\n"; + echo "\n"; } /* }}} */ function globalBanner() { /* {{{ */ @@ -756,8 +756,6 @@ background-image: linear-gradient(to bottom, #882222, #111111);; self::showNavigationBar($menuitems); echo " \n"; - echo "
    \n"; - echo "
\n"; echo "\n"; return; } /* }}} */ @@ -812,23 +810,11 @@ background-image: linear-gradient(to bottom, #882222, #111111);; // regular expression to strip out the pg (page number) variable to // achieve the same effect. This seems to be less haphazard though... $resultsURI = $baseURI; + unset($params['pg']); $first=true; - foreach ($params as $key=>$value) { - // Don't include the page number in the basic URI. This is added in - // during the list display loop. - if (!strcasecmp($key, "pg")) { - continue; - } - if (is_array($value)) { - foreach ($value as $subkey=>$subvalue) { - $resultsURI .= ($first ? "?" : "&").$key."%5B".$subkey."%5D=".urlencode($subvalue); - $first = false; - } - } - else { - $resultsURI .= ($first ? "?" : "&").$key."=".urlencode($value); - } - $first = false; + if($params) { + $resultsURI .= '?'.http_build_query($params); + $first=false; } echo "
"; @@ -948,6 +934,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; (!empty($value['id']) ? ' id="'.$value['id'].'"' : ''). (!empty($value['name']) ? ' name="'.$value['name'].'"' : ''). (!empty($value['class']) ? ' class="'.$value['class'].'"' : ''). + (!empty($value['placeholder']) ? ' data-placeholder="'.$value['placeholder'].'"' : ''). (!empty($value['multiple']) ? ' multiple' : ''); if(!empty($value['attributes']) && is_array($value['attributes'])) foreach($value['attributes'] as $a) @@ -955,11 +942,15 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo ">"; if(isset($value['options']) && is_array($value['options'])) { foreach($value['options'] as $val) { + if(is_string($val)) { + echo ''; + } elseif(is_array($val)) { echo ''; + } } } echo ''; @@ -981,6 +972,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; ((isset($value['value']) && is_string($value['value'])) || !empty($value['value']) ? ' value="'.$value['value'].'"' : ''). (!empty($value['placeholder']) ? ' placeholder="'.$value['placeholder'].'"' : ''). (!empty($value['autocomplete']) ? ' autocomplete="'.$value['autocomplete'].'"' : ''). + (isset($value['min']) ? ' min="'.$value['min'].'"' : ''). (!empty($value['checked']) ? ' checked' : ''). (!empty($value['required']) ? ' required' : ''); if(!empty($value['attributes']) && is_array($value['attributes'])) @@ -999,14 +991,14 @@ background-image: linear-gradient(to bottom, #882222, #111111);; return; } /* }}} */ - function formSubmit($value, $name='') { /* {{{ */ + function formSubmit($value, $name='', $target='') { /* {{{ */ echo "
\n"; if(is_string($value)) { - echo "\n"; + echo "\n"; } else { if(is_array($value)) { foreach($value as $i=>$v) - echo "\n"; + echo "\n"; } } echo "
\n"; @@ -1046,6 +1038,8 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $icons["pdf"] = "gnome-mime-application-pdf.svg"; $icons["wav"] = "audio.svg"; $icons["mp3"] = "audio.svg"; + $icons["m4a"] = "audio.svg"; + $icons["ogg"] = "audio.svg"; $icons["opus"] = "audio.svg"; $icons["c"] = "text-x-preview.svg"; $icons["cpp"] = "text-x-preview.svg"; @@ -1061,6 +1055,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $icons["zip"] = "package.svg"; $icons["rar"] = "package.svg"; $icons["mpg"] = "video.svg"; + $icons["mp4"] = "video.svg"; $icons["avi"] = "video.svg"; $icons["webm"] = "video.svg"; $icons["mkv"] = "video.svg"; @@ -1526,7 +1521,7 @@ $(document).ready(function() { $tmp = array(); foreach($attrs as $attr) { $curuser = $dms->getUser((int) $attr); - $tmp[] = $curuser->getFullname()." (".$curuser->getLogin().")"; + $tmp[] = htmlspecialchars($curuser->getFullname()." (".$curuser->getLogin().")"); } return implode('
', $tmp); break; @@ -1535,7 +1530,7 @@ $(document).ready(function() { $tmp = array(); foreach($attrs as $attr) { $curgroup = $dms->getGroup((int) $attr); - $tmp[] = $curgroup->getName(); + $tmp[] = htmlspecialchars($curgroup->getName()); } return implode('
', $tmp); break; @@ -1552,11 +1547,11 @@ $(document).ready(function() { } } /* }}} */ - function printAttributeEditField($attrdef, $attribute, $fieldname='attributes', $norequire=false) { /* {{{ */ - echo self::getAttributeEditField($attrdef, $attribute, $fieldname, $norequire); + function printAttributeEditField($attrdef, $attribute, $fieldname='attributes', $norequire=false, $namepostfix='') { /* {{{ */ + echo self::getAttributeEditField($attrdef, $attribute, $fieldname, $norequire, $namepostfix); } /* }}} */ - function getAttributeEditField($attrdef, $attribute, $fieldname='attributes', $norequire=false) { /* {{{ */ + function getAttributeEditField($attrdef, $attribute, $fieldname='attributes', $norequire=false, $namepostfix='') { /* {{{ */ $dms = $this->params['dms']; $content = ''; switch($attrdef->getType()) { @@ -1569,7 +1564,7 @@ $(document).ready(function() { $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValue() : $attribute) : ''; $dateformat = getConvertDateFormat($this->params['settings']->_dateformat); $content .= ' - + '; break; @@ -2292,6 +2287,21 @@ $(function() { return ''; } /* }}} */ + function printAccessButton($object, $return=false) { /* {{{ */ + $content = ''; + $objid = $object->getId(); + if($object->isType('document')) { + $content .= ''; + } elseif($object->isType('folder')) { + $content .= ''; + } + if($return) + return $content; + else + echo $content; + return ''; + } /* }}} */ + /** * Output left-arrow with link which takes over a number of ids into * a select box. @@ -2716,6 +2726,9 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) if($document->getAccessMode($user) >= M_READWRITE) { $content .= $this->printLockButton($document, 'splash_document_locked', 'splash_document_unlocked', true); } + if($document->getAccessMode($user) >= M_READWRITE) { + $content .= $this->printAccessButton($document, true); + } if($enableClipboard) { $content .= ''; } @@ -2845,6 +2858,9 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) } else { $content .= ''; } + if($subFolderAccessMode >= M_READWRITE) { + $content .= $this->printAccessButton($subFolder, true); + } if($enableClipboard) { $content .= ''; } diff --git a/views/bootstrap/class.Calendar.php b/views/bootstrap/class.Calendar.php index 342b3eb73..bee4fe63d 100644 --- a/views/bootstrap/class.Calendar.php +++ b/views/bootstrap/class.Calendar.php @@ -227,7 +227,7 @@ class SeedDMS_View_Calendar extends SeedDMS_Bootstrap_Style { $dms = $this->params['dms']; $user = $this->params['user']; $strictformcheck = $this->params['strictformcheck']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> $(document).ready(function() { diff --git a/views/bootstrap/class.Categories.php b/views/bootstrap/class.Categories.php index 944414678..2dbf313ba 100644 --- a/views/bootstrap/class.Categories.php +++ b/views/bootstrap/class.Categories.php @@ -38,7 +38,7 @@ class SeedDMS_View_Categories extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ $selcat = $this->params['selcategory']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); parent::jsTranslations(array('cancel', 'splash_move_document', 'confirm_move_document', 'move_document', 'confirm_transfer_link_document', 'transfer_content', 'link_document', 'splash_move_folder', 'confirm_move_folder', 'move_folder')); ?> $(document).ready( function() { diff --git a/views/bootstrap/class.ChangePassword.php b/views/bootstrap/class.ChangePassword.php index 92684195e..41e4b4e5b 100644 --- a/views/bootstrap/class.ChangePassword.php +++ b/views/bootstrap/class.ChangePassword.php @@ -51,6 +51,7 @@ document.form1.newpassword.focus(); $this->contentContainerStart(); ?>
+ "; diff --git a/views/bootstrap/class.Charts.php b/views/bootstrap/class.Charts.php index de8c3be69..117caecc0 100644 --- a/views/bootstrap/class.Charts.php +++ b/views/bootstrap/class.Charts.php @@ -35,8 +35,7 @@ class SeedDMS_View_Charts extends SeedDMS_Bootstrap_Style { $data = $this->params['data']; $type = $this->params['type']; - header('Content-Type: application/javascript'); - + header('Content-Type: application/javascript; charset=UTF-8'); ?> $("
").css({ position: "absolute", @@ -227,7 +226,11 @@ $(document).ready( function() { contentContainerEnd(); echo ""; - echo ""; + echo ""; + echo ""; + if(in_array($type, array('docspermonth', 'docsaccumulated'))) + echo ""; + echo ""; $total = 0; switch($type) { case 'docspermonth': @@ -235,15 +238,28 @@ $(document).ready( function() { case 'docspermimetype': case 'docspercategory': case 'docsperstatus': + $oldtotal = 0; foreach($data as $item) { - echo ""; + echo ""; + echo ""; + echo ""; + if(in_array($type, array('docspermonth'))) + echo ""; + echo ""; + $oldtotal = $item['total']; $total += $item['total']; } echo ""; break; case 'docsaccumulated': + $oldtotal = 0; foreach($data as $item) { - echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + $oldtotal = $item['total']; $total += $item['total']; } break; diff --git a/views/bootstrap/class.CreateIndex.php b/views/bootstrap/class.CreateIndex.php index c4cf75fd6..733e5a7d7 100644 --- a/views/bootstrap/class.CreateIndex.php +++ b/views/bootstrap/class.CreateIndex.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_CreateIndex extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); } /* }}} */ function show() { /* {{{ */ diff --git a/views/bootstrap/class.DefaultKeywords.php b/views/bootstrap/class.DefaultKeywords.php index 6b42ff0c0..6c891dca6 100644 --- a/views/bootstrap/class.DefaultKeywords.php +++ b/views/bootstrap/class.DefaultKeywords.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_DefaultKeywords extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> function checkForm() { @@ -144,6 +144,7 @@ $(document).ready( function() { function showKeywordForm($category, $user) { /* {{{ */ if(!$category) { + $this->contentContainerStart(); ?> @@ -163,26 +164,33 @@ $(document).ready( function() { ?> contentContainerEnd(); } else { + $this->contentContainerStart(); $owner = $category->getOwner(); if ((!$user->isAdmin()) && ($owner->getID() != $user->getID())) return; ?> -
- -
-
- - - - - - -
-
- -
- -
+
+ + +formField( + getMLText("name"), + array( + 'element'=>'input', + 'type'=>'text', + 'name'=>'name', + 'value'=>$category->getName() + ) + ); + $this->formSubmit(" ".getMLText('save')); +?> + +contentContainerEnd(); + $this->contentHeading(getMLText("default_keywords")); + $this->contentContainerStart(); +?> getKeywordLists(); if (count($lists) == 0) @@ -190,7 +198,7 @@ $(document).ready( function() { else foreach ($lists as $list) { ?> -
+ "> @@ -208,8 +216,6 @@ $(document).ready( function() {
-
-
@@ -225,6 +231,7 @@ $(document).ready( function() {
contentContainerEnd(); } } /* }}} */ @@ -267,12 +274,10 @@ $(document).ready( function() { columnEnd(); $this->columnStart(8); - $this->contentContainerStart(); ?>
>
contentContainerEnd(); $this->columnEnd(); $this->rowEnd(); $this->contentEnd(); diff --git a/views/bootstrap/class.DocumentAccess.php b/views/bootstrap/class.DocumentAccess.php index 220cbc545..5c4bf6e1a 100644 --- a/views/bootstrap/class.DocumentAccess.php +++ b/views/bootstrap/class.DocumentAccess.php @@ -45,7 +45,7 @@ class SeedDMS_View_DocumentAccess extends SeedDMS_Bootstrap_Style { } /* }}} */ function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> function checkForm() { diff --git a/views/bootstrap/class.DocumentChooser.php b/views/bootstrap/class.DocumentChooser.php index 801bfdc7a..d3be3d078 100644 --- a/views/bootstrap/class.DocumentChooser.php +++ b/views/bootstrap/class.DocumentChooser.php @@ -44,7 +44,7 @@ class SeedDMS_View_DocumentChooser extends SeedDMS_Bootstrap_Style { $form = $this->params['form']; $orderby = $this->params['orderby']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); if($folder) $this->printNewTreeNavigationJs($folder->getID(), M_READ, 1, $form, '', $orderby); } /* }}} */ diff --git a/views/bootstrap/class.DocumentNotify.php b/views/bootstrap/class.DocumentNotify.php index b727835b6..d94baf2fa 100644 --- a/views/bootstrap/class.DocumentNotify.php +++ b/views/bootstrap/class.DocumentNotify.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_DocumentNotify extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> function checkForm() { @@ -106,7 +106,7 @@ $(document).ready( function() { $allUsers = $dms->getAllUsers($sortusersinlist); foreach ($allUsers as $userObj) { if (!$userObj->isGuest() && !$userObj->isDisabled() && ($document->getAccessMode($userObj) >= M_READ) && !in_array($userObj->getID(), $userNotifyIDs)) - $options[] = array($userObj->getID(), htmlspecialchars($userObj->getLogin() . " - " . $userObj->getFullName())); + $options[] = array($userObj->getID(), htmlspecialchars($userObj->getLogin().' - '.$userObj->getFullName()), false, array(array('data-subtitle', htmlspecialchars($userObj->getEmail())))); } } elseif (!$user->isGuest() && !in_array($user->getID(), $userNotifyIDs)) { $options[] = array($user->getID(), htmlspecialchars($user->getLogin() . " - " .$user->getFullName())); @@ -117,6 +117,7 @@ $(document).ready( function() { 'element'=>'select', 'id'=>'userid', 'name'=>'userid', + 'class'=>'chzn-select', 'options'=>$options ) ); @@ -134,6 +135,7 @@ $(document).ready( function() { 'element'=>'select', 'id'=>'groupid', 'name'=>'groupid', + 'class'=>'chzn-select', 'options'=>$options ) ); diff --git a/views/bootstrap/class.DocumentVersionDetail.php b/views/bootstrap/class.DocumentVersionDetail.php index 833bdb67d..14e78b499 100644 --- a/views/bootstrap/class.DocumentVersionDetail.php +++ b/views/bootstrap/class.DocumentVersionDetail.php @@ -168,7 +168,7 @@ class SeedDMS_View_DocumentVersionDetail extends SeedDMS_Bootstrap_Style { @@ -275,7 +275,7 @@ class SeedDMS_View_DocumentVersionDetail extends SeedDMS_Bootstrap_Style { else print "
  • ".getMLText("document_deleted")."
  • "; $updatingUser = $version->getUser(); - print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; + print "
  • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($version->getDate())."
  • "; print "\n"; @@ -509,7 +509,7 @@ class SeedDMS_View_DocumentVersionDetail extends SeedDMS_Bootstrap_Style { print "
  • ".SeedDMS_Core_File::format_filesize(filesize($dms->contentDir . $file->getPath())) ." bytes, ".htmlspecialchars($file->getMimeType())."
  • "; else print "
  • ".htmlspecialchars($file->getMimeType())." - ".getMLText("document_deleted")."
  • "; - print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($responsibleUser->getFullName())."
  • "; + print "
  • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($responsibleUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($file->getDate())."
  • "; if($file->getVersion()) print "
  • ".getMLText('linked_to_this_version')."
  • "; diff --git a/views/bootstrap/class.DropFolderChooser.php b/views/bootstrap/class.DropFolderChooser.php index 688d2785d..477a48d25 100644 --- a/views/bootstrap/class.DropFolderChooser.php +++ b/views/bootstrap/class.DropFolderChooser.php @@ -37,7 +37,7 @@ require_once("SeedDMS/Preview.php"); class SeedDMS_View_DropFolderChooser extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> $('.fileselect').click(function(ev) { attr_filename = $(ev.currentTarget).data('filename'); diff --git a/views/bootstrap/class.EditAttributes.php b/views/bootstrap/class.EditAttributes.php index 2c98436f4..7708b7515 100644 --- a/views/bootstrap/class.EditAttributes.php +++ b/views/bootstrap/class.EditAttributes.php @@ -58,7 +58,7 @@ class SeedDMS_View_EditAttributes extends SeedDMS_Bootstrap_Style { $arr = $this->callHook('editDocumentContentAttribute', $version, $attrdef); if(is_array($arr)) { if($arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arr)) { echo $arr; @@ -70,7 +70,7 @@ class SeedDMS_View_EditAttributes extends SeedDMS_Bootstrap_Style { $arrs = $this->callHook('addDocumentContentAttributes', $version); if(is_array($arrs)) { foreach($arrs as $arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arrs)) { echo $arrs; diff --git a/views/bootstrap/class.EditDocument.php b/views/bootstrap/class.EditDocument.php index c94c1c356..41f759cd0 100644 --- a/views/bootstrap/class.EditDocument.php +++ b/views/bootstrap/class.EditDocument.php @@ -33,7 +33,7 @@ class SeedDMS_View_EditDocument extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ $strictformcheck = $this->params['strictformcheck']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); $this->printKeywordChooserJs('form1'); ?> $(document).ready( function() { @@ -90,6 +90,7 @@ $(document).ready( function() { $expdate = ''; ?> + formField( @@ -214,7 +215,7 @@ $(document).ready( function() { $arr = $this->callHook('editDocumentAttribute', $document, $attrdef); if(is_array($arr)) { if($arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arr)) { echo $arr; @@ -226,7 +227,7 @@ $(document).ready( function() { $arrs = $this->callHook('addDocumentAttributes', $document); if(is_array($arrs)) { foreach($arrs as $arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arrs)) { echo $arrs; diff --git a/views/bootstrap/class.EditFolder.php b/views/bootstrap/class.EditFolder.php index 9cf48d6e5..8f64ba3d0 100644 --- a/views/bootstrap/class.EditFolder.php +++ b/views/bootstrap/class.EditFolder.php @@ -81,6 +81,7 @@ $(document).ready(function() { $this->contentContainerStart(); ?> + callHook('editFolderAttribute', $folder, $attrdef); if(is_array($arr)) { if($arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arr)) { echo $arr; @@ -127,7 +128,7 @@ $(document).ready(function() { $arrs = $this->callHook('addFolderAttributes', $folder); if(is_array($arrs)) { foreach($arrs as $arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arrs)) { echo $arrs; diff --git a/views/bootstrap/class.EditOnline.php b/views/bootstrap/class.EditOnline.php index 029604fb6..f366e9131 100644 --- a/views/bootstrap/class.EditOnline.php +++ b/views/bootstrap/class.EditOnline.php @@ -40,8 +40,37 @@ class SeedDMS_View_EditOnline extends SeedDMS_Bootstrap_Style { $document = $this->params['document']; header('Content-Type: application/javascript; charset=UTF-8'); ?> +mySeedSettings = { + nameSpace: 'markdown', // Useful to prevent multi-instances CSS conflict + previewParserPath: '~/sets/markdown/preview.php', + onShiftEnter: {keepDefault:false, openWith:'\n\n'}, + markupSet: [ + {name:'First Level Heading', key:"1", placeHolder:'Your title here...', closeWith:function(markItUp) { return miu.markdownTitle(markItUp, '=') } }, + {name:'Second Level Heading', key:"2", placeHolder:'Your title here...', closeWith:function(markItUp) { return miu.markdownTitle(markItUp, '-') } }, + {name:'Heading 3', key:"3", openWith:'### ', placeHolder:'Your title here...' }, + {name:'Heading 4', key:"4", openWith:'#### ', placeHolder:'Your title here...' }, + {name:'Heading 5', key:"5", openWith:'##### ', placeHolder:'Your title here...' }, + {name:'Heading 6', key:"6", openWith:'###### ', placeHolder:'Your title here...' }, + {separator:'---------------' }, + {name:'Bold', key:"B", openWith:'**', closeWith:'**'}, + {name:'Italic', key:"I", openWith:'_', closeWith:'_'}, + {separator:'---------------' }, + {name:'Bulleted List', openWith:'- ' }, + {name:'Numeric List', openWith:function(markItUp) { + return markItUp.line+'. '; + }}, + {separator:'---------------' }, + {name:'Picture', key:"P", replaceWith:'![[![Alternative text]!]]([![Url:!:http://]!] "[![Title]!]")'}, + {name:'Link', key:"L", openWith:'[', closeWith:']([![Url:!:http://]!] "[![Title]!]")', placeHolder:'Your text to link here...' }, + {separator:'---------------'}, + {name:'Quotes', openWith:'> '}, + {name:'Code Block / Code', openWith:'(!(\t|!|`)!)', closeWith:'(!(`)!)'}, +// {separator:'---------------'}, +// {name:'Preview', call:'preview', className:"preview"} + ] +} $(document).ready(function() { - $('#markdown').markItUp(mySettings); + $('#markdown').markItUp(mySeedSettings); $('#update').click(function(event) { event.preventDefault(); @@ -116,13 +145,20 @@ $(document).ready(function() { warningMsg(getMLText('edit_online_warning')); + if($user->getId() == $luser->getId()) { + echo $this->warningMsg(getMLText('edit_online_warning')); ?> +errorMsg(getMLText('edit_online_not_allowed')); + } +?> columnEnd(); diff --git a/views/bootstrap/class.EditUserData.php b/views/bootstrap/class.EditUserData.php index f33ab90e6..0db8b19eb 100644 --- a/views/bootstrap/class.EditUserData.php +++ b/views/bootstrap/class.EditUserData.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_EditUserData extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> $(document).ready( function() { $("#form").validate({ @@ -103,6 +103,7 @@ $(document).ready( function() { $this->contentContainerStart(); ?> + formField( getMLText("current_password"), diff --git a/views/bootstrap/class.ExpiredDocuments.php b/views/bootstrap/class.ExpiredDocuments.php index ccafb3a99..a8a435698 100644 --- a/views/bootstrap/class.ExpiredDocuments.php +++ b/views/bootstrap/class.ExpiredDocuments.php @@ -40,7 +40,7 @@ class SeedDMS_View_ExpiredDocuments extends SeedDMS_Bootstrap_Style { $dms = $this->params['dms']; $user = $this->params['user']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); parent::jsTranslations(array('cancel', 'splash_move_document', 'confirm_move_document', 'move_document', 'confirm_transfer_link_document', 'transfer_content', 'link_document', 'splash_move_folder', 'confirm_move_folder', 'move_folder')); $this->printDeleteDocumentButtonJs(); /* Add js for catching click on document in one page mode */ @@ -77,8 +77,8 @@ class SeedDMS_View_ExpiredDocuments extends SeedDMS_Bootstrap_Style { print "\n\n"; print ""; print "\n"; print "\n"; print "\n"; @@ -90,7 +90,7 @@ class SeedDMS_View_ExpiredDocuments extends SeedDMS_Bootstrap_Style { } print "
    ".getMLText('chart_'.$type.'_title')."".getMLText('total')."
    ".getMLText('chart_'.$type.'_title')."".getMLText('total')."
    ".htmlspecialchars($item['key'])."".$item['total']."
    ".htmlspecialchars($item['key'])."".$item['total']."".sprintf('%+d', $item['total']-$oldtotal)."
    ".$total."
    ".date('Y-m-d', $item['key']/1000)."".$item['total']."
    ".getReadableDate($item['key']/1000)."".$item['total']."".sprintf('%+d', $item['total']-$oldtotal)."
    getOwner(); - print "getEmail()."\">".htmlspecialchars($owner->getFullName()).""; + print "getEmail())."\">".htmlspecialchars($owner->getFullName()).""; ?>
    ".getMLText("name"); - print " ".($order=="na"?' ':($order=="nd"?' ':' ')).""; - print " ".($order=="ea"?' ':($order=="ed"?' ':' ')).""; + print " ".($order=="na"?' ':($order=="nd"?' ':' ')).""; + print " ".($order=="ea"?' ':($order=="ed"?' ':' ')).""; print "".getMLText("status")."".getMLText("action")."
    "; } - else $this->infoMsg("no_docs_expired"); + else $this->infoMsg(getMLText("no_docs_expired")); // $this->contentContainerEnd(); diff --git a/views/bootstrap/class.ExtensionMgr.php b/views/bootstrap/class.ExtensionMgr.php index ada1960ca..44850cb15 100644 --- a/views/bootstrap/class.ExtensionMgr.php +++ b/views/bootstrap/class.ExtensionMgr.php @@ -28,7 +28,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_ExtensionMgr extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> $(document).ready( function() { $('body').on('click', 'a.download', function(ev){ @@ -212,7 +212,7 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Bootstrap_Style { echo "".$extconf['version']; echo "
    ".$extconf['releasedate'].""; echo ""; - echo "".$extconf['author']['name']."
    ".$extconf['author']['company'].""; + echo "".$extconf['author']['name']."
    ".$extconf['author']['company'].""; echo ""; echo "
    "; if(!empty($extconf['changelog']) && file_exists($extdir."/".$extname."/".$extconf['changelog'])) { diff --git a/views/bootstrap/class.FolderChooser.php b/views/bootstrap/class.FolderChooser.php index b6265bd59..63dae2d88 100644 --- a/views/bootstrap/class.FolderChooser.php +++ b/views/bootstrap/class.FolderChooser.php @@ -46,7 +46,7 @@ class SeedDMS_View_FolderChooser extends SeedDMS_Bootstrap_Style { $mode = $this->params['mode']; $orderby = $this->params['orderby']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); $this->printNewTreeNavigationJs($dms->getRootFolder()->getId()/*$rootfolderid*/, $mode, 0, $form, 0, $orderby); } /* }}} */ diff --git a/views/bootstrap/class.FolderNotify.php b/views/bootstrap/class.FolderNotify.php index 5fe0bfb24..6d19bb0a5 100644 --- a/views/bootstrap/class.FolderNotify.php +++ b/views/bootstrap/class.FolderNotify.php @@ -71,7 +71,7 @@ $(document).ready(function() { $allGroups = $this->params['allgroups']; $sortusersinlist = $this->params['sortusersinlist']; - $notifyList = $folder->getNotifyList(); + $notifyList = $folder->getNotifyList(0, true); $this->htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName())))); $this->globalNavigation($folder); @@ -106,7 +106,7 @@ $(document).ready(function() { $allUsers = $dms->getAllUsers($sortusersinlist); foreach ($allUsers as $userObj) { if (!$userObj->isGuest() && !$userObj->isDisabled() && ($folder->getAccessMode($userObj) >= M_READ) && !in_array($userObj->getID(), $userNotifyIDs)) - $options[] = array($userObj->getID(), htmlspecialchars($userObj->getLogin() . " - " . $userObj->getFullName())); + $options[] = array($userObj->getID(), htmlspecialchars($userObj->getLogin().' - '.$userObj->getFullName()), false, array(array('data-subtitle', htmlspecialchars($userObj->getEmail())))); } } elseif (!$user->isGuest() && !in_array($user->getID(), $userNotifyIDs)) { $options[] = array($user->getID(), htmlspecialchars($user->getLogin() . " - " .$user->getFullName())); @@ -117,6 +117,7 @@ $(document).ready(function() { 'element'=>'select', 'id'=>'userid', 'name'=>'userid', + 'class'=>'chzn-select', 'options'=>$options ) ); @@ -134,6 +135,7 @@ $(document).ready(function() { 'element'=>'select', 'id'=>'groupid', 'name'=>'groupid', + 'class'=>'chzn-select', 'options'=>$options ) ); diff --git a/views/bootstrap/class.ForcePasswordChange.php b/views/bootstrap/class.ForcePasswordChange.php index 06553cf4e..0038e466a 100644 --- a/views/bootstrap/class.ForcePasswordChange.php +++ b/views/bootstrap/class.ForcePasswordChange.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_ForcePasswordChange extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> function checkForm() { @@ -77,31 +77,42 @@ $(document).ready( function() { echo "
    ".getMLText('password_expiration_text')."
    "; $this->contentContainerStart(); ?> - - - - - - - - - - - - - - - - - - - - - - -
    :
    :
    : -
    -
    :
    ">
    + + +formField( + getMLText("current_password"), + array( + 'element'=>'input', + 'type'=>'password', + 'id'=>'currentpwd', + 'name'=>'currentpwd', + 'autocomplete'=>'off', + 'required'=>true + ) + ); + $this->formField( + getMLText("new_password"), + '' + ); + if($passwordstrength) { + $this->formField( + getMLText("password_strength"), + '
    ' + ); + } + $this->formField( + getMLText("confirm_pwd"), + array( + 'element'=>'input', + 'type'=>'password', + 'id'=>'pwdconf', + 'name'=>'pwdconf', + 'autocomplete'=>'off', + ) + ); + $this->formSubmit(" ".getMLText('submit_password')); +?> diff --git a/views/bootstrap/class.GroupMgr.php b/views/bootstrap/class.GroupMgr.php index aff4f2a29..97ce669d4 100644 --- a/views/bootstrap/class.GroupMgr.php +++ b/views/bootstrap/class.GroupMgr.php @@ -40,7 +40,7 @@ class SeedDMS_View_GroupMgr extends SeedDMS_Bootstrap_Style { $selgroup = $this->params['selgroup']; $strictformcheck = $this->params['strictformcheck']; - header("Content-type: text/javascript"); + header('Content-Type: application/javascript; charset=UTF-8'); ?> function checkForm1() { msg = new Array(); @@ -247,30 +247,38 @@ $(document).ready( function() { $this->contentSubHeading(getMLText("add_member")); ?> - + - - - - - - -
    - - - - - "> -
    +getAllUsers($sortusersinlist); + foreach ($allUsers as $currUser) { + if (!$group->isMember($currUser)) + $options[] = array($currUser->getID(), htmlspecialchars($currUser->getLogin().' - '.$currUser->getFullName()), ($currUser->getID()==$user->getID()), array(array('data-subtitle', htmlspecialchars($currUser->getEmail())))); + } + $this->formField( + getMLText("user"), + array( + 'element'=>'select', + 'id'=>'userid', + 'name'=>'userid', + 'class'=>'chzn-select', + 'options'=>$options + ) + ); + $this->formField( + getMLText("manager"), + array( + 'element'=>'input', + 'type'=>'checkbox', + 'name'=>'manager', + 'value'=>1 + ) + ); + $this->formSubmit(" ".getMLText('add')); +?> 'select', 'id'=>'selector', 'class'=>'chzn-select', - 'options'=>$options + 'options'=>$options, + 'placeholder'=>getMLText('select_groups'), ) ); ?> diff --git a/views/bootstrap/class.GroupView.php b/views/bootstrap/class.GroupView.php index cf955a5d7..76ec61d96 100644 --- a/views/bootstrap/class.GroupView.php +++ b/views/bootstrap/class.GroupView.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_GroupView extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> $(document).ready( function() { $( "#selector" ).change(function() { diff --git a/views/bootstrap/class.ImportFS.php b/views/bootstrap/class.ImportFS.php index e6d500f68..74b29aa7b 100644 --- a/views/bootstrap/class.ImportFS.php +++ b/views/bootstrap/class.ImportFS.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_ImportFS extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); // $this->printFolderChooserJs("form1"); $this->printDropFolderChooserJs("form1", 1); diff --git a/views/bootstrap/class.ImportUsers.php b/views/bootstrap/class.ImportUsers.php index 5a2f92673..b4ec429ca 100644 --- a/views/bootstrap/class.ImportUsers.php +++ b/views/bootstrap/class.ImportUsers.php @@ -32,9 +32,8 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_ImportUsers extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ + header('Content-Type: application/javascript; charset=UTF-8'); $this->printFileChooserJs(); - header('Content-Type: application/javascript'); - } /* }}} */ function show() { /* {{{ */ diff --git a/views/bootstrap/class.Indexer.php b/views/bootstrap/class.Indexer.php index 35e9540a3..e2da3ff31 100644 --- a/views/bootstrap/class.Indexer.php +++ b/views/bootstrap/class.Indexer.php @@ -111,7 +111,7 @@ class SeedDMS_View_Indexer extends SeedDMS_Bootstrap_Style { $dms = $this->params['dms']; $user = $this->params['user']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> var queue_count = 0; // Number of functions being called var funcArray = []; // Array of functions waiting diff --git a/views/bootstrap/class.Info.php b/views/bootstrap/class.Info.php index c47298029..da6f90e41 100644 --- a/views/bootstrap/class.Info.php +++ b/views/bootstrap/class.Info.php @@ -107,6 +107,20 @@ class SeedDMS_View_Info extends SeedDMS_Bootstrap_Style { echo "".$extname.""."\n"; echo "\n\n"; + $this->contentHeading(getMLText("missing_php_functions")); + echo "\n"; + echo "\n\n"; + echo "\n"; + echo "\n\n\n"; + foreach(array('proc_open') as $funcname) { + if(!function_exists($funcname)) { + echo ""; + } + } + echo "\n
    ".getMLText("name"); + echo "".getMLText("missing_func_note"); + echo "
    ".$funcname."".getMLText('func_'.$funcname."_missing")."
    \n"; + if(function_exists('apache_get_modules')) { $this->contentHeading(getMLText("installed_apache_extensions")); $apacheextensions = apache_get_modules(); diff --git a/views/bootstrap/class.KeywordChooser.php b/views/bootstrap/class.KeywordChooser.php index 07ff44590..615c6cf04 100644 --- a/views/bootstrap/class.KeywordChooser.php +++ b/views/bootstrap/class.KeywordChooser.php @@ -33,7 +33,7 @@ class SeedDMS_View_KeywordChooser extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ $form = $this->params['form']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> var targetObj = document..keywords; var myTA; diff --git a/views/bootstrap/class.LogManagement.php b/views/bootstrap/class.LogManagement.php index ed6e14103..6f1263dea 100644 --- a/views/bootstrap/class.LogManagement.php +++ b/views/bootstrap/class.LogManagement.php @@ -70,7 +70,7 @@ class SeedDMS_View_LogManagement extends SeedDMS_Bootstrap_Style { } /* }}} */ function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> $(document).ready( function() { $('i.fa fa-arrow-up').on('click', function(e) { diff --git a/views/bootstrap/class.ManageNotify.php b/views/bootstrap/class.ManageNotify.php index 2077c57cb..b84d80c1e 100644 --- a/views/bootstrap/class.ManageNotify.php +++ b/views/bootstrap/class.ManageNotify.php @@ -131,7 +131,7 @@ class SeedDMS_View_ManageNotify extends SeedDMS_Bootstrap_Style { } /* }}} */ function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); // $this->printFolderChooserJs("form1"); // $this->printDocumentChooserJs("form2"); diff --git a/views/bootstrap/class.MoveDocument.php b/views/bootstrap/class.MoveDocument.php index 8862db301..45428c9c9 100644 --- a/views/bootstrap/class.MoveDocument.php +++ b/views/bootstrap/class.MoveDocument.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_MoveDocument extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); // $this->printFolderChooserJs("form1"); } /* }}} */ @@ -52,6 +52,7 @@ class SeedDMS_View_MoveDocument extends SeedDMS_Bootstrap_Style { $this->contentContainerStart('warning'); ?>
    + formField(getMLText("choose_target_folder"), $this->getFolderChooserHtml("form1", M_READWRITE, -1, $target)); diff --git a/views/bootstrap/class.MoveFolder.php b/views/bootstrap/class.MoveFolder.php index f9091fe31..acbc98a3d 100644 --- a/views/bootstrap/class.MoveFolder.php +++ b/views/bootstrap/class.MoveFolder.php @@ -32,7 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_MoveFolder extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); // $this->printFolderChooserJs("form1"); } /* }}} */ @@ -52,6 +52,7 @@ class SeedDMS_View_MoveFolder extends SeedDMS_Bootstrap_Style { ?> + params['dms']; $user = $this->params['user']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); parent::jsTranslations(array('cancel', 'splash_move_document', 'confirm_move_document', 'move_document', 'confirm_transfer_link_document', 'transfer_content', 'link_document', 'splash_move_folder', 'confirm_move_folder', 'move_folder')); $this->printDeleteDocumentButtonJs(); /* Add js for catching click on document in one page mode */ diff --git a/views/bootstrap/class.ObjectCheck.php b/views/bootstrap/class.ObjectCheck.php index 5ddfbb0fe..8abbba8f1 100644 --- a/views/bootstrap/class.ObjectCheck.php +++ b/views/bootstrap/class.ObjectCheck.php @@ -47,37 +47,22 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style { $tmparr = explode(':', $path); array_shift($tmparr); if(count($tmparr) != count(array_unique($tmparr))) { - print "\n"; - print "getID()."\">getImgPath("folder.svg")."\" width=18 height=18 border=0>"; - print "getID()."\">"; - print htmlspecialchars($path); - print ""; - - $owner = $folder->getOwner(); - print "".htmlspecialchars($owner->getFullName()).""; + echo $this->folderListRowStart($folder); + echo $this->folderListRow($folder, true); print "Folder path contains cyclic relation"; echo ""; if($repair) { print "".getMLText('repaired')."\n"; } echo ""; - print "\n"; + echo $this->folderListRowEnd($folder); } $folderList = $folder->getFolderList(); /* Check the folder */ if($folderList != $path) { - print "\n"; + echo $this->folderListRowStart($folder); + echo $this->folderListRow($folder, true); $this->needsrepair = true; - print "getID()."\">getImgPath("folder.svg")."\" width=18 height=18 border=0>"; - print "getID()."\">"; - $tmppath = $folder->getPath(); - for ($i = 1; $i < count($tmppath); $i++) { - print "/".htmlspecialchars($tmppath[$i]->getName()); - } - print ""; - - $owner = $folder->getOwner(); - print "".htmlspecialchars($owner->getFullName()).""; print "Folderlist is '".$folderList."', should be '".$path."'"; echo ""; if($repair) { @@ -85,7 +70,7 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style { print "".getMLText('repaired')."\n"; } echo ""; - print "\n"; + echo $this->folderListRowEnd($folder); } } @@ -228,8 +213,8 @@ class SeedDMS_View_ObjectCheck extends SeedDMS_Bootstrap_Style { print "\n\n"; print "\n"; print "".getMLText("name")."\n"; - print "".getMLText("owner")."\n"; - print "\n"; + print "".getMLText("status")."\n"; + print "".getMLText("action")."\n"; print "".getMLText("error")."\n"; print "\n\n\n"; $this->needsrepair = false; diff --git a/views/bootstrap/class.OverrideContentStatus.php b/views/bootstrap/class.OverrideContentStatus.php index 133148e82..d4b32fd33 100644 --- a/views/bootstrap/class.OverrideContentStatus.php +++ b/views/bootstrap/class.OverrideContentStatus.php @@ -85,6 +85,7 @@ $(document).ready(function() { // Display the Review form. ?> + isType('document')) { // $recs[] = 'D'.$entry->getName(); - $recs[] = array('type'=>'D', 'name'=>$entry->getName()); + $recs[] = array('type'=>'D', 'id'=>$entry->getId(), 'name'=>$entry->getName()); } elseif($entry->isType('folder')) { // $recs[] = 'F'.$entry->getName(); - $recs[] = array('type'=>'F', 'name'=>$entry->getName()); + $recs[] = array('type'=>'F', 'id'=>$entry->getId(), 'name'=>$entry->getName()); } } } @@ -141,8 +141,11 @@ function typeahead() { /* {{{ */ $stopdate = $this->params['stopdate']; $expstartdate = $this->params['expstartdate']; $expstopdate = $this->params['expstopdate']; + $statusstartdate = $this->params['statusstartdate']; + $statusstopdate = $this->params['statusstopdate']; $creationdate = $this->params['creationdate']; $expirationdate = $this->params['expirationdate']; + $statusdate = $this->params['statusdate']; $status = $this->params['status']; $this->query = $this->params['query']; $orderby = $this->params['orderby']; @@ -263,7 +266,14 @@ function typeahead() { /* {{{ */ ?> getName()); ?>: - printAttributeEditField($attrdef, isset($attributes[$attrdef->getID()]) ? $attributes[$attrdef->getID()] : '', 'attributes', true) ?> + +getType() == SeedDMS_Core_AttributeDefinition::type_date) + echo $this->getAttributeEditField($attrdef, !empty($attributes[$attrdef->getID()]['from']) ? getReadableDate(makeTsFromDate($attributes[$attrdef->getID()]['from'])) : '', 'attributes', true, 'from').'  '.getMLText('to').' '.$this->getAttributeEditField($attrdef, !empty($attributes[$attrdef->getID()]['to']) ? getReadableDate(makeTsFromDate($attributes[$attrdef->getID()]['to'])) : '', 'attributes', true, 'to'); + else + $this->printAttributeEditField($attrdef, isset($attributes[$attrdef->getID()]) ? $attributes[$attrdef->getID()] : '', 'attributes', true) +?> +
    @@ -362,6 +374,23 @@ function typeahead() { /* {{{ */ + +: + +
    + + "> + +   + + + "> + + + + getName()); ?>: - printAttributeEditField($attrdef, isset($attributes[$attrdef->getID()]) ? $attributes[$attrdef->getID()] : '', 'attributes', true) ?> + +getType() == SeedDMS_Core_AttributeDefinition::type_date) + echo $this->getAttributeEditField($attrdef, !empty($attributes[$attrdef->getID()]['from']) ? getReadableDate(makeTsFromDate($attributes[$attrdef->getID()]['from'])) : '', 'attributes', true, 'from').'  '.getMLText('to').' '.$this->getAttributeEditField($attrdef, !empty($attributes[$attrdef->getID()]['to']) ? getReadableDate(makeTsFromDate($attributes[$attrdef->getID()]['to'])) : '', 'attributes', true, 'to'); + else + $this->printAttributeEditField($attrdef, isset($attributes[$attrdef->getID()]) ? $attributes[$attrdef->getID()] : '', 'attributes', true) +?> $(document).ready( function() { $('#presetexpdate').on('change', function(ev){ @@ -66,6 +66,7 @@ $(document).ready( function() { + '; + $html .= ''; } return $html; } /* }}} */ @@ -207,7 +207,7 @@ class SeedDMS_View_Settings extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ $extmgr = $this->params['extmgr']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> $(document).ready( function() { $('#settingstab li a').click(function(event) { @@ -254,6 +254,7 @@ class SeedDMS_View_Settings extends SeedDMS_Bootstrap_Style { ?> + function checkForm() { diff --git a/views/bootstrap/class.SubstituteUser.php b/views/bootstrap/class.SubstituteUser.php index fd193b367..06e55d27f 100644 --- a/views/bootstrap/class.SubstituteUser.php +++ b/views/bootstrap/class.SubstituteUser.php @@ -32,6 +32,7 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_SubstituteUser extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ + header('Content-Type: application/javascript; charset=UTF-8'); ?> $(document).ready(function(){ $("#myInput").on("keyup", function() { diff --git a/views/bootstrap/class.Timeline.php b/views/bootstrap/class.Timeline.php index 82e9425cc..675ed4d2a 100644 --- a/views/bootstrap/class.Timeline.php +++ b/views/bootstrap/class.Timeline.php @@ -140,7 +140,7 @@ class SeedDMS_View_Timeline extends SeedDMS_Bootstrap_Style { $to = time(); } - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); parent::jsTranslations(array('cancel', 'splash_move_document', 'confirm_move_document', 'move_document', 'confirm_transfer_link_document', 'transfer_content', 'link_document', 'splash_move_folder', 'confirm_move_folder', 'move_folder')); ?> $(document).ready(function () { diff --git a/views/bootstrap/class.TransferDocument.php b/views/bootstrap/class.TransferDocument.php index fb4f51f16..a40d5a8c4 100644 --- a/views/bootstrap/class.TransferDocument.php +++ b/views/bootstrap/class.TransferDocument.php @@ -33,13 +33,13 @@ class SeedDMS_View_TransferDocument extends SeedDMS_Bootstrap_Style { $allusers = $this->params['allusers']; $document = $this->params['document']; $folder = $this->params['folder']; + $accessobject = $this->params['accessobject']; $this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); $this->globalNavigation($folder); $this->contentStart(); $this->pageNavigation($this->getFolderPathHTML($folder, true, $document), "view_document", $document); $this->contentHeading(getMLText("transfer_document")); - $this->contentContainerStart(); ?> @@ -47,10 +47,12 @@ class SeedDMS_View_TransferDocument extends SeedDMS_Bootstrap_Style { '; $owner = $document->getOwner(); + $hasusers = false; // set to true if at least one user is found foreach ($allusers as $currUser) { if ($currUser->isGuest() || ($currUser->getID() == $owner->getID())) continue; + $hasusers = true; $html .= " contentContainerEnd(); $this->contentEnd(); $this->htmlEndPage(); } /* }}} */ diff --git a/views/bootstrap/class.UpdateDocument.php b/views/bootstrap/class.UpdateDocument.php index b855d89ee..8f8b3580a 100644 --- a/views/bootstrap/class.UpdateDocument.php +++ b/views/bootstrap/class.UpdateDocument.php @@ -37,7 +37,7 @@ class SeedDMS_View_UpdateDocument extends SeedDMS_Bootstrap_Style { $enablelargefileupload = $this->params['enablelargefileupload']; $partitionsize = $this->params['partitionsize']; $maxuploadsize = $this->params['maxuploadsize']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); $this->printDropFolderChooserJs("form1"); $this->printSelectPresetButtonJs(); $this->printInputPresetButtonJs(); @@ -282,18 +282,18 @@ console.log(element); $arr = $this->callHook('editDocumentContentAttribute', $document, $attrdef); if(is_array($arr)) { if($arr) - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } elseif(is_string($arr)) { echo $arr; } else { - $this->formField(htmlspecialchars($attrdef->getName()), $this->getAttributeEditField($attrdef, $document->getAttribute($attrdef))); + $this->formField(htmlspecialchars($attrdef->getName()), $this->getAttributeEditField($attrdef, $document->getAttribute($attrdef), 'attributes_version')); } } } - $arrs = $this->callHook('addDocumentContentAttributes', $folder); + $arrs = $this->callHook('addDocumentContentAttributes', $document); if(is_array($arrs)) { foreach($arrs as $arr) { - $this->formField($arr[0], $arr[1]); + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); } } elseif(is_string($arrs)) { echo $arrs; diff --git a/views/bootstrap/class.UserList.php b/views/bootstrap/class.UserList.php index 49350275b..63a5b0d5b 100644 --- a/views/bootstrap/class.UserList.php +++ b/views/bootstrap/class.UserList.php @@ -59,7 +59,7 @@ class SeedDMS_View_UserList extends SeedDMS_Bootstrap_Style { echo ""; echo ""; echo htmlspecialchars($currUser->getFullName())." (".htmlspecialchars($currUser->getLogin()).")
    "; - echo "getEmail()."\">".htmlspecialchars($currUser->getEmail())."
    "; + echo "getEmail())."\">".htmlspecialchars($currUser->getEmail())."
    "; echo "".htmlspecialchars($currUser->getComment()).""; echo ""; echo ""; diff --git a/views/bootstrap/class.UsrMgr.php b/views/bootstrap/class.UsrMgr.php index 21d93c22b..130246711 100644 --- a/views/bootstrap/class.UsrMgr.php +++ b/views/bootstrap/class.UsrMgr.php @@ -35,7 +35,7 @@ class SeedDMS_View_UsrMgr extends SeedDMS_Bootstrap_Style { $seluser = $this->params['seluser']; $strictformcheck = $this->params['strictformcheck']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); ?> function checkForm() { @@ -332,7 +332,7 @@ $(document).ready( function() { 'name'=>'groups[]', 'class'=>'chzn-select', 'multiple'=>true, - 'attributes'=>array(array('data-placeholder', getMLText('select_groups'))), + 'placeholder'=>getMLText('select_groups'), 'options'=>$options ) ); @@ -550,7 +550,8 @@ $(document).ready( function() { 'element'=>'select', 'id'=>'selector', 'class'=>'chzn-select', - 'options'=>$options + 'options'=>$options, + 'placeholder'=>getMLText('select_users'), ) ); ?> diff --git a/views/bootstrap/class.UsrView.php b/views/bootstrap/class.UsrView.php index d091d5db4..b566573ae 100644 --- a/views/bootstrap/class.UsrView.php +++ b/views/bootstrap/class.UsrView.php @@ -44,7 +44,6 @@ class SeedDMS_View_UsrView extends SeedDMS_Bootstrap_Style { $this->pageNavigation(getMLText("my_account"), "my_account"); $this->contentHeading(getMLText("users")); - $this->contentContainerStart(); echo "\n"; echo "\n\n"; @@ -68,7 +67,7 @@ class SeedDMS_View_UsrView extends SeedDMS_Bootstrap_Style { } echo ""; echo ""; @@ -76,7 +75,6 @@ class SeedDMS_View_UsrView extends SeedDMS_Bootstrap_Style { echo "
    "; echo htmlspecialchars($currUser->getFullName())." (".htmlspecialchars($currUser->getLogin()).")
    "; - echo "getEmail()."\">".htmlspecialchars($currUser->getEmail())."
    "; + echo "getEmail())."\">".htmlspecialchars($currUser->getEmail())."
    "; echo "".htmlspecialchars($currUser->getComment()).""; echo "
    \n"; - $this->contentContainerEnd(); $this->contentEnd(); $this->htmlEndPage(); } /* }}} */ diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 3960d6fd6..3fdd7804c 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -178,7 +178,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { $user = $this->params['user']; $document = $this->params['document']; - header('Content-Type: application/javascript'); + header('Content-Type: application/javascript; charset=UTF-8'); parent::jsTranslations(array('cancel', 'splash_move_document', 'confirm_move_document', 'move_document', 'confirm_transfer_link_document', 'transfer_content', 'link_document', 'splash_move_folder', 'confirm_move_folder', 'move_folder')); if($user->isAdmin()) { $latestContent = $this->callHook('documentLatestContent', $document); @@ -225,7 +225,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { getOwner(); - print "getEmail()."\">".htmlspecialchars($owner->getFullName()).""; + print "getEmail())."\">".htmlspecialchars($owner->getFullName()).""; ?> @@ -588,6 +588,11 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { exit; } + $checksum = SeedDMS_Core_File::checksum($dms->contentDir.$latestContent->getPath()); + if($checksum != $latestContent->getChecksum()) { + $this->errorMsg(getMLText('wrong_checksum')); + } + $txt = $this->callHook('preLatestVersionTab', $latestContent); if(is_string($txt)) echo $txt; @@ -635,7 +640,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { else print "
  • ".getMLText("document_deleted")."
  • "; $updatingUser = $latestContent->getUser(); - print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; + print "
  • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($latestContent->getDate())."
  • "; print "\n"; @@ -1275,7 +1280,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { if ($file_exists) print "
  • ". SeedDMS_Core_File::format_filesize($version->getFileSize()) .", ".htmlspecialchars($version->getMimeType())."
  • "; else print "
  • ".getMLText("document_deleted")."
  • "; $updatingUser = $version->getUser(); - print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; + print "
  • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($updatingUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($version->getDate())."
  • "; print "\n"; $txt = $this->callHook('showVersionComment', $version); @@ -1386,7 +1391,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { print "
  • ".SeedDMS_Core_File::format_filesize(filesize($dms->contentDir . $file->getPath())) ." bytes, ".htmlspecialchars($file->getMimeType())."
  • "; else print "
  • ".htmlspecialchars($file->getMimeType())." - ".getMLText("document_deleted")."
  • "; - print "
  • ".getMLText("uploaded_by")." getEmail()."\">".htmlspecialchars($responsibleUser->getFullName())."
  • "; + print "
  • ".getMLText("uploaded_by")." getEmail())."\">".htmlspecialchars($responsibleUser->getFullName())."
  • "; print "
  • ".getLongReadableDate($file->getDate())."
  • "; if($file->getVersion()) print "
  • ".getMLText('linked_to_current_version')."
  • "; @@ -1415,12 +1420,14 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } else $this->infoMsg(getMLText("no_attached_files")); - $this->contentContainerStart(); - if ($document->getAccessMode($user) >= M_READWRITE){ + if(0){ +?> + +".getMLText("add")."\n"; } - $this->contentContainerEnd(); ?>