diff --git a/CHANGELOG b/CHANGELOG index 905a8b1d1..9e300d20f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,43 @@ +-------------------------------------------------------------------------------- + Changes in version 5.1.2 +-------------------------------------------------------------------------------- +- do not show spinner when clipboard is loaded in menu (prevents flickering of + page) +- add select menu for predifined expiration dates +- add some more hooks +- add list of currently logged in users in menu +- the owner of a document can see even none public attachments +- uploading multiple files can be turned off +- add list of tasks in menu +- merged changes from 5.0.12 + +-------------------------------------------------------------------------------- + Changes in version 5.1.1 +-------------------------------------------------------------------------------- +- fix initial creation of postgres database +- merged changes from 5.0.11 + +-------------------------------------------------------------------------------- + Changes in version 5.1.0 +-------------------------------------------------------------------------------- +- added support for postgresql +- document attachments can linked to a version and be public or hidden + +-------------------------------------------------------------------------------- + Changes in version 5.0.12 +-------------------------------------------------------------------------------- +- show name and parent folder of document/folder in search list on different + lines +- check for guest login, admin ip and disabled accounts in webdav server +- update last access time in session only once a minute +- set Return-Path in emails if from_address in settings is set +- pass more arguments to hooks (pre|post)UpdateDocument and searchListHeader +- show help messages on settings page if available +- fix regex expression in op/op.Settings.php (Closes #317) +- better debugging of sql statements in SeedDM_Core +- move css for timeline into Timeline view +- merged changes from 4.3.35 + -------------------------------------------------------------------------------- Changes in version 5.0.11 -------------------------------------------------------------------------------- @@ -76,6 +116,17 @@ - add .xml to online file types by default - add home folder for users +-------------------------------------------------------------------------------- + Changes in version 4.3.35 +-------------------------------------------------------------------------------- +- fix authentication in webdav.php (Closes #250) +- update last access time only once a minute +- run action 'css' in view if it exists, move css code for timeline +- show role of users in user list and substitute user list +- mysql sql_mode=only_full_group_by can be set without causing errors when + creating a temporary table +- translation updates + -------------------------------------------------------------------------------- Changes in version 4.3.34 -------------------------------------------------------------------------------- diff --git a/Makefile b/Makefile index 7e1061a85..49d8105bd 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ -VERSION=5.0.11 +VERSION=5.1.2 SRC=CHANGELOG inc conf utils index.php languages views op out controllers doc styles TODO LICENSE webdav install restapi pdfviewer # webapp -NODISTFILES=utils/importmail.php utils/seedddms-importmail utils/remote-email-upload utils/remote-upload .svn .gitignore styles/blue styles/hc styles/clean views/blue views/hc views/clean +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 styles/blue styles/hc styles/clean views/blue views/hc views/clean EXTENSIONS := \ dynamic_content.tar.gz\ diff --git a/SeedDMS_Core/Core/inc.ClassAttribute.php b/SeedDMS_Core/Core/inc.ClassAttribute.php index d8842c1f8..58bb5b027 100644 --- a/SeedDMS_Core/Core/inc.ClassAttribute.php +++ b/SeedDMS_Core/Core/inc.ClassAttribute.php @@ -258,6 +258,13 @@ class SeedDMS_Core_Attribute { /* {{{ */ */ function getValidationError() { return $this->_validation_error; } + /** + * Set validation error + * + * @param integer error code + */ + function setValidationError($error) { $this->_validation_error = $error; } + /** * Get definition of attribute * @@ -916,6 +923,15 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ * @return boolean true if validation succeds, otherwise false */ function validate($attrvalue) { /* {{{ */ + /* Check if 'onAttributeValidate' callback is set */ + if(isset($this->_dms->callbacks['onAttributeValidate'])) { + foreach($this->_dms->callbacks['onAttributeValidate'] as $callback) { + $ret = call_user_func($callback[0], $callback[1], $this); + if(is_bool($ret)) + return $ret; + } + } + if($this->getMultipleValues()) { if(is_string($attrvalue)) { $sep = $attrvalue[0]; diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 204d3564d..1fa18ba40 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -315,6 +315,25 @@ class SeedDMS_Core_DMS { return $tmp; } /* }}} */ + /** + * Filter out document attachments which can not be accessed by a given user + * + * Returns a filtered list of files which are accessible by the + * given user. A file is only accessible, if it is publically visible, + * owned by the user, or the accessing user is an administrator. + * + * @param array $files list of objects of type SeedDMS_Core_DocumentFile + * @param object $user user for which access is being checked + * @return array filtered list of files + */ + static function filterDocumentFiles($user, $files) { /* {{{ */ + $tmp = array(); + foreach ($files as $file) + if ($file->isPublic() || ($file->getUser()->getID() == $user->getID()) || $user->isAdmin() || ($file->getDocument()->getOwner()->getID() == $user->getID())) + array_push($tmp, $file); + return $tmp; + } /* }}} */ + /** * Create a new instance of the dms * @@ -344,7 +363,7 @@ class SeedDMS_Core_DMS { $this->callbacks = array(); $this->version = '@package_version@'; if($this->version[0] == '@') - $this->version = '5.0.11'; + $this->version = '5.1.2'; } /* }}} */ /** @@ -614,6 +633,345 @@ class SeedDMS_Core_DMS { return $version; } /* }}} */ + /** + * Returns all documents with a predefined search criteria + * + * The records return have the following elements + * + * From Table tblDocuments + * [id] => id of document + * [name] => name of document + * [comment] => comment of document + * [date] => timestamp of creation date of document + * [expires] => timestamp of expiration date of document + * [owner] => user id of owner + * [folder] => id of parent folder + * [folderList] => column separated list of folder ids, e.g. :1:41: + * [inheritAccess] => 1 if access is inherited + * [defaultAccess] => default access mode + * [locked] => always -1 (TODO: is this field still used?) + * [keywords] => keywords of document + * [sequence] => sequence of document + * + * From Table tblDocumentLocks + * [lockUser] => id of user locking the document + * + * From Table tblDocumentStatusLog + * [version] => latest version of document + * [statusID] => id of latest status log + * [documentID] => id of document + * [status] => current status of document + * [statusComment] => comment of current status + * [statusDate] => datetime when the status was entered, e.g. 2014-04-17 21:35:51 + * [userID] => id of user who has initiated the status change + * + * From Table tblUsers + * [ownerName] => name of owner of document + * [statusName] => name of user who has initiated the status change + * + * @param string $listtype type of document list, can be 'AppRevByMe', + * 'AppRevOwner', 'ReceiptByMe', 'ReviseByMe', 'LockedByMe', 'MyDocs' + * @param object $param1 user + * @param string $param2 set to true + * if 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' shall return even documents + * І have already taken care of. + * @param string $param3 sort list by this field + * @param string $param4 order direction + * @return array list of documents records + */ + function getDocumentList($listtype, $param1=null, $param2=false, $param3='', $param4='') { /* {{{ */ + /* The following query will get all documents and lots of additional + * information. It requires the two temporary tables ttcontentid and + * ttstatid. + */ + if (!$this->db->createTemporaryTable("ttstatid") || !$this->db->createTemporaryTable("ttcontentid")) { + return false; + } + /* The following statement retrieves the status of the last version of all + * documents. It must be restricted by further where clauses. + */ + $queryStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". + "`tblDocumentContent`.`version`, `tblDocumentStatus`.*, `tblDocumentStatusLog`.`status`, ". + "`tblDocumentStatusLog`.`comment` AS `statusComment`, `tblDocumentStatusLog`.`date` as `statusDate`, ". + "`tblDocumentStatusLog`.`userID`, `oTbl`.`fullName` AS `ownerName`, `sTbl`.`fullName` AS `statusName` ". + "FROM `tblDocumentContent` ". + "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` ". + "LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID` = `tblDocumentContent`.`document` ". + "LEFT JOIN `tblDocumentStatusLog` ON `tblDocumentStatusLog`.`statusID` = `tblDocumentStatus`.`statusID` ". + "LEFT JOIN `ttstatid` ON `ttstatid`.`maxLogID` = `tblDocumentStatusLog`.`statusLogID` ". + "LEFT JOIN `ttcontentid` ON `ttcontentid`.`maxVersion` = `tblDocumentStatus`.`version` AND `ttcontentid`.`document` = `tblDocumentStatus`.`documentID` ". + "LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ". + "LEFT JOIN `tblUsers` AS `oTbl` on `oTbl`.`id` = `tblDocuments`.`owner` ". + "LEFT JOIN `tblUsers` AS `sTbl` on `sTbl`.`id` = `tblDocumentStatusLog`.`userID` ". + "WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ". + "AND `ttcontentid`.`maxVersion` = `tblDocumentContent`.`version` "; + + switch($listtype) { + case 'AppRevByMe': // Documents I have to review/approve {{{ + $user = $param1; + // Get document list for the current user. + $reviewStatus = $user->getReviewStatus(); + $approvalStatus = $user->getApprovalStatus(); + + // Create a comma separated list of all the documentIDs whose information is + // required. + // Take only those documents into account which hasn't be touched by the user + $dList = array(); + foreach ($reviewStatus["indstatus"] as $st) { + if (($st["status"]==0 || $param2) && !in_array($st["documentID"], $dList)) { + $dList[] = $st["documentID"]; + } + } + foreach ($reviewStatus["grpstatus"] as $st) { + if (($st["status"]==0 || $param2) && !in_array($st["documentID"], $dList)) { + $dList[] = $st["documentID"]; + } + } + foreach ($approvalStatus["indstatus"] as $st) { + if (($st["status"]==0 || $param2) && !in_array($st["documentID"], $dList)) { + $dList[] = $st["documentID"]; + } + } + foreach ($approvalStatus["grpstatus"] as $st) { + if (($st["status"]==0 || $param2) && !in_array($st["documentID"], $dList)) { + $dList[] = $st["documentID"]; + } + } + $docCSV = ""; + foreach ($dList as $d) { + $docCSV .= (strlen($docCSV)==0 ? "" : ", ")."'".$d."'"; + } + + if (strlen($docCSV)>0) { + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.", ".S_EXPIRED.") ". + "AND `tblDocuments`.`id` IN (" . $docCSV . ") ". + "ORDER BY `statusDate` DESC"; + } else { + $queryStr = ''; + } + break; // }}} + case 'ReviewByMe': // Documents I have to review {{{ + $user = $param1; + $orderby = $param3; + if($param4 == 'desc') + $orderdir = 'DESC'; + else + $orderdir = 'ASC'; + + // Get document list for the current user. + $reviewStatus = $user->getReviewStatus(); + + // Create a comma separated list of all the documentIDs whose information is + // required. + // Take only those documents into account which hasn't be touched by the user + // ($st["status"]==0) + $dList = array(); + foreach ($reviewStatus["indstatus"] as $st) { + if (($st["status"]==0 || $param2) && !in_array($st["documentID"], $dList)) { + $dList[] = $st["documentID"]; + } + } + foreach ($reviewStatus["grpstatus"] as $st) { + if (($st["status"]==0 || $param2) && !in_array($st["documentID"], $dList)) { + $dList[] = $st["documentID"]; + } + } + $docCSV = ""; + foreach ($dList as $d) { + $docCSV .= (strlen($docCSV)==0 ? "" : ", ")."'".$d."'"; + } + + if (strlen($docCSV)>0) { + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_EXPIRED.") ". + "AND `tblDocuments`.`id` IN (" . $docCSV . ") "; + //$queryStr .= "ORDER BY `statusDate` DESC"; + if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; + else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else $queryStr .= "ORDER BY `name`"; + $queryStr .= " ".$orderdir; + } else { + $queryStr = ''; + } + break; // }}} + case 'ApproveByMe': // Documents I have to approve {{{ + $user = $param1; + $orderby = $param3; + if($param4 == 'desc') + $orderdir = 'DESC'; + else + $orderdir = 'ASC'; + + // Get document list for the current user. + $approvalStatus = $user->getApprovalStatus(); + + // Create a comma separated list of all the documentIDs whose information is + // required. + // Take only those documents into account which hasn't be touched by the user + // ($st["status"]==0) + $dList = array(); + foreach ($approvalStatus["indstatus"] as $st) { + if (($st["status"]==0 || $param2) && !in_array($st["documentID"], $dList)) { + $dList[] = $st["documentID"]; + } + } + foreach ($approvalStatus["grpstatus"] as $st) { + if (($st["status"]==0 || $param2) && !in_array($st["documentID"], $dList)) { + $dList[] = $st["documentID"]; + } + } + $docCSV = ""; + foreach ($dList as $d) { + $docCSV .= (strlen($docCSV)==0 ? "" : ", ")."'".$d."'"; + } + + if (strlen($docCSV)>0) { + $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_APP.", ".S_EXPIRED.") ". + "AND `tblDocuments`.`id` IN (" . $docCSV . ") "; + //$queryStr .= "ORDER BY `statusDate` DESC"; + if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; + else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else $queryStr .= "ORDER BY `name`"; + $queryStr .= " ".$orderdir; + } else { + $queryStr = ''; + } + break; // }}} + case 'WorkflowByMe': // Documents I to trigger in Worklflow {{{ + $user = $param1; + // Get document list for the current user. + $workflowStatus = $user->getWorkflowStatus(); + + // Create a comma separated list of all the documentIDs whose information is + // required. + $dList = array(); + foreach ($workflowStatus["u"] as $st) { + if (!in_array($st["document"], $dList)) { + $dList[] = $st["document"]; + } + } + foreach ($workflowStatus["g"] as $st) { + if (!in_array($st["document"], $dList)) { + $dList[] = $st["document"]; + } + } + $docCSV = ""; + foreach ($dList as $d) { + $docCSV .= (strlen($docCSV)==0 ? "" : ", ")."'".$d."'"; + } + + if (strlen($docCSV)>0) { + $queryStr .= + //"AND `tblDocumentStatusLog`.`status` IN (".S_IN_WORKFLOW.", ".S_EXPIRED.") ". + "AND `tblDocuments`.`id` IN (" . $docCSV . ") ". + "ORDER BY `statusDate` DESC"; + } else { + $queryStr = ''; + } + break; // }}} + case 'AppRevOwner': // Documents waiting for review/approval/revision I'm owning {{{ + $user = $param1; + $orderby = $param3; + if($param4 == 'desc') + $orderdir = 'DESC'; + else + $orderdir = 'ASC'; + $queryStr .= "AND `tblDocuments`.`owner` = '".$user->getID()."' ". + "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.", ".S_IN_REVISION.") "; + if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; + else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else $queryStr .= "ORDER BY `name`"; + $queryStr .= " ".$orderdir; +// $queryStr .= "AND `tblDocuments`.`owner` = '".$user->getID()."' ". +// "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.") ". +// "ORDER BY `statusDate` DESC"; + break; // }}} + case 'RejectOwner': // Documents that has been rejected and I'm owning {{{ + $user = $param1; + $orderby = $param3; + if($param4 == 'desc') + $orderdir = 'DESC'; + else + $orderdir = 'ASC'; + $queryStr .= "AND `tblDocuments`.`owner` = '".$user->getID()."' ". + "AND `tblDocumentStatusLog`.`status` IN (".S_REJECTED.") "; + //$queryStr .= "ORDER BY `statusDate` DESC"; + if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; + else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else $queryStr .= "ORDER BY `name`"; + $queryStr .= " ".$orderdir; + break; // }}} + case 'LockedByMe': // Documents locked by me {{{ + $user = $param1; + $orderby = $param3; + if($param4 == 'desc') + $orderdir = 'DESC'; + else + $orderdir = 'ASC'; + + $qs = 'SELECT `document` FROM `tblDocumentLocks` WHERE `userID`='.$user->getID(); + $ra = $this->db->getResultArray($qs); + if (is_bool($ra) && !$ra) { + return false; + } + $docs = array(); + foreach($ra as $d) { + $docs[] = $d['document']; + } + + if ($docs) { + $queryStr .= "AND `tblDocuments`.`id` IN (" . implode(',', $docs) . ") "; + if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; + else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else $queryStr .= "ORDER BY `name`"; + $queryStr .= " ".$orderdir; + } else { + $queryStr = ''; + } + break; // }}} + case 'WorkflowOwner': // Documents waiting for workflow trigger I'm owning {{{ + $user = $param1; + $queryStr .= "AND `tblDocuments`.`owner` = '".$user->getID()."' ". + "AND `tblDocumentStatusLog`.`status` IN (".S_IN_WORKFLOW.") ". + "ORDER BY `statusDate` DESC"; + break; // }}} + case 'MyDocs': // Documents owned by me {{{ + $user = $param1; + $orderby = $param3; + if($param4 == 'desc') + $orderdir = 'DESC'; + else + $orderdir = 'ASC'; + $queryStr .= "AND `tblDocuments`.`owner` = '".$user->getID()."' "; + if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; + else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; + else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; + else $queryStr .= "ORDER BY `name`"; + $queryStr .= " ".$orderdir; + break; // }}} + } + + if($queryStr) { + $resArr = $this->db->getResultArray($queryStr); + if (is_bool($resArr) && !$resArr) { + return false; + } + /* + $documents = array(); + foreach($resArr as $row) + $documents[] = $this->getDocument($row["id"]); + */ + } else { + return array(); + } + + return $resArr; + } /* }}} */ + function makeTimeStamp($hour, $min, $sec, $year, $month, $day) { /* {{{ */ $thirtyone = array (1, 3, 5, 7, 8, 10, 12); $thirty = array (4, 6, 9, 11); @@ -699,7 +1057,7 @@ class SeedDMS_Core_DMS { $searchKey = ""; $classname = $this->classnames['folder']; - $searchFields = $classname::getSearchFields($searchin); + $searchFields = $classname::getSearchFields($this, $searchin); if (count($searchFields)>0) { foreach ($tkeys as $key) { @@ -840,7 +1198,7 @@ class SeedDMS_Core_DMS { $searchKey = ""; $classname = $this->classnames['document']; - $searchFields = $classname::getSearchFields($searchin); + $searchFields = $classname::getSearchFields($this, $searchin); if (count($searchFields)>0) { foreach ($tkeys as $key) { @@ -1279,16 +1637,19 @@ class SeedDMS_Core_DMS { } if($role == '') $role = '0'; - if(trim($pwdexpiration) == '' || trim($pwdexpiration) == 'never') - $pwdexpiration = '0000-00-00 00:00:00'; - elseif(trim($pwdexpiration) == 'now') - $pwdexpiration = date('Y-m-d H:i:s'); - $queryStr = "INSERT INTO `tblUsers` (`login`, `pwd`, `fullName`, `email`, `language`, `theme`, `comment`, `role`, `hidden`, `disabled`, `pwdExpiration`, `quota`, `homefolder`) VALUES (".$db->qstr($login).", ".$db->qstr($pwd).", ".$db->qstr($fullName).", ".$db->qstr($email).", '".$language."', '".$theme."', ".$db->qstr($comment).", '".intval($role)."', '".intval($isHidden)."', '".intval($isDisabled)."', ".$db->qstr($pwdexpiration).", '".intval($quota)."', ".($homefolder ? intval($homefolder) : "NULL").")"; + if(trim($pwdexpiration) == '' || trim($pwdexpiration) == 'never') { + $pwdexpiration = 'NULL'; + } elseif(trim($pwdexpiration) == 'now') { + $pwdexpiration = $db->qstr(date('Y-m-d H:i:s')); + } else { + $pwdexpiration = $db->qstr($pwdexpiration); + } + $queryStr = "INSERT INTO `tblUsers` (`login`, `pwd`, `fullName`, `email`, `language`, `theme`, `comment`, `role`, `hidden`, `disabled`, `pwdExpiration`, `quota`, `homefolder`) VALUES (".$db->qstr($login).", ".$db->qstr($pwd).", ".$db->qstr($fullName).", ".$db->qstr($email).", '".$language."', '".$theme."', ".$db->qstr($comment).", '".intval($role)."', '".intval($isHidden)."', '".intval($isDisabled)."', ".$pwdexpiration.", '".intval($quota)."', ".($homefolder ? intval($homefolder) : "NULL").")"; $res = $this->db->getResult($queryStr); if (!$res) return false; - $user = $this->getUser($this->db->getInsertID()); + $user = $this->getUser($this->db->getInsertID('tblUsers')); /* Check if 'onPostAddUser' callback is set */ if(isset($this->_dms->callbacks['onPostAddUser'])) { @@ -1350,7 +1711,7 @@ class SeedDMS_Core_DMS { if (!$this->db->getResult($queryStr)) return false; - $group = $this->getGroup($this->db->getInsertID()); + $group = $this->getGroup($this->db->getInsertID('tblGroups')); /* Check if 'onPostAddGroup' callback is set */ if(isset($this->_dms->callbacks['onPostAddGroup'])) { @@ -1439,7 +1800,7 @@ class SeedDMS_Core_DMS { if (!$this->db->getResult($queryStr)) return false; - $category = $this->getKeywordCategory($this->db->getInsertID()); + $category = $this->getKeywordCategory($this->db->getInsertID('tblKeywordCategories')); /* Check if 'onPostAddKeywordCategory' callback is set */ if(isset($this->_dms->callbacks['onPostAddKeywordCategory'])) { @@ -1515,7 +1876,7 @@ class SeedDMS_Core_DMS { if (!$this->db->getResult($queryStr)) return false; - $category = $this->getDocumentCategory($this->db->getInsertID()); + $category = $this->getDocumentCategory($this->db->getInsertID('tblCategory')); /* Check if 'onPostAddDocumentCategory' callback is set */ if(isset($this->_dms->callbacks['onPostAddDocumentCategory'])) { @@ -1714,7 +2075,7 @@ class SeedDMS_Core_DMS { if (!$res) return false; - return $this->getAttributeDefinition($this->db->getInsertID()); + return $this->getAttributeDefinition($this->db->getInsertID('tblAttributeDefinitions')); } /* }}} */ /** @@ -1815,7 +2176,7 @@ class SeedDMS_Core_DMS { if (!$res) return false; - return $this->getWorkflow($db->getInsertID()); + return $this->getWorkflow($db->getInsertID('tblWorkflows')); } /* }}} */ /** @@ -1908,7 +2269,7 @@ class SeedDMS_Core_DMS { if (!$res) return false; - return $this->getWorkflowState($db->getInsertID()); + return $this->getWorkflowState($db->getInsertID('tblWorkflowStates')); } /* }}} */ /** @@ -1998,7 +2359,7 @@ class SeedDMS_Core_DMS { if (!$res) return false; - return $this->getWorkflowAction($db->getInsertID()); + return $this->getWorkflowAction($db->getInsertID('tblWorkflowActions')); } /* }}} */ /** @@ -2049,7 +2410,7 @@ class SeedDMS_Core_DMS { $versions[] = $version; } return $versions; - + } /* }}} */ /** @@ -2073,7 +2434,7 @@ class SeedDMS_Core_DMS { $versions[] = $version; } return $versions; - + } /* }}} */ /** @@ -2097,7 +2458,7 @@ class SeedDMS_Core_DMS { $versions[] = $version; } return $versions; - + } /* }}} */ /** @@ -2108,7 +2469,7 @@ class SeedDMS_Core_DMS { * in version 4.0.0 of SeedDMS for finding duplicates. */ function getDuplicateDocumentContent() { /* {{{ */ - $queryStr = "SELECT a.*, b.`id` as dupid FROM `tblDocumentContent` a LEFT JOIN `tblDocumentContent` b ON a.`checksum`=b.`checksum` where a.`id`!=b.`id` ORDER by a.`id`"; + $queryStr = "SELECT a.*, b.`id` as dupid FROM `tblDocumentContent` a LEFT JOIN `tblDocumentContent` b ON a.`checksum`=b.`checksum` where a.`id`!=b.`id` ORDER by a.`id` LIMIT 1000"; $resArr = $this->db->getResultArray($queryStr); if (!$resArr) return false; @@ -2124,7 +2485,7 @@ class SeedDMS_Core_DMS { $versions[$row['dupid']]['duplicates'][] = $version; } return $versions; - + } /* }}} */ /** @@ -2280,11 +2641,11 @@ class SeedDMS_Core_DMS { foreach ($record as $column) { if (is_numeric($column)) $values .= $column; else $values .= $this->db->qstr($column); - + if ($i<(count($record))) $values .= ","; $i++; } - + fwrite($h, "INSERT INTO `".$table."` VALUES (".$values.");\n"); } } diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index e4d9a94b8..423313670 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -175,7 +175,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * 4=attributes) * @return array list of database fields */ - public static function getSearchFields($searchin) { /* {{{ */ + public static function getSearchFields($dms, $searchin) { /* {{{ */ + $db = $dms->getDB(); + $searchFields = array(); if (in_array(1, $searchin)) { $searchFields[] = "`tblDocuments`.`keywords`"; @@ -192,7 +194,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $searchFields[] = "`tblDocumentContentAttributes`.`value`"; } if (in_array(5, $searchin)) { - $searchFields[] = "`tblDocuments`.`id`"; + $searchFields[] = $db->castToText("`tblDocuments`.`id`"); } return $searchFields; @@ -1242,7 +1244,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return false; } - $contentID = $db->getInsertID(); + $contentID = $db->getInsertID('tblDocumentContent'); // copy file if (!SeedDMS_Core_File::makeDir($this->_dms->contentDir . $dir)) { @@ -1269,7 +1271,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /* $attribute can be a string or an array */ if($attribute) if(!$content->setAttributeValue($this->_dms->getAttributeDefinition($attrdefid), $attribute)) { - $this->removeContent($content); + $this->_removeContent($content); $db->rollbackTransaction(); return false; } @@ -1283,12 +1285,12 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $queryStr = "INSERT INTO `tblDocumentStatus` (`documentID`, `version`) ". "VALUES (". $this->_id .", ". (int) $version .")"; if (!$db->getResult($queryStr)) { - $this->removeContent($content); + $this->_removeContent($content); $db->rollbackTransaction(); return false; } - $statusID = $db->getInsertID(); + $statusID = $db->getInsertID('tblDocumentStatus', 'statusID'); if($workflow) $content->setWorkflow($workflow, $user); @@ -1510,7 +1512,13 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $this->_latestContent; } /* }}} */ - function removeContent($version) { /* {{{ */ + /** + * Remove version of document + * + * @param interger $version version number of content + * @return boolean true if successful, otherwise false + */ + private function _removeContent($version) { /* {{{ */ $db = $this->_dms->getDB(); if (file_exists( $this->_dms->contentDir.$version->getPath() )) @@ -1621,6 +1629,36 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return true; } /* }}} */ + /** + * Call callback onPreRemoveDocument before deleting content + * + * @param integer $version version number of content + */ + function removeContent($version) { /* {{{ */ + /* Check if 'onPreRemoveDocument' callback is set */ + if(isset($this->_dms->callbacks['onPreRemoveContent'])) { + foreach($this->_dms->callbacks['onPreRemoveContent'] as $callback) { + $ret = call_user_func($callback[0], $callback[1], $this, $version); + if(is_bool($ret)) + return $ret; + } + } + + if(false === ($ret = self::_removeContent($version))) { + return false; + } + + /* Check if 'onPostRemoveDocument' callback is set */ + if(isset($this->_dms->callbacks['onPostRemoveContent'])) { + foreach($this->_dms->callbacks['onPostRemoveContent'] as $callback) { + if(!call_user_func($callback[0], $callback[1], $version)) { + } + } + } + + return $ret; + } /* }}} */ + /** * Return a certain document link * @@ -1762,36 +1800,44 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ if ((is_bool($resArr) && !$resArr) || count($resArr)==0) return false; $resArr = $resArr[0]; - return new SeedDMS_Core_DocumentFile($resArr["id"], $this, $resArr["userID"], $resArr["comment"], $resArr["date"], $resArr["dir"], $resArr["fileType"], $resArr["mimeType"], $resArr["orgFileName"], $resArr["name"]); + return new SeedDMS_Core_DocumentFile($resArr["id"], $this, $resArr["userID"], $resArr["comment"], $resArr["date"], $resArr["dir"], $resArr["fileType"], $resArr["mimeType"], $resArr["orgFileName"], $resArr["name"],$resArr["version"],$resArr["public"]); } /* }}} */ - function getDocumentFiles() { /* {{{ */ + function getDocumentFiles($version=0) { /* {{{ */ if (!isset($this->_documentFiles)) { $db = $this->_dms->getDB(); - $queryStr = "SELECT * FROM `tblDocumentFiles` WHERE `document` = " . $this->_id." ORDER BY `date` DESC"; + $queryStr = "SELECT * FROM `tblDocumentFiles` WHERE `document` = " . $this->_id; + if($version) { + $queryStr .= " AND (`version`=0 OR `version`=".(int) $version.")"; + } + $queryStr .= " ORDER BY "; + if($version) { + $queryStr .= "`version` DESC,"; + } + $queryStr .= "`date` DESC"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) return false; $this->_documentFiles = array(); foreach ($resArr as $row) { - array_push($this->_documentFiles, new SeedDMS_Core_DocumentFile($row["id"], $this, $row["userID"], $row["comment"], $row["date"], $row["dir"], $row["fileType"], $row["mimeType"], $row["orgFileName"], $row["name"])); + array_push($this->_documentFiles, 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"])); } } return $this->_documentFiles; } /* }}} */ - function addDocumentFile($name, $comment, $user, $tmpFile, $orgFileName,$fileType, $mimeType ) { /* {{{ */ + function addDocumentFile($name, $comment, $user, $tmpFile, $orgFileName,$fileType, $mimeType,$version=0,$public=1) { /* {{{ */ $db = $this->_dms->getDB(); $dir = $this->getDir(); - $queryStr = "INSERT INTO `tblDocumentFiles` (`comment`, `date`, `dir`, `document`, `fileType`, `mimeType`, `orgFileName`, `userID`, `name`) VALUES ". - "(".$db->qstr($comment).", ".$db->getCurrentTimestamp().", ".$db->qstr($dir).", ".$this->_id.", ".$db->qstr($fileType).", ".$db->qstr($mimeType).", ".$db->qstr($orgFileName).",".$user->getID().",".$db->qstr($name).")"; + $queryStr = "INSERT INTO `tblDocumentFiles` (`comment`, `date`, `dir`, `document`, `fileType`, `mimeType`, `orgFileName`, `userID`, `name`, `version`, `public`) VALUES ". + "(".$db->qstr($comment).", ".$db->getCurrentTimestamp().", ".$db->qstr($dir).", ".$this->_id.", ".$db->qstr($fileType).", ".$db->qstr($mimeType).", ".$db->qstr($orgFileName).",".$user->getID().",".$db->qstr($name).", ".((int) $version).", ".($public ? 1 : 0).")"; if (!$db->getResult($queryStr)) return false; - $id = $db->getInsertID(); + $id = $db->getInsertID('tblDocumentFiles'); $file = $this->getDocumentFile($id); if (is_bool($file) && !$file) return false; @@ -1851,9 +1897,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /* Check if 'onPreRemoveDocument' callback is set */ if(isset($this->_dms->callbacks['onPreRemoveDocument'])) { foreach($this->_dms->callbacks['onPreRemoveDocument'] as $callback) { - if(!call_user_func($callback[0], $callback[1], $this)) { - return false; - } + $ret = call_user_func($callback[0], $callback[1], $this); + if(is_bool($ret)) + return $ret; } } @@ -1864,7 +1910,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ // remove content of document foreach ($this->_content as $version) { - if (!$this->removeContent($version)) { + if (!$this->_removeContent($version)) { $db->rollbackTransaction(); return false; } @@ -2788,7 +2834,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db->rollbackTransaction(); return false; } - $reviewID = $db->getInsertID(); + $reviewID = $db->getInsertID('tblDocumentReviewers', 'reviewID'); $reviewlog = array_reverse($review['logs']); foreach($reviewlog as $log) { if(!SeedDMS_Core_DMS::checkDate($log['date'], 'Y-m-d H:i:s')) { @@ -2801,7 +2847,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db->rollbackTransaction(); return false; } - $reviewLogID = $db->getInsertID(); + $reviewLogID = $db->getInsertID('tblDocumentReviewLog', 'reviewLogID'); if(!empty($log['file'])) { SeedDMS_Core_File::copyFile($log['file'], $this->_dms->contentDir . $this->_document->getDir() . 'r' . $reviewLogID); } @@ -2916,7 +2962,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db->rollbackTransaction(); return false; } - $reviewID = $db->getInsertID(); + $reviewID = $db->getInsertID('tblDocumentApprovers', 'approveID'); $reviewlog = array_reverse($review['logs']); foreach($reviewlog as $log) { if(!SeedDMS_Core_DMS::checkDate($log['date'], 'Y-m-d H:i:s')) { @@ -2929,7 +2975,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db->rollbackTransaction(); return false; } - $approveLogID = $db->getInsertID(); + $approveLogID = $db->getInsertID('tblDocumentApproveLog', 'approveLogID'); if(!empty($log['file'])) { SeedDMS_Core_File::copyFile($log['file'], $this->_dms->contentDir . $this->_document->getDir() . 'a' . $approveLogID); } @@ -2987,7 +3033,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (is_bool($res) && !$res) { return -1; } - $reviewID = $db->getInsertID(); + $reviewID = $db->getInsertID('tblDocumentReviewers', 'reviewID'); } else { $reviewID = isset($indstatus["reviewID"]) ? $indstatus["reviewID"] : NULL; @@ -3045,7 +3091,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (is_bool($res) && !$res) { return -1; } - $reviewID = $db->getInsertID(); + $reviewID = $db->getInsertID('tblDocumentReviewers', 'reviewID'); } else { $reviewID = isset($reviewStatus[0]["reviewID"])?$reviewStatus[0]["reviewID"]:NULL; @@ -3115,7 +3161,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (is_bool($res) && !$res) return -1; - $reviewLogID = $db->getInsertID(); + $reviewLogID = $db->getInsertID('tblDocumentReviewLog', 'reviewLogID'); if($file) { SeedDMS_Core_File::copyFile($file, $this->_dms->contentDir . $this->_document->getDir() . 'r' . $reviewLogID); } @@ -3167,7 +3213,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (is_bool($res) && !$res) return -1; else { - $reviewLogID = $db->getInsertID(); + $reviewLogID = $db->getInsertID('tblDocumentReviewLog', 'reviewLogID'); if($file) { SeedDMS_Core_File::copyFile($file, $this->_dms->contentDir . $this->_document->getDir() . 'r' . $reviewLogID); } @@ -3220,7 +3266,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (is_bool($res) && !$res) { return -1; } - $approveID = $db->getInsertID(); + $approveID = $db->getInsertID('tblDocumentApprovers', 'approveID'); } else { $approveID = isset($indstatus["approveID"]) ? $indstatus["approveID"] : NULL; @@ -3233,7 +3279,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return -1; } - $approveLogID = $db->getInsertID(); + $approveLogID = $db->getInsertID('tblDocumentApproveLog', 'approveLogID'); return $approveLogID; } /* }}} */ @@ -3276,7 +3322,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (is_bool($res) && !$res) { return -1; } - $approveID = $db->getInsertID(); + $approveID = $db->getInsertID('tblDocumentApprovers', 'approveID'); } else { $approveID = isset($approvalStatus[0]["approveID"])?$approvalStatus[0]["approveID"]:NULL; @@ -3292,7 +3338,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ // Add approver to event notification table. //$this->_document->addNotify($groupID, false); - $approveLogID = $db->getInsertID(); + $approveLogID = $db->getInsertID('tblDocumentApproveLog', 'approveLogID'); return $approveLogID; } /* }}} */ @@ -3350,7 +3396,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (is_bool($res) && !$res) return -1; - $approveLogID = $db->getInsertID(); + $approveLogID = $db->getInsertID('tblDocumentApproveLog', 'approveLogID'); if($file) { SeedDMS_Core_File::copyFile($file, $this->_dms->contentDir . $this->_document->getDir() . 'a' . $approveLogID); } @@ -3394,7 +3440,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (is_bool($res) && !$res) return -1; - $approveLogID = $db->getInsertID(); + $approveLogID = $db->getInsertID('tblDocumentApproveLog', 'approveLogID'); if($file) { SeedDMS_Core_File::copyFile($file, $this->_dms->contentDir . $this->_document->getDir() . 'a' . $approveLogID); } @@ -4370,6 +4416,16 @@ class SeedDMS_Core_DocumentFile { /* {{{ */ */ protected $_date; + /** + * @var integer version of document this file is attached to + */ + protected $_version; + + /** + * @var integer 1 if this link is public, or 0 if is only visible to the owner + */ + protected $_public; + /** * @var string directory where the file is stored. This is the * document id with a proceding '/'. @@ -4398,7 +4454,7 @@ class SeedDMS_Core_DocumentFile { /* {{{ */ */ protected $_name; - function __construct($id, $document, $userID, $comment, $date, $dir, $fileType, $mimeType, $orgFileName,$name) { + function __construct($id, $document, $userID, $comment, $date, $dir, $fileType, $mimeType, $orgFileName,$name,$version,$public) { $this->_id = $id; $this->_document = $document; $this->_userID = $userID; @@ -4409,6 +4465,8 @@ class SeedDMS_Core_DocumentFile { /* {{{ */ $this->_mimeType = $mimeType; $this->_orgFileName = $orgFileName; $this->_name = $name; + $this->_version = $version; + $this->_public = $public; } function getID() { return $this->_id; } @@ -4432,6 +4490,10 @@ class SeedDMS_Core_DocumentFile { /* {{{ */ return $this->_document->getDir() . "f" .$this->_id . $this->_fileType; } + function getVersion() { return $this->_version; } + + function isPublic() { return $this->_public; } + } /* }}} */ // diff --git a/SeedDMS_Core/Core/inc.ClassFolder.php b/SeedDMS_Core/Core/inc.ClassFolder.php index 42c992d5c..983d5ca49 100644 --- a/SeedDMS_Core/Core/inc.ClassFolder.php +++ b/SeedDMS_Core/Core/inc.ClassFolder.php @@ -95,7 +95,9 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * 4=attributes) * @return array list of database fields */ - public static function getSearchFields($searchin) { /* {{{ */ + public static function getSearchFields($dms, $searchin) { /* {{{ */ + $db = $dms->getDB(); + $searchFields = array(); if (in_array(2, $searchin)) { $searchFields[] = "`tblFolders`.`name`"; @@ -107,7 +109,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $searchFields[] = "`tblFolderAttributes`.`value`"; } if (in_array(5, $searchin)) { - $searchFields[] = "`tblFolders`.`id`"; + $searchFields[] = $db->castToText("`tblFolders`.`id`"); } return $searchFields; } /* }}} */ @@ -520,7 +522,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $db->rollbackTransaction(); return false; } - $newFolder = $this->_dms->getFolder($db->getInsertID()); + $newFolder = $this->_dms->getFolder($db->getInsertID('tblFolders')); unset($this->_subFolders); if($attributes) { @@ -825,7 +827,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return false; } - $document = $this->_dms->getDocument($db->getInsertID()); + $document = $this->_dms->getDocument($db->getInsertID('tblDocuments')); // if ($version_comment!="") $res = $document->addContent($version_comment, $owner, $tmpFile, $orgFileName, $fileType, $mimeType, $reviewers, $approvers, $reqversion, $version_attributes, $workflow); @@ -880,9 +882,9 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { /* Check if 'onPreRemoveFolder' callback is set */ if(isset($this->_dms->callbacks['onPreRemoveFolder'])) { foreach($this->_dms->callbacks['onPreRemoveFolder'] as $callback) { - if(!call_user_func($callback[0], $callback[1], $this)) { - return false; - } + $ret = call_user_func($callback[0], $callback[1], $this); + if(is_bool($ret)) + return $ret; } } diff --git a/SeedDMS_Core/Core/inc.ClassObject.php b/SeedDMS_Core/Core/inc.ClassObject.php index e0cd1cbfb..4a9df2a30 100644 --- a/SeedDMS_Core/Core/inc.ClassObject.php +++ b/SeedDMS_Core/Core/inc.ClassObject.php @@ -223,12 +223,15 @@ class SeedDMS_Core_Object { /* {{{ */ if(!isset($this->_attributes[$attrdef->getId()])) { switch(get_class($this)) { case $this->_dms->getClassname('document'): + $tablename = 'tblDocumentAttributes'; $queryStr = "INSERT INTO `tblDocumentAttributes` (`document`, `attrdef`, `value`) VALUES (".$this->_id.", ".$attrdef->getId().", ".$db->qstr($value).")"; break; case $this->_dms->getClassname('documentcontent'): + $tablename = 'tblDocumentContentAttributes'; $queryStr = "INSERT INTO `tblDocumentContentAttributes` (`content`, `attrdef`, `value`) VALUES (".$this->_id.", ".$attrdef->getId().", ".$db->qstr($value).")"; break; case $this->_dms->getClassname('folder'): + $tablename = 'tblFolderAttributes'; $queryStr = "INSERT INTO `tblFolderAttributes` (`folder`, `attrdef`, `value`) VALUES (".$this->_id.", ".$attrdef->getId().", ".$db->qstr($value).")"; break; default: @@ -238,7 +241,7 @@ class SeedDMS_Core_Object { /* {{{ */ if (!$res) return false; - $attr = new SeedDMS_Core_Attribute($db->getInsertID(), $this, $attrdef, $value); + $attr = new SeedDMS_Core_Attribute($db->getInsertID($tablename), $this, $attrdef, $value); $attr->setDMS($this->_dms); $this->_attributes[$attrdef->getId()] = $attr; return true; diff --git a/SeedDMS_Core/Core/inc.ClassUser.php b/SeedDMS_Core/Core/inc.ClassUser.php index 87e951d82..567f45458 100644 --- a/SeedDMS_Core/Core/inc.ClassUser.php +++ b/SeedDMS_Core/Core/inc.ClassUser.php @@ -134,7 +134,7 @@ class SeedDMS_Core_User { /* {{{ */ const role_admin = '1'; const role_guest = '2'; - function __construct($id, $login, $pwd, $fullName, $email, $language, $theme, $comment, $role, $isHidden=0, $isDisabled=0, $pwdExpiration='0000-00-00 00:00:00', $loginFailures=0, $quota=0, $homeFolder=null) { + function __construct($id, $login, $pwd, $fullName, $email, $language, $theme, $comment, $role, $isHidden=0, $isDisabled=0, $pwdExpiration='', $loginFailures=0, $quota=0, $homeFolder=null) { $this->_id = $id; $this->_login = $login; $this->_pwd = $pwd; @@ -268,11 +268,13 @@ class SeedDMS_Core_User { /* {{{ */ function setPwdExpiration($newPwdExpiration) { /* {{{ */ $db = $this->_dms->getDB(); - if(trim($newPwdExpiration) == '' || trim($newPwdExpiration) == 'never') - $newPwdExpiration = '0000-00-00 00:00:00'; - elseif(trim($newPwdExpiration) == 'now') - $newPwdExpiration = date('Y-m-d H:i:s'); - $queryStr = "UPDATE `tblUsers` SET `pwdExpiration` =".$db->qstr($newPwdExpiration)." WHERE `id` = " . $this->_id; + if(trim($newPwdExpiration) == '' || trim($newPwdExpiration) == 'never') { + $queryStr = "UPDATE `tblUsers` SET `pwdExpiration` = NULL WHERE `id` = " . $this->_id; + } else { + if(trim($newPwdExpiration) == 'now') + $newPwdExpiration = date('Y-m-d H:i:s'); + $queryStr = "UPDATE `tblUsers` SET `pwdExpiration` =".$db->qstr($newPwdExpiration)." WHERE `id` = " . $this->_id; + } $res = $db->getResult($queryStr); if (!$res) return false; diff --git a/SeedDMS_Core/Core/inc.ClassWorkflow.php b/SeedDMS_Core/Core/inc.ClassWorkflow.php index 579098427..474ae3c3c 100644 --- a/SeedDMS_Core/Core/inc.ClassWorkflow.php +++ b/SeedDMS_Core/Core/inc.ClassWorkflow.php @@ -264,7 +264,7 @@ class SeedDMS_Core_Workflow { /* {{{ */ * transitions are added in a row, without reloading the workflow */ $this->_transitions = array(); - $transition = $this->getTransition($db->getInsertID()); + $transition = $this->getTransition($db->getInsertID('tblWorkflowTransitions')); foreach($users as $user) { $queryStr = "INSERT INTO `tblWorkflowTransitionUsers` (`transition`, `userid`) VALUES (".$transition->getID().", ".$user->getID().")"; diff --git a/SeedDMS_Core/Core/inc.DBAccessPDO.php b/SeedDMS_Core/Core/inc.DBAccessPDO.php index f59355cd3..8dc8a2e63 100644 --- a/SeedDMS_Core/Core/inc.DBAccessPDO.php +++ b/SeedDMS_Core/Core/inc.DBAccessPDO.php @@ -38,7 +38,7 @@ class SeedDMS_Core_DatabaseAccess { protected $_hostname; /** - * @var int port number of database + * @var int port number of database */ protected $_port; @@ -91,7 +91,17 @@ class SeedDMS_Core_DatabaseAccess { * @var boolean set to true if in a database transaction */ private $_intransaction; - + + /** + * @var string set a valid file name for logging all sql queries + */ + private $_logfile; + + /** + * @var resource file pointer of log file + */ + private $_logfp; + /** * Return list of all database tables * @@ -107,6 +117,9 @@ class SeedDMS_Core_DatabaseAccess { case 'sqlite': $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'"; + break; default: return false; } @@ -139,6 +152,13 @@ class SeedDMS_Core_DatabaseAccess { $this->_user = $user; $this->_passw = $passw; $this->_connected = false; + $this->_logfile = ''; + if($this->_logfile) { + $this->_logfp = fopen($this->_logfile, 'a+'); + if($this->_logfp) + fwrite($this->_logfp, microtime()." BEGIN ------------------------------------------\n"); + } else + $this->_logfp = null; // $tt*****id is a hack to ensure that we do not try to create the // temporary table twice during a single connection. Can be fixed by // using Views (MySQL 5.0 onward) instead of temporary tables. @@ -154,6 +174,25 @@ class SeedDMS_Core_DatabaseAccess { $this->_debug = false; } /* }}} */ + /** + * Return driver + * + * @return string name of driver as set in constructor + */ + public function getDriver() { /* {{{ */ + return $this->_driver; + } /* }}} */ + + /** + * Destructor of SeedDMS_Core_DatabaseAccess + */ + function __destruct() { /* {{{ */ + if($this->_logfp) { + fwrite($this->_logfp, microtime()." END --------------------------------------------\n"); + fclose($this->_logfp); + } + } /* }}} */ + /** * Connect to database * @@ -164,6 +203,7 @@ class SeedDMS_Core_DatabaseAccess { case 'mysql': case 'mysqli': case 'mysqlnd': + case 'pgsql': $dsn = $this->_driver.":dbname=".$this->_database.";host=".$this->_hostname; if($this->_port) $dsn .= ";port=".$this->_port; @@ -220,7 +260,7 @@ class SeedDMS_Core_DatabaseAccess { * @return string sanitized string */ function rbt($text) { /* {{{ */ - return str_replace('`', '"'); + return str_replace('`', '"', $text); } /* }}} */ /** @@ -231,9 +271,16 @@ class SeedDMS_Core_DatabaseAccess { * @param string $queryStr sql query * @return array/boolean data if query could be executed otherwise false */ - function getResultArray($queryStr) { /* {{{ */ + function getResultArray($queryStr, $retick=true) { /* {{{ */ $resArr = array(); + if($retick && $this->_driver == 'pgsql') { + $queryStr = $this->rbt($queryStr); + } + + if($this->_logfp) { + fwrite($this->_logfp, microtime()." ".$queryStr."\n"); + } $res = $this->_conn->query($queryStr); if ($res === false) { if($this->_debug) @@ -251,11 +298,17 @@ class SeedDMS_Core_DatabaseAccess { * Call this function only with sql query which do not return data records. * * @param string $queryStr sql query - * @param boolean $silent not used anymore. This was used when this method - * still issued an error message + * @param boolean $retick replace all '`' by '"' * @return boolean true if query could be executed otherwise false */ - function getResult($queryStr, $silent=false) { /* {{{ */ + function getResult($queryStr, $retick=true) { /* {{{ */ + if($retick && $this->_driver == 'pgsql') { + $queryStr = $this->rbt($queryStr); + } + + if($this->_logfp) { + fwrite($this->_logfp, microtime()." ".$queryStr."\n"); + } $res = $this->_conn->exec($queryStr); if($res === false) { if($this->_debug) @@ -263,7 +316,7 @@ class SeedDMS_Core_DatabaseAccess { return false; } else return true; - + return $res; } /* }}} */ @@ -293,8 +346,11 @@ class SeedDMS_Core_DatabaseAccess { * * @return integer id used in last autoincrement */ - function getInsertID() { /* {{{ */ - return $this->_conn->lastInsertId(); + function getInsertID($tablename='', $fieldname='id') { /* {{{ */ + if($this->_driver == 'pgsql') + return $this->_conn->lastInsertId('"'.$tablename.'_'.$fieldname.'_seq"'); + else + return $this->_conn->lastInsertId(); } /* }}} */ function getErrorMsg() { /* {{{ */ @@ -317,16 +373,24 @@ class SeedDMS_Core_DatabaseAccess { "SELECT `tblDocumentReviewLog`.`reviewID`, ". "MAX(`tblDocumentReviewLog`.`reviewLogID`) AS `maxLogID` ". "FROM `tblDocumentReviewLog` ". - "GROUP BY `tblDocumentReviewLog`.`reviewID` ". - "ORDER BY `maxLogID`"; + "GROUP BY `tblDocumentReviewLog`.`reviewID` "; //. +// "ORDER BY `maxLogID`"; + break; + case 'pgsql': + $queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttreviewid` (`reviewID` INTEGER, `maxLogID` INTEGER, PRIMARY KEY (`reviewID`));". + "INSERT INTO `ttreviewid` SELECT `tblDocumentReviewLog`.`reviewID`, ". + "MAX(`tblDocumentReviewLog`.`reviewLogID`) AS `maxLogID` ". + "FROM `tblDocumentReviewLog` ". + "GROUP BY `tblDocumentReviewLog`.`reviewID` ";//. +// "ORDER BY `maxLogID`"; break; default: $queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttreviewid` (PRIMARY KEY (`reviewID`), INDEX (`maxLogID`)) ". "SELECT `tblDocumentReviewLog`.`reviewID`, ". "MAX(`tblDocumentReviewLog`.`reviewLogID`) AS `maxLogID` ". "FROM `tblDocumentReviewLog` ". - "GROUP BY `tblDocumentReviewLog`.`reviewID` ". - "ORDER BY `maxLogID`"; + "GROUP BY `tblDocumentReviewLog`.`reviewID` "; //. +// "ORDER BY `maxLogID`"; } if (!$this->_ttreviewid) { if (!$this->getResult($queryStr)) @@ -350,16 +414,24 @@ class SeedDMS_Core_DatabaseAccess { "SELECT `tblDocumentApproveLog`.`approveID`, ". "MAX(`tblDocumentApproveLog`.`approveLogID`) AS `maxLogID` ". "FROM `tblDocumentApproveLog` ". - "GROUP BY `tblDocumentApproveLog`.`approveID` ". - "ORDER BY `maxLogID`"; + "GROUP BY `tblDocumentApproveLog`.`approveID` "; //. +// "ORDER BY `maxLogID`"; + break; + case 'pgsql': + $queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttapproveid` (`approveID` INTEGER, `maxLogID` INTEGER, PRIMARY KEY (`approveID`));". + "INSERT INTO `ttapproveid` SELECT `tblDocumentApproveLog`.`approveID`, ". + "MAX(`tblDocumentApproveLog`.`approveLogID`) AS `maxLogID` ". + "FROM `tblDocumentApproveLog` ". + "GROUP BY `tblDocumentApproveLog`.`approveID` "; //. +// "ORDER BY `maxLogID`"; break; default: $queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttapproveid` (PRIMARY KEY (`approveID`), INDEX (`maxLogID`)) ". "SELECT `tblDocumentApproveLog`.`approveID`, ". "MAX(`tblDocumentApproveLog`.`approveLogID`) AS `maxLogID` ". "FROM `tblDocumentApproveLog` ". - "GROUP BY `tblDocumentApproveLog`.`approveID` ". - "ORDER BY `maxLogID`"; + "GROUP BY `tblDocumentApproveLog`.`approveID` "; //. +// "ORDER BY `maxLogID`"; } if (!$this->_ttapproveid) { if (!$this->getResult($queryStr)) @@ -383,16 +455,24 @@ class SeedDMS_Core_DatabaseAccess { "SELECT `tblDocumentStatusLog`.`statusID` AS `statusID`, ". "MAX(`tblDocumentStatusLog`.`statusLogID`) AS `maxLogID` ". "FROM `tblDocumentStatusLog` ". - "GROUP BY `tblDocumentStatusLog`.`statusID` ". - "ORDER BY `maxLogID`"; + "GROUP BY `tblDocumentStatusLog`.`statusID` "; //. +// "ORDER BY `maxLogID`"; + break; + case 'pgsql': + $queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttstatid` (`statusID` INTEGER, `maxLogID` INTEGER, PRIMARY KEY (`statusID`));". + "INSERT INTO `ttstatid` SELECT `tblDocumentStatusLog`.`statusID`, ". + "MAX(`tblDocumentStatusLog`.`statusLogID`) AS `maxLogID` ". + "FROM `tblDocumentStatusLog` ". + "GROUP BY `tblDocumentStatusLog`.`statusID` "; //. +// "ORDER BY `maxLogID`"; break; default: $queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttstatid` (PRIMARY KEY (`statusID`), INDEX (`maxLogID`)) ". "SELECT `tblDocumentStatusLog`.`statusID`, ". "MAX(`tblDocumentStatusLog`.`statusLogID`) AS `maxLogID` ". "FROM `tblDocumentStatusLog` ". - "GROUP BY `tblDocumentStatusLog`.`statusID` ". - "ORDER BY `maxLogID`"; + "GROUP BY `tblDocumentStatusLog`.`statusID` "; //. +// "ORDER BY `maxLogID`"; } if (!$this->_ttstatid) { if (!$this->getResult($queryStr)) @@ -419,6 +499,14 @@ class SeedDMS_Core_DatabaseAccess { "GROUP BY `tblDocumentContent`.`document` ". "ORDER BY `tblDocumentContent`.`document`"; break; + case 'pgsql': + $queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttcontentid` (`document` INTEGER, `maxVersion` INTEGER, PRIMARY KEY (`document`)); ". + "INSERT INTO `ttcontentid` SELECT `tblDocumentContent`.`document` AS `document`, ". + "MAX(`tblDocumentContent`.`version`) AS `maxVersion` ". + "FROM `tblDocumentContent` ". + "GROUP BY `tblDocumentContent`.`document` ". + "ORDER BY `tblDocumentContent`.`document`"; + break; default: $queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttcontentid` (PRIMARY KEY (`document`), INDEX (`maxVersion`)) ". "SELECT `tblDocumentContent`.`document`, ". @@ -460,6 +548,16 @@ class SeedDMS_Core_DatabaseAccess { case 'sqlite': return "strftime(".$this->qstr($format).", `".$fieldname."`, 'unixepoch')"; break; + case 'pgsql': + switch($format) { + case '%Y-%m': + return "to_char(to_timestamp(`".$fieldname."`), 'YYYY-MM')"; + break; + default: + return "to_char(to_timestamp(`".$fieldname."`), 'YYYY-MM-DD')"; + break; + } + break; } return ''; } /* }}} */ @@ -478,6 +576,9 @@ class SeedDMS_Core_DatabaseAccess { case 'sqlite': return "datetime('now', 'localtime')"; break; + case 'pgsql': + return "now()"; + break; } return ''; } /* }}} */ @@ -495,9 +596,26 @@ class SeedDMS_Core_DatabaseAccess { case 'sqlite': return "strftime('%s', 'now')"; break; + case 'pgsql': + return "date_part('epoch',CURRENT_TIMESTAMP)::int"; + break; } return ''; } /* }}} */ + + /** + * Return sql statement for returning the current timestamp + * + * @return string sql code + */ + function castToText($field) { /* {{{ */ + switch($this->_driver) { + case 'pgsql': + return $field."::TEXT"; + break; + } + return $field; + } /* }}} */ } ?> diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 8e588c5dc..df18b1ea9 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,11 +12,11 @@ uwe@steinmann.cx yes - 2017-02-28 - + 2017-03-23 + - 5.0.11 - 5.0.11 + 5.1.2 + 5.1.2 stable @@ -24,7 +24,13 @@ GPL License -SeedDMS_Core_DMS::getDuplicateDocumentContent() returns complete document +SeedDMS_Core_DMS::filterDocumentFiles() returns also documents which are not public +if the owner tries to access them +Check return value of onPreRemove[Document|Folder], return from calling method if bool +Add SeedDMS_Core_DMS::getDocumentList() +Limit number of duplicate files to 1000 +Add hook on(Pre|Post)RemoveContent +Add hook onAttributeValidate @@ -1179,6 +1185,23 @@ SeedDMS_Core_DMS::getNotificationsByUser() are deprecated GPL License +SeedDMS_Core_DMS::getDuplicateDocumentContent() returns complete document + + + + 2017-03-23 + + + 4.3.35 + 4.3.35 + + + stable + stable + + GPL License + +do not sort some temporary tables anymore, because it causes an error in mysql if sql_mode=only_full_group_by is set @@ -1343,5 +1366,70 @@ SeedDMS_Core_DMS::getNotificationsByUser() are deprecated - all changes from 4.3.33 merged + + 2017-02-28 + + + 5.0.11 + 5.0.11 + + + stable + stable + + GPL License + +- all changes from 4.3.34 merged + + + + 2017-07-10 + + + 5.0.12 + 5.0.12 + + + stable + stable + + GPL License + +all sql statements can be logged to a file +do not sort some temporary tables anymore, because it causes an error in mysql if sql_mode=only_full_group_by is set + + + + 2017-02-20 + + + 5.1.0 + 5.1.0 + + + stable + stable + + GPL License + +- added postgres support + + + + 2017-02-20 + + + 5.1.1 + 5.1.1 + + + stable + stable + + GPL License + +- all changes from 5.0.11 merged + + diff --git a/controllers/class.AddDocument.php b/controllers/class.AddDocument.php new file mode 100644 index 000000000..7fc97b1a4 --- /dev/null +++ b/controllers/class.AddDocument.php @@ -0,0 +1,121 @@ + + * @copyright Copyright (C) 2010-2013 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Class which does the busines logic for downloading a document + * + * @category DMS + * @package SeedDMS + * @author Uwe Steinmann + * @copyright Copyright (C) 2010-2013 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common { + + public function run() { /* {{{ */ + $name = $this->getParam('name'); + $comment = $this->getParam('comment'); + + /* Call preAddDocument early, because it might need to modify some + * of the parameters. + */ + if(false === $this->callHook('preAddDocument', array('name'=>&$name, 'comment'=>&$comment))) { + if(empty($this->errormsg)) + $this->errormsg = 'hook_preAddDocument_failed'; + return null; + } + + $name = $this->getParam('name'); + $comment = $this->getParam('comment'); + $dms = $this->params['dms']; + $user = $this->params['user']; + $settings = $this->params['settings']; + $documentsource = $this->params['documentsource']; + $index = $this->params['index']; + $indexconf = $this->params['indexconf']; + $folder = $this->params['folder']; + $expires = $this->getParam('expires'); + $keywords = $this->getParam('keywords'); + $cats = $this->getParam('categories'); + $owner = $this->getParam('owner'); + $userfiletmp = $this->getParam('userfiletmp'); + $userfilename = $this->getParam('userfilename'); + $filetype = $this->getParam('filetype'); + $userfiletype = $this->getParam('userfiletype'); + $sequence = $this->getParam('sequence'); + $reviewers = $this->getParam('reviewers'); + $approvers = $this->getParam('approvers'); + $reqversion = $this->getParam('reqversion'); + $version_comment = $this->getParam('versioncomment'); + $attributes = $this->getParam('attributes'); + $attributes_version = $this->getParam('attributesversion'); + $workflow = $this->getParam('workflow'); + $notificationgroups = $this->getParam('notificationgroups'); + $notificationusers = $this->getParam('notificationusers'); + $maxsizeforfulltext = $this->getParam('maxsizeforfulltext'); + $defaultaccessdocs = $this->getParam('defaultaccessdocs'); + + $result = $this->callHook('addDocument'); + if($result === null) { + $filesize = SeedDMS_Core_File::fileSize($userfiletmp); + $res = $folder->addDocument($name, $comment, $expires, $owner, $keywords, + $cats, $userfiletmp, utf8_basename($userfilename), + $filetype, $userfiletype, $sequence, + $reviewers, $approvers, $reqversion, + $version_comment, $attributes, $attributes_version, $workflow); + + if (is_bool($res) && !$res) { + $this->errormsg = "error_occured"; + return false; + } + + $document = $res[0]; + + /* Set access as specified in settings. */ + if($defaultaccessdocs) { + if($defaultaccessdocs > 0 && $defaultaccessdocs < 4) { + $document->setInheritAccess(0, true); + $document->setDefaultAccess($defaultaccessdocs, true); + } + } + + if($index) { + $idoc = new $indexconf['IndexedDocument']($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null, !($filesize < $settings->_maxSizeForFullText)); + if(!$this->callHook('preIndexDocument', $document, $idoc)) { + } + $index->addDocument($idoc); + } + + /* Add a default notification for the owner of the document */ + if($settings->_enableOwnerNotification) { + $res = $document->addNotify($user->getID(), true); + } + /* Check if additional notification shall be added */ + foreach($notificationusers as $notuser) { + if($document->getAccessMode($user) >= M_READ) + $res = $document->addNotify($notuser->getID(), true); + } + foreach($notificationgroups as $notgroup) { + if($document->getGroupAccessMode($notgroup) >= M_READ) + $res = $document->addNotify($notgroup->getID(), false); + } + + if(!$this->callHook('postAddDocument', $document)) { + } + $result = $document; + } + + return $result; + } /* }}} */ +} + diff --git a/controllers/class.UpdateDocument.php b/controllers/class.UpdateDocument.php new file mode 100644 index 000000000..c87084ddd --- /dev/null +++ b/controllers/class.UpdateDocument.php @@ -0,0 +1,90 @@ + + * @copyright Copyright (C) 2010-2013 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Class which does the busines logic for downloading a document + * + * @category DMS + * @package SeedDMS + * @author Uwe Steinmann + * @copyright Copyright (C) 2010-2013 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_Controller_UpdateDocument extends SeedDMS_Controller_Common { + + public function run() { /* {{{ */ + $name = $this->getParam('name'); + $comment = $this->getParam('comment'); + + /* Call preUpdateDocument early, because it might need to modify some + * of the parameters. + */ + if(false === $this->callHook('preUpdateDocument', $this->params['document'])) { + if(empty($this->errormsg)) + $this->errormsg = 'hook_preUpdateDocument_failed'; + return null; + } + + $name = $this->getParam('name'); + $comment = $this->getParam('comment'); + $dms = $this->params['dms']; + $user = $this->params['user']; + $document = $this->params['document']; + $settings = $this->params['settings']; + $index = $this->params['index']; + $indexconf = $this->params['indexconf']; + $folder = $this->params['folder']; + $userfiletmp = $this->getParam('userfiletmp'); + $userfilename = $this->getParam('userfilename'); + $filetype = $this->getParam('filetype'); + $userfiletype = $this->getParam('userfiletype'); + $reviewers = $this->getParam('reviewers'); + $approvers = $this->getParam('approvers'); + $reqversion = $this->getParam('reqversion'); + $comment = $this->getParam('comment'); + $attributes = $this->getParam('attributes'); + $workflow = $this->getParam('workflow'); + $maxsizeforfulltext = $this->getParam('maxsizeforfulltext'); + + $result = $this->callHook('updateDocument'); + if($result === null) { + $filesize = SeedDMS_Core_File::fileSize($userfiletmp); + $contentResult=$document->addContent($comment, $user, $userfiletmp, basename($userfilename), $filetype, $userfiletype, $reviewers, $approvers, $version=0, $attributes, $workflow); + + if ($this->hasParam('expires')) { + if($document->setExpires($this->getParam('expires'))) { + } else { + } + } + + if($index) { + $lucenesearch = new $indexconf['Search']($index); + if($hit = $lucenesearch->getDocument((int) $document->getId())) { + $index->delete($hit->id); + } + $idoc = new $indexconf['IndexedDocument']($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null, !($filesize < $settings->_maxSizeForFullText)); + if(!$this->callHook('preIndexDocument', $document, $idoc)) { + } + $index->addDocument($idoc); + $index->commit(); + } + + if(!$this->callHook('postUpdateDocument', $document, $contentResult->getContent())) { + } + $result = $contentResult->getContent(); + } + + return $result; + } /* }}} */ +} + diff --git a/ext/example/class.example.php b/ext/example/class.example.php index 33d8c5240..d7d5bd42c 100644 --- a/ext/example/class.example.php +++ b/ext/example/class.example.php @@ -37,9 +37,6 @@ class SeedDMS_ExtExample extends SeedDMS_ExtBase { * * Use this method to do some initialization like setting up the hooks * You have access to the following global variables: - * $GLOBALS['dms'] : object representing dms - * $GLOBALS['user'] : currently logged in user - * $GLOBALS['session'] : current session * $GLOBALS['settings'] : current global configuration * $GLOBALS['settings']['_extensions']['example'] : configuration of this extension * $GLOBALS['LANG'] : the language array with translations for all languages @@ -48,6 +45,7 @@ class SeedDMS_ExtExample extends SeedDMS_ExtBase { function init() { /* {{{ */ $GLOBALS['SEEDDMS_HOOKS']['view']['addDocument'][] = new SeedDMS_ExtExample_AddDocument; $GLOBALS['SEEDDMS_HOOKS']['view']['viewFolder'][] = new SeedDMS_ExtExample_ViewFolder; + $GLOBALS['SEEDDMS_SCHEDULER']['tasks']['example']['example'] = new SeedDMS_ExtExample_Task; } /* }}} */ function main() { /* {{{ */ @@ -112,4 +110,16 @@ class SeedDMS_ExtExample_ViewFolder { } +/** + * Class containing methods for running a scheduled task + * + * @author Uwe Steinmann + * @package SeedDMS + * @subpackage example + */ +class SeedDMS_ExtExample_Task { + public function execute() { + } +} + ?> diff --git a/ext/example/conf.php b/ext/example/conf.php index 6f9f09827..e84670dc5 100644 --- a/ext/example/conf.php +++ b/ext/example/conf.php @@ -16,6 +16,37 @@ $EXT_CONF['example'] = array( 'title'=>'Example check box', 'type'=>'checkbox', ), + 'list' => array( + 'title'=>'Example select menu from options', + 'type'=>'select', + 'options' => array('Option 1', 'Option 2', 'Option 3'), + 'multiple' => true, + 'size' => 2, + ), + 'categories' => array( + 'title'=>'Example select menu from categories', + 'type'=>'select', + 'internal'=>'categories', + 'multiple' => true, + ), + 'users' => array( + 'title'=>'Example select menu from users', + 'type'=>'select', + 'internal'=>'users', + 'multiple' => true, + ), + 'groups' => array( + 'title'=>'Example select menu from groups', + 'type'=>'select', + 'internal'=>'groups', + 'multiple' => true, + ), + 'attributedefinitions' => array( + 'title'=>'Example select menu from attribute definitions', + 'type'=>'select', + 'internal'=>'attributedefinitions', + 'multiple' => true, + ), ), 'constraints' => array( 'depends' => array('php' => '5.4.4-', 'seeddms' => '4.3.0-'), diff --git a/inc/inc.Authentication.php b/inc/inc.Authentication.php index 6e202b702..d5c9a3e5a 100644 --- a/inc/inc.Authentication.php +++ b/inc/inc.Authentication.php @@ -70,7 +70,8 @@ if (!isset($_COOKIE["mydms_session"])) { } /* Update last access time */ -$session->updateAccess($dms_session); +if((int)$resArr['lastAccess']+60 < time()) + $session->updateAccess($dms_session); /* Load user data */ $user = $dms->getUser($resArr["userID"]); diff --git a/inc/inc.ClassControllerCommon.php b/inc/inc.ClassControllerCommon.php index 154060804..ea22d7147 100644 --- a/inc/inc.ClassControllerCommon.php +++ b/inc/inc.ClassControllerCommon.php @@ -41,6 +41,24 @@ class SeedDMS_Controller_Common { $this->errormsg = ''; } + /** + * Call methods with name in $get['action'] + * + * @params array $get $_GET or $_POST variables + * @return mixed return value of called method + */ + function __invoke($get=array()) { + if(isset($get['action']) && $get['action']) { + if(method_exists($this, $get['action'])) { + return $this->{$get['action']}(); + } else { + echo "Missing action '".$get['action']."'"; + return false; + } + } else + return $this->run(); + } + function setParams($params) { $this->params = $params; } @@ -104,6 +122,15 @@ class SeedDMS_Controller_Common { return $this->errormsg; } /* }}} */ + /** + * Set error message + * + * @param string $msg error message + */ + public function setErrorMsg($msg) { /* {{{ */ + $this->errormsg = $msg; + } /* }}} */ + /** * Call a controller hook * @@ -124,6 +151,9 @@ class SeedDMS_Controller_Common { foreach($GLOBALS['SEEDDMS_HOOKS']['controller'][lcfirst($tmp[2])] as $hookObj) { if (method_exists($hookObj, $hook)) { switch(func_num_args()) { + case 3: + $result = $hookObj->$hook($this, func_get_arg(1), func_get_arg(2)); + break; case 2: $result = $hookObj->$hook($this, func_get_arg(1)); break; diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index fff88fa7d..e94ac0e53 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -69,28 +69,41 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { * @return false or -1 in case of error, otherwise true */ function toIndividual($sender, $recipient, $subject, $message, $params=array()) { /* {{{ */ - if ($recipient->isDisabled() || $recipient->getEmail()=="") return 0; - - if(!is_object($recipient) || strcasecmp(get_class($recipient), $this->_dms->getClassname('user'))) { - return -1; + if(is_object($recipient) && !strcasecmp(get_class($recipient), $this->_dms->getClassname('user')) && !$recipient->isDisabled() && $recipient->getEmail()!="") { + $to = $recipient->getEmail(); + $lang = $recipient->getLanguage(); + } elseif(is_string($recipient) && trim($recipient) != "") { + $to = $recipient; + if(isset($params['__lang__'])) + $lang = $params['__lang__']; + else + $lang = 'en_GB'; + } else { + return false; } + $returnpath = ''; if(is_object($sender) && !strcasecmp(get_class($sender), $this->_dms->getClassname('user'))) { $from = $sender->getFullName() ." <". $sender->getEmail() .">"; + if($this->from_address) + $returnpath = $this->from_address; } elseif(is_string($sender) && trim($sender) != "") { $from = $sender; + if($this->from_address) + $returnpath = $this->from_address; } else { $from = $this->from_address; } - $lang = $recipient->getLanguage(); $message = getMLText("email_header", array(), "", $lang)."\r\n\r\n".getMLText($message, $params, "", $lang); $message .= "\r\n\r\n".getMLText("email_footer", array(), "", $lang); $headers = array (); $headers['From'] = $from; - $headers['To'] = $recipient->getEmail(); + if($returnpath) + $headers['Return-Path'] = $returnpath; + $headers['To'] = $to; $preferences = array("input-charset" => "UTF-8", "output-charset" => "UTF-8"); $encoded_subject = iconv_mime_encode("Subject", getMLText($subject, $params, "", $lang), $preferences); $headers['Subject'] = substr($encoded_subject, strlen('Subject: ')); @@ -113,28 +126,12 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { $mail = Mail::factory('mail', $mail_params); } - $result = $mail->send($recipient->getEmail(), $headers, $message); + $result = $mail->send($to, $headers, $message); if (PEAR::isError($result)) { return false; } else { return true; } - -/* - $headers = array(); - $headers[] = "MIME-Version: 1.0"; - $headers[] = "Content-type: text/plain; charset=utf-8"; - $headers[] = "From: ". $from; - - $lang = $recipient->getLanguage(); - $message = getMLText("email_header", array(), "", $lang)."\r\n\r\n".getMLText($message, $params, "", $lang); - $message .= "\r\n\r\n".getMLText("email_footer", array(), "", $lang); - - $subject = "=?UTF-8?B?".base64_encode(getMLText($subject, $params, "", $lang))."?="; - mail($recipient->getEmail(), $subject, $message, implode("\r\n", $headers)); - - return true; -*/ } /* }}} */ function toGroup($sender, $groupRecipient, $subject, $message, $params=array()) { /* {{{ */ diff --git a/inc/inc.ClassHook.php b/inc/inc.ClassHook.php new file mode 100644 index 000000000..c0a532edd --- /dev/null +++ b/inc/inc.ClassHook.php @@ -0,0 +1,41 @@ + + * @copyright Copyright (C) 2017 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Parent class for all hook response classes + * + * @category DMS + * @package SeedDMS + * @author Uwe Steinmann + * @copyright Copyright (C) 2017 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_Hook_Response { + protected $data; + + protected $error; + + public function __construct($error = false, $data = null) { + $this->data = $data; + $this->error = $error; + } + + public function setData($data) { + $this->data = $data; + } + + public function getData() { + return $this->data; + } +} + diff --git a/inc/inc.ClassSession.php b/inc/inc.ClassSession.php index e6c7dd206..67e5983f8 100644 --- a/inc/inc.ClassSession.php +++ b/inc/inc.ClassSession.php @@ -186,6 +186,15 @@ class SeedDMS_Session { return true; } /* }}} */ + /** + * Get language of session + * + * @return string language + */ + function getUser() { /* {{{ */ + return $this->data['userid']; + } /* }}} */ + /** * Set language of session * @@ -478,5 +487,28 @@ class SeedDMS_SessionMgr { return $sessions; } /* }}} */ + + /** + * Get list of active sessions with a given time + * + * @return array list of sessions + */ + function getLastAccessedSessions($datetime) { /* {{{ */ + if(!$ts = makeTsFromLongDate($datetime)) + return false; + $queryStr = "SELECT * FROM `tblSessions` WHERE `lastAccess`>=".$ts; + $queryStr .= " ORDER BY `lastAccess` DESC"; + $resArr = $this->db->getResultArray($queryStr); + if (is_bool($resArr) && $resArr == false) + return false; + $sessions = array(); + foreach($resArr as $rec) { + $session = new SeedDMS_Session($this->db); + $session->load($rec['id']); + $sessions[] = $session; + } + return $sessions; + + } /* }}} */ } ?> diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index 1e3501187..e0225eafd 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -162,7 +162,7 @@ class Settings { /* {{{ */ var $_logFileEnable = true; // the log file rotation var $_logFileRotation = "d"; - // Enable file upload by jumploader + // Enable file upload by fine-uploader (was 'jumploader') var $_enableLargeFileUpload = false; // size of partitions for file uploaded by fine-loader var $_partitionSize = 2000000; @@ -178,8 +178,14 @@ class Settings { /* {{{ */ var $_firstDayOfWeek = 0; // enable/disable display of the clipboard var $_enableClipboard = true; + // enable/disable list of tasks in main menu + var $_enableMenuTasks = true; + // enable/disable display of the session list + var $_enableSessionList = false; // enable/disable display of the drop zone for file upload var $_enableDropUpload = true; + // Enable multiple file upload + var $_enableMultiUpload = false; // enable/disable display of the folder tree var $_enableFolderTree = true; // count documents and folders for folderview recursively @@ -410,8 +416,11 @@ class Settings { /* {{{ */ $this->_enableConverting = Settings::boolVal($tab["enableConverting"]); $this->_enableEmail = Settings::boolVal($tab["enableEmail"]); $this->_enableUsersView = Settings::boolVal($tab["enableUsersView"]); + $this->_enableSessionList = Settings::boolVal($tab["enableSessionList"]); $this->_enableClipboard = Settings::boolVal($tab["enableClipboard"]); + $this->_enableMenuTasks = Settings::boolVal($tab["enableMenuTasks"]); $this->_enableDropUpload = Settings::boolVal($tab["enableDropUpload"]); + $this->_enableMultiUpload = Settings::boolVal($tab["enableMultiUpload"]); $this->_enableFolderTree = Settings::boolVal($tab["enableFolderTree"]); $this->_enableRecursiveCount = Settings::boolVal($tab["enableRecursiveCount"]); $this->_maxRecursiveCount = intval($tab["maxRecursiveCount"]); @@ -717,8 +726,11 @@ class Settings { /* {{{ */ $this->setXMLAttributValue($node, "enableConverting", $this->_enableConverting); $this->setXMLAttributValue($node, "enableEmail", $this->_enableEmail); $this->setXMLAttributValue($node, "enableUsersView", $this->_enableUsersView); + $this->setXMLAttributValue($node, "enableSessionList", $this->_enableSessionList); $this->setXMLAttributValue($node, "enableClipboard", $this->_enableClipboard); + $this->setXMLAttributValue($node, "enableMenuTasks", $this->_enableMenuTasks); $this->setXMLAttributValue($node, "enableDropUpload", $this->_enableDropUpload); + $this->setXMLAttributValue($node, "enableMultiUpload", $this->_enableMultiUpload); $this->setXMLAttributValue($node, "enableFolderTree", $this->_enableFolderTree); $this->setXMLAttributValue($node, "enableRecursiveCount", $this->_enableRecursiveCount); $this->setXMLAttributValue($node, "maxRecursiveCount", $this->_maxRecursiveCount); @@ -844,7 +856,7 @@ class Settings { /* {{{ */ $this->setXMLAttributValue($node, "smtpPassword", $this->_smtpPassword); // XML Path: /configuration/advanced/display - $this->getXMLNode($xml, '/configuration', 'advanced'); + $advnode = $this->getXMLNode($xml, '/configuration', 'advanced'); $node = $this->getXMLNode($xml, '/configuration/advanced', 'display'); $this->setXMLAttributValue($node, "siteDefaultPage", $this->_siteDefaultPage); $this->setXMLAttributValue($node, "rootFolderID", $this->_rootFolderID); @@ -936,13 +948,13 @@ class Settings { /* {{{ */ $extnodes = $xml->addChild("extensions"); } foreach($this->_extensions as $name => $extension) - { + { // search XML node $extnode = $extnodes->addChild('extension'); $this->setXMLAttributValue($extnode, 'name', $name); foreach($GLOBALS['EXT_CONF'][$name]['config'] as $fieldname=>$conf) { $parameter = $extnode->addChild('parameter'); - $parameter[0] = isset($extension[$fieldname]) ? $extension[$fieldname] : ''; + $parameter[0] = isset($extension[$fieldname]) ? (is_array($extension[$fieldname]) ? implode(',', $extension[$fieldname]) : $extension[$fieldname]) : ''; $this->setXMLAttributValue($parameter, 'name', $fieldname); } @@ -1227,6 +1239,7 @@ class Settings { /* {{{ */ case 'mysql': case 'mysqli': case 'mysqlnd': + case 'pgsql': $tmp = explode(":", $this->_dbHostname); $dsn = $this->_dbDriver.":dbname=".$this->_dbDatabase.";host=".$tmp[0]; if(!empty($tmp[1])) @@ -1240,7 +1253,7 @@ class Settings { /* {{{ */ "status" => "notfound", "type" => "error", "currentvalue" => $this->_dbDriver, - "suggestionvalue" => "mysql|sqlite" + "suggestionvalue" => "mysql|sqlite|pgsql" ); } if($dsn) { diff --git a/inc/inc.ClassUI.php b/inc/inc.ClassUI.php index bdf419f03..d044cbe77 100644 --- a/inc/inc.ClassUI.php +++ b/inc/inc.ClassUI.php @@ -104,6 +104,8 @@ class UI extends UI_Default { $view->setParam('enablefoldertree', $settings->_enableFolderTree); $view->setParam('enablelanguageselector', $settings->_enableLanguageSelector); $view->setParam('enableclipboard', $settings->_enableClipboard); + $view->setParam('enablemenutasks', $settings->_enableMenuTasks); + $view->setParam('enablesessionlist', $settings->_enableSessionList); $view->setParam('workflowmode', $settings->_workflowMode); $view->setParam('partitionsize', (int) $settings->_partitionSize); $view->setParam('maxuploadsize', (int) $settings->_maxUploadSize); diff --git a/inc/inc.ClassViewCommon.php b/inc/inc.ClassViewCommon.php index 3ab450356..b51645d2a 100644 --- a/inc/inc.ClassViewCommon.php +++ b/inc/inc.ClassViewCommon.php @@ -13,6 +13,8 @@ * @version Release: @package_version@ */ +require_once "inc.ClassHook.php"; + /** * Parent class for all view classes * @@ -81,7 +83,8 @@ class SeedDMS_View_Common { * a list of hook objects with getHookObjects() and call the hooks yourself. * * @params string $hook name of hook - * @return string concatenated string of whatever the hook function returns + * @return string concatenated string, merged arrays or whatever the hook + * function returns */ function callHook($hook) { /* {{{ */ $tmp = explode('_', get_class($this)); @@ -92,39 +95,28 @@ class SeedDMS_View_Common { switch(func_num_args()) { case 1: $tmpret = $hookObj->$hook($this); - if(is_string($tmpret)) - $ret .= $tmpret; - else - $ret = $tmpret; break; case 2: $tmpret = $hookObj->$hook($this, func_get_arg(1)); - if(is_string($tmpret)) - $ret .= $tmpret; - else - $ret = $tmpret; break; case 3: $tmpret = $hookObj->$hook($this, func_get_arg(1), func_get_arg(2)); - if(is_string($tmpret)) - $ret .= $tmpret; - else - $ret = $tmpret; break; case 4: $tmpret = $hookObj->$hook($this, func_get_arg(1), func_get_arg(2), func_get_arg(3)); - if(is_string($tmpret)) - $ret .= $tmpret; - else - $ret = $tmpret; break; default: case 5: $tmpret = $hookObj->$hook($this, func_get_arg(1), func_get_arg(2), func_get_arg(3), func_get_arg(4)); - if(is_string($tmpret)) - $ret .= $tmpret; - else - $ret = $tmpret; + break; + } + if($tmpret !== null) { + if(is_string($tmpret)) + $ret .= $tmpret; + elseif(is_array($tmpret) || is_object($tmpret)) { + $ret = ($ret === null) ? $tmpret : array_merge($ret, $tmpret); + } else + $ret = $tmpret; } } } diff --git a/inc/inc.Version.php b/inc/inc.Version.php index 80b24a536..9824e5b6e 100644 --- a/inc/inc.Version.php +++ b/inc/inc.Version.php @@ -20,7 +20,7 @@ class SeedDMS_Version { - public $_number = "5.0.11"; + public $_number = "5.1.2"; private $_string = "SeedDMS"; function __construct() { diff --git a/install/create_tables-innodb.sql b/install/create_tables-innodb.sql index 847118b28..e9c7fcc79 100644 --- a/install/create_tables-innodb.sql +++ b/install/create_tables-innodb.sql @@ -61,7 +61,7 @@ CREATE TABLE `tblUsers` ( `comment` text NOT NULL, `role` smallint(1) NOT NULL DEFAULT '0', `hidden` smallint(1) NOT NULL DEFAULT '0', - `pwdExpiration` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `pwdExpiration` datetime DEFAULT NULL, `loginfailures` tinyint(4) NOT NULL DEFAULT '0', `disabled` smallint(1) NOT NULL DEFAULT '0', `quota` bigint(20) DEFAULT NULL, @@ -80,7 +80,7 @@ CREATE TABLE `tblUserPasswordRequest` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userID` int(11) NOT NULL DEFAULT '0', `hash` varchar(50) DEFAULT NULL, - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `date` datetime NOT NULL, PRIMARY KEY (`id`), KEY `tblUserPasswordRequest_user` (`userID`), CONSTRAINT `tblUserPasswordRequest_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE @@ -96,7 +96,7 @@ 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`), KEY `tblUserPasswordHistory_user` (`userID`), CONSTRAINT `tblUserPasswordHistory_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE @@ -112,7 +112,7 @@ CREATE TABLE `tblUserImages` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userID` int(11) NOT NULL DEFAULT '0', `image` blob NOT NULL, - `mimeType` varchar(10) NOT NULL DEFAULT '', + `mimeType` varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `tblUserImages_user` (`userID`), CONSTRAINT `tblUserImages_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE @@ -234,7 +234,7 @@ CREATE TABLE `tblDocumentApproveLog` ( `approveID` int(11) NOT NULL DEFAULT '0', `status` tinyint(4) NOT NULL DEFAULT '0', `comment` text NOT NULL, - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `date` datetime NOT NULL, `userID` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`approveLogID`), KEY `tblDocumentApproveLog_approve` (`approveID`), @@ -315,6 +315,8 @@ CREATE TABLE `tblDocumentLinks` ( CREATE TABLE `tblDocumentFiles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `document` int(11) NOT NULL DEFAULT '0', + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `public` tinyint(1) NOT NULL DEFAULT '0', `userID` int(11) NOT NULL DEFAULT '0', `comment` text, `name` varchar(150) DEFAULT NULL, @@ -373,7 +375,7 @@ CREATE TABLE `tblDocumentReviewLog` ( `reviewID` int(11) NOT NULL DEFAULT '0', `status` tinyint(4) NOT NULL DEFAULT '0', `comment` text NOT NULL, - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `date` datetime NOT NULL, `userID` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`reviewLogID`), KEY `tblDocumentReviewLog_review` (`reviewID`), @@ -408,7 +410,7 @@ CREATE TABLE `tblDocumentStatusLog` ( `statusID` int(11) NOT NULL DEFAULT '0', `status` tinyint(4) NOT NULL DEFAULT '0', `comment` text NOT NULL, - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `date` datetime NOT NULL, `userID` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`statusLogID`), KEY `statusID` (`statusID`), @@ -683,7 +685,7 @@ CREATE TABLE `tblWorkflowLog` ( `workflow` int(11) DEFAULT NULL, `userid` int(11) DEFAULT NULL, `transition` int(11) DEFAULT NULL, - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `date` datetime NOT NULL, `comment` text, PRIMARY KEY (`id`), KEY `tblWorkflowLog_document` (`document`), @@ -708,7 +710,7 @@ CREATE TABLE `tblWorkflowDocumentContent` ( `document` int(11) DEFAULT NULL, `version` smallint(5) DEFAULT NULL, `state` int(11) DEFAULT NULL, - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `date` datetime NOT NULL, KEY `tblWorkflowDocument_document` (`document`), KEY `tblWorkflowDocument_workflow` (`workflow`), KEY `tblWorkflowDocument_state` (`state`), @@ -751,7 +753,7 @@ CREATE TABLE `tblVersion` ( -- Initial content for database -- -INSERT INTO tblUsers VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'address@server.com', '', '', '', 1, 0, '0000-00-00 00:00:00', 0, 0, 0, NULL); -INSERT INTO tblUsers VALUES (2, 'guest', NULL, 'Guest User', NULL, '', '', '', 2, 0, '0000-00-00 00:00:00', 0, 0, 0, NULL); +INSERT INTO tblUsers VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'address@server.com', '', '', '', 1, 0, NULL, 0, 0, 0, NULL); +INSERT INTO tblUsers VALUES (2, 'guest', NULL, 'Guest User', NULL, '', '', '', 2, 0, NULL, 0, 0, 0, NULL); INSERT INTO tblFolders VALUES (1, 'DMS', 0, '', 'DMS root', UNIX_TIMESTAMP(), 1, 0, 2, 0); -INSERT INTO tblVersion VALUES (NOW(), 5, 0, 0); +INSERT INTO tblVersion VALUES (NOW(), 5, 1, 0); diff --git a/install/create_tables-postgres.sql b/install/create_tables-postgres.sql new file mode 100644 index 000000000..19f0f84d1 --- /dev/null +++ b/install/create_tables-postgres.sql @@ -0,0 +1,629 @@ +-- +-- Table structure for table "tblACLs" +-- + +CREATE TABLE "tblACLs" ( + "id" SERIAL UNIQUE, + "target" INTEGER NOT NULL default '0', + "targetType" INTEGER NOT NULL default '0', + "userID" INTEGER NOT NULL default '-1', + "groupID" INTEGER NOT NULL default '-1', + "mode" INTEGER NOT NULL default '0' +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblCategory" +-- + +CREATE TABLE "tblCategory" ( + "id" SERIAL UNIQUE, + "name" text NOT NULL +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblAttributeDefinitions" +-- + +CREATE TABLE "tblAttributeDefinitions" ( + "id" SERIAL UNIQUE, + "name" varchar(100) default NULL, + "objtype" INTEGER NOT NULL default '0', + "type" INTEGER NOT NULL default '0', + "multiple" INTEGER NOT NULL default '0', + "minvalues" INTEGER NOT NULL default '0', + "maxvalues" INTEGER NOT NULL default '0', + "valueset" TEXT default NULL, + "regex" TEXT DEFAULT NULL, + UNIQUE("name") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblUsers" +-- + +CREATE TABLE "tblUsers" ( + "id" SERIAL UNIQUE, + "login" varchar(50) default NULL, + "pwd" varchar(50) default NULL, + "fullName" varchar(100) default NULL, + "email" varchar(70) default NULL, + "language" varchar(32) NOT NULL, + "theme" varchar(32) NOT NULL, + "comment" text NOT NULL, + "role" INTEGER NOT NULL default '0', + "hidden" INTEGER NOT NULL default '0', + "pwdExpiration" TIMESTAMP default NULL, + "loginfailures" INTEGER NOT NULL default '0', + "disabled" INTEGER NOT NULL default '0', + "quota" BIGINT, + "homefolder" INTEGER default NULL, + UNIQUE ("login") +); + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblUserPasswordRequest" +-- + +CREATE TABLE "tblUserPasswordRequest" ( + "id" SERIAL UNIQUE, + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" (id) ON DELETE CASCADE, + "hash" varchar(50) default NULL, + "date" TIMESTAMP default NULL +); + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblUserPasswordHistory" +-- + +CREATE TABLE "tblUserPasswordHistory" ( + "id" SERIAL UNIQUE, + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" ("id") ON DELETE CASCADE, + "pwd" varchar(50) default NULL, + "date" TIMESTAMP default NULL +); + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblUserImages" +-- + +CREATE TABLE "tblUserImages" ( + "id" SERIAL UNIQUE, + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" ("id") ON DELETE CASCADE, + "image" TEXT NOT NULL, + "mimeType" varchar(100) NOT NULL default '' +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblFolders" +-- + +CREATE TABLE "tblFolders" ( + "id" SERIAL UNIQUE, + "name" varchar(70) default NULL, + "parent" INTEGER default NULL, + "folderList" text NOT NULL, + "comment" text, + "date" INTEGER default NULL, + "owner" INTEGER default NULL REFERENCES "tblUsers" ("id"), + "inheritAccess" INTEGER NOT NULL default '1', + "defaultAccess" INTEGER NOT NULL default '0', + "sequence" REAL NOT NULL default '0' +) ; + +ALTER TABLE "tblUsers" ADD FOREIGN KEY("homefolder") REFERENCES "tblFolders"("id"); + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblFolderAttributes" +-- + +CREATE TABLE "tblFolderAttributes" ( + "id" SERIAL UNIQUE, + "folder" INTEGER default NULL REFERENCES "tblFolders" ("id") ON DELETE CASCADE, + "attrdef" INTEGER default NULL REFERENCES "tblAttributeDefinitions" ("id"), + "value" text default NULL, + UNIQUE (folder, attrdef) +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocuments" +-- + +CREATE TABLE "tblDocuments" ( + "id" SERIAL UNIQUE, + "name" varchar(150) default NULL, + "comment" text, + "date" INTEGER default NULL, + "expires" INTEGER default NULL, + "owner" INTEGER default NULL REFERENCES "tblUsers" ("id"), + "folder" INTEGER default NULL REFERENCES "tblFolders" ("id"), + "folderList" text NOT NULL, + "inheritAccess" INTEGER NOT NULL default '1', + "defaultAccess" INTEGER NOT NULL default '0', + "locked" INTEGER NOT NULL default '-1', + "keywords" text NOT NULL, + "sequence" REAL NOT NULL default '0' +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentAttributes" +-- + +CREATE TABLE "tblDocumentAttributes" ( + "id" SERIAL UNIQUE, + "document" INTEGER default NULL REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, + "attrdef" INTEGER default NULL REFERENCES "tblAttributeDefinitions" ("id"), + "value" text default NULL, + UNIQUE (document, attrdef) +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentApprovers" +-- + +CREATE TABLE "tblDocumentApprovers" ( + "approveID" SERIAL UNIQUE, + "documentID" INTEGER NOT NULL default '0' REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, + "version" INTEGER NOT NULL default '0', + "type" INTEGER NOT NULL default '0', + "required" INTEGER NOT NULL default '0', + UNIQUE ("documentID","version","type","required") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentApproveLog" +-- + +CREATE TABLE "tblDocumentApproveLog" ( + "approveLogID" SERIAL UNIQUE, + "approveID" INTEGER NOT NULL default '0' REFERENCES "tblDocumentApprovers" ("approveID") ON DELETE CASCADE, + "status" INTEGER NOT NULL default '0', + "comment" TEXT NOT NULL, + "date" TIMESTAMP default NULL, + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" ("id") ON DELETE CASCADE +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentContent" +-- + +CREATE TABLE "tblDocumentContent" ( + "id" SERIAL UNIQUE, + "document" INTEGER NOT NULL default '0' REFERENCES "tblDocuments" ("id"), + "version" INTEGER NOT NULL, + "comment" text, + "date" INTEGER default NULL, + "createdBy" INTEGER default NULL, + "dir" varchar(255) NOT NULL default '', + "orgFileName" varchar(150) NOT NULL default '', + "fileType" varchar(10) NOT NULL default '', + "mimeType" varchar(100) NOT NULL default '', + "fileSize" BIGINT, + "checksum" char(32), + UNIQUE ("document","version") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentContentAttributes" +-- + +CREATE TABLE "tblDocumentContentAttributes" ( + "id" SERIAL UNIQUE, + "content" INTEGER default NULL REFERENCES "tblDocumentContent" ("id") ON DELETE CASCADE, + "attrdef" INTEGER default NULL REFERENCES "tblAttributeDefinitions" ("id"), + "value" text default NULL, + UNIQUE (content, attrdef) +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentLinks" +-- + +CREATE TABLE "tblDocumentLinks" ( + "id" SERIAL UNIQUE, + "document" INTEGER NOT NULL default 0 REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, + "target" INTEGER NOT NULL default 0 REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, + "userID" INTEGER NOT NULL default 0 REFERENCES "tblUsers" ("id"), + "public" INTEGER NOT NULL default 0 +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentFiles" +-- + +CREATE TABLE "tblDocumentFiles" ( + "id" SERIAL UNIQUE, + "document" INTEGER NOT NULL default 0 REFERENCES "tblDocuments" ("id"), + "userID" INTEGER NOT NULL default 0 REFERENCES "tblUsers" ("id"), + "version" INTEGER NOT NULL default '0', + "public" INTEGER NOT NULL default '0', + "comment" text, + "name" varchar(150) default NULL, + "date" INTEGER default NULL, + "dir" varchar(255) NOT NULL default '', + "orgFileName" varchar(150) NOT NULL default '', + "fileType" varchar(10) NOT NULL default '', + "mimeType" varchar(100) NOT NULL default '' +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentLocks" +-- + +CREATE TABLE "tblDocumentLocks" ( + "document" INTEGER REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" ("id") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentReviewers" +-- + +CREATE TABLE "tblDocumentReviewers" ( + "reviewID" SERIAL UNIQUE, + "documentID" INTEGER NOT NULL default '0' REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, + "version" INTEGER NOT NULL default '0', + "type" INTEGER NOT NULL default '0', + "required" INTEGER NOT NULL default '0', + UNIQUE ("documentID","version","type","required") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentReviewLog" +-- + +CREATE TABLE "tblDocumentReviewLog" ( + "reviewLogID" SERIAL UNIQUE, + "reviewID" INTEGER NOT NULL default 0 REFERENCES "tblDocumentReviewers" ("reviewID") ON DELETE CASCADE, + "status" INTEGER NOT NULL default 0, + "comment" TEXT NOT NULL, + "date" TIMESTAMP NOT NULL, + "userID" INTEGER NOT NULL default 0 REFERENCES "tblUsers" ("id") ON DELETE CASCADE +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentStatus" +-- + +CREATE TABLE "tblDocumentStatus" ( + "statusID" SERIAL UNIQUE, + "documentID" INTEGER NOT NULL default '0' REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, + "version" INTEGER NOT NULL default '0', + UNIQUE ("documentID","version") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentStatusLog" +-- + +CREATE TABLE "tblDocumentStatusLog" ( + "statusLogID" SERIAL UNIQUE, + "statusID" INTEGER NOT NULL default '0' REFERENCES "tblDocumentStatus" ("statusID") ON DELETE CASCADE, + "status" INTEGER NOT NULL default '0', + "comment" text NOT NULL, + "date" TIMESTAMP default NULL, + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" ("id") ON DELETE CASCADE +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblGroups" +-- + +CREATE TABLE "tblGroups" ( + "id" SERIAL UNIQUE, + "name" varchar(50) default NULL, + "comment" text NOT NULL +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblGroupMembers" +-- + +CREATE TABLE "tblGroupMembers" ( + "groupID" INTEGER NOT NULL default '0' REFERENCES "tblGroups" ("id") ON DELETE CASCADE, + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" ("id") ON DELETE CASCADE, + "manager" INTEGER NOT NULL default '0', + UNIQUE ("groupID","userID") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblKeywordCategories" +-- + +CREATE TABLE "tblKeywordCategories" ( + "id" SERIAL UNIQUE, + "name" varchar(255) NOT NULL default '', + "owner" INTEGER NOT NULL default '0' +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblKeywords" +-- + +CREATE TABLE "tblKeywords" ( + "id" SERIAL UNIQUE, + "category" INTEGER NOT NULL default '0' REFERENCES "tblKeywordCategories" ("id") ON DELETE CASCADE, + "keywords" text NOT NULL +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblDocumentCategory" +-- + +CREATE TABLE "tblDocumentCategory" ( + "categoryID" INTEGER NOT NULL default '0' REFERENCES "tblCategory" ("id") ON DELETE CASCADE, + "documentID" INTEGER NOT NULL default '0' REFERENCES "tblDocuments" ("id") ON DELETE CASCADE +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblNotify" +-- + +CREATE TABLE "tblNotify" ( + "target" INTEGER NOT NULL default '0', + "targetType" INTEGER NOT NULL default '0', + "userID" INTEGER NOT NULL default '-1', + "groupID" INTEGER NOT NULL default '-1', + UNIQUE ("target","targetType","userID","groupID") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table "tblSessions" +-- + +CREATE TABLE "tblSessions" ( + "id" varchar(50) PRIMARY KEY, + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" ("id") ON DELETE CASCADE, + "lastAccess" INTEGER NOT NULL default '0', + "theme" varchar(30) NOT NULL default '', + "language" varchar(30) NOT NULL default '', + "clipboard" text default NULL, + "su" INTEGER DEFAULT NULL, + "splashmsg" text default NULL +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for mandatory reviewers +-- + +CREATE TABLE "tblMandatoryReviewers" ( + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" ("id") ON DELETE CASCADE, + "reviewerUserID" INTEGER NOT NULL default '0', + "reviewerGroupID" INTEGER NOT NULL default '0', + UNIQUE ("userID","reviewerUserID","reviewerGroupID") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for mandatory approvers +-- + +CREATE TABLE "tblMandatoryApprovers" ( + "userID" INTEGER NOT NULL default '0' REFERENCES "tblUsers" ("id") ON DELETE CASCADE, + "approverUserID" INTEGER NOT NULL default '0', + "approverGroupID" INTEGER NOT NULL default '0', + UNIQUE ("userID","approverUserID","approverGroupID") +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for events (calendar) +-- + +CREATE TABLE "tblEvents" ( + "id" SERIAL UNIQUE, + "name" varchar(150) default NULL, + "comment" text, + "start" INTEGER default NULL, + "stop" INTEGER default NULL, + "date" INTEGER default NULL, + "userID" INTEGER NOT NULL default '0' +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for workflow states +-- + +CREATE TABLE "tblWorkflowStates" ( + "id" SERIAL UNIQUE, + "name" text NOT NULL, + "visibility" INTEGER DEFAULT 0, + "maxtime" INTEGER DEFAULT 0, + "precondfunc" text DEFAULT NULL, + "documentstatus" INTEGER DEFAULT NULL +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for workflow actions +-- + +CREATE TABLE "tblWorkflowActions" ( + "id" SERIAL UNIQUE, + "name" text NOT NULL +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for workflows +-- + +CREATE TABLE "tblWorkflows" ( + "id" SERIAL UNIQUE, + "name" text NOT NULL, + "initstate" INTEGER NOT NULL REFERENCES "tblWorkflowStates" ("id") ON DELETE CASCADE +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for workflow transitions +-- + +CREATE TABLE "tblWorkflowTransitions" ( + "id" SERIAL UNIQUE, + "workflow" INTEGER default NULL REFERENCES "tblWorkflows" ("id") ON DELETE CASCADE, + "state" INTEGER default NULL REFERENCES "tblWorkflowStates" ("id") ON DELETE CASCADE, + "action" INTEGER default NULL REFERENCES "tblWorkflowActions" ("id") ON DELETE CASCADE, + "nextstate" INTEGER default NULL REFERENCES "tblWorkflowStates" ("id") ON DELETE CASCADE, + "maxtime" INTEGER DEFAULT 0 +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for workflow transition users +-- + +CREATE TABLE "tblWorkflowTransitionUsers" ( + "id" SERIAL UNIQUE, + "transition" INTEGER default NULL REFERENCES "tblWorkflowTransitions" ("id") ON DELETE CASCADE, + "userid" INTEGER default NULL REFERENCES "tblUsers" ("id") ON DELETE CASCADE +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for workflow transition groups +-- + +CREATE TABLE "tblWorkflowTransitionGroups" ( + "id" SERIAL UNIQUE, + "transition" INTEGER default NULL REFERENCES "tblWorkflowTransitions" ("id") ON DELETE CASCADE, + "groupid" INTEGER default NULL REFERENCES "tblGroups" ("id") ON DELETE CASCADE, + "minusers" INTEGER default NULL +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for workflow log +-- + +CREATE TABLE "tblWorkflowLog" ( + "id" SERIAL UNIQUE, + "document" INTEGER default NULL REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, + "version" INTEGER default NULL, + "workflow" INTEGER default NULL REFERENCES "tblWorkflows" ("id") ON DELETE CASCADE, + "userid" INTEGER default NULL REFERENCES "tblUsers" ("id") ON DELETE CASCADE, + "transition" INTEGER default NULL REFERENCES "tblWorkflowTransitions" ("id") ON DELETE CASCADE, + "date" TIMESTAMP default NULL, + "comment" text +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for workflow document relation +-- + +CREATE TABLE "tblWorkflowDocumentContent" ( + "parentworkflow" INTEGER DEFAULT 0, + "workflow" INTEGER DEFAULT NULL REFERENCES "tblWorkflows" ("id") ON DELETE CASCADE, + "document" INTEGER DEFAULT NULL REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, + "version" INTEGER DEFAULT NULL, + "state" INTEGER DEFAULT NULL REFERENCES "tblWorkflowStates" ("id") ON DELETE CASCADE, + "date" TIMESTAMP default NULL +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for mandatory workflows +-- + +CREATE TABLE "tblWorkflowMandatoryWorkflow" ( + "userid" INTEGER default NULL REFERENCES "tblUsers" ("id") ON DELETE CASCADE, + "workflow" INTEGER default NULL REFERENCES "tblWorkflows" ("id") ON DELETE CASCADE, + UNIQUE(userid, workflow) +) ; + +-- -------------------------------------------------------- + +-- +-- Table structure for version +-- + +CREATE TABLE "tblVersion" ( + "date" TIMESTAMP NOT NULL, + "major" INTEGER, + "minor" INTEGER, + "subminor" INTEGER +) ; + +-- -------------------------------------------------------- + +-- +-- Initial content for database +-- + +INSERT INTO "tblUsers" VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'address@server.com', '', '', '', 1, 0, NULL, 0, 0, 0, NULL); +SELECT nextval('"tblUsers_id_seq"'); +INSERT INTO "tblUsers" VALUES (2, 'guest', NULL, 'Guest User', NULL, '', '', '', 2, 0, NULL, 0, 0, 0, NULL); +SELECT nextval('"tblUsers_id_seq"'); +INSERT INTO "tblFolders" VALUES (1, 'DMS', 0, '', 'DMS root', extract(epoch from now()), 1, 0, 2, 0); +SELECT nextval('"tblFolders_id_seq"'); +INSERT INTO "tblVersion" VALUES (CURRENT_TIMESTAMP, 5, 1, 0); diff --git a/install/create_tables-sqlite3.sql b/install/create_tables-sqlite3.sql index 64b517fd1..417e3e771 100644 --- a/install/create_tables-sqlite3.sql +++ b/install/create_tables-sqlite3.sql @@ -58,7 +58,7 @@ CREATE TABLE `tblUsers` ( `comment` text NOT NULL, `role` INTEGER NOT NULL default '0', `hidden` INTEGER NOT NULL default '0', - `pwdExpiration` TEXT NOT NULL default '0000-00-00 00:00:00', + `pwdExpiration` TEXT default NULL, `loginfailures` INTEGER NOT NULL default '0', `disabled` INTEGER NOT NULL default '0', `quota` INTEGER, @@ -76,7 +76,7 @@ CREATE TABLE `tblUserPasswordRequest` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, `hash` varchar(50) default NULL, - `date` TEXT NOT NULL default '0000-00-00 00:00:00' + `date` TEXT NOT NULL ); -- -------------------------------------------------------- @@ -89,7 +89,7 @@ CREATE TABLE `tblUserPasswordHistory` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, `pwd` varchar(50) default NULL, - `date` TEXT NOT NULL default '0000-00-00 00:00:00' + `date` TEXT NOT NULL ); -- -------------------------------------------------------- @@ -102,7 +102,7 @@ CREATE TABLE `tblUserImages` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, `image` blob NOT NULL, - `mimeType` varchar(10) NOT NULL default '' + `mimeType` varchar(100) NOT NULL default '' ) ; -- -------------------------------------------------------- @@ -200,7 +200,7 @@ CREATE TABLE `tblDocumentApproveLog` ( `approveID` INTEGER NOT NULL default '0' REFERENCES `tblDocumentApprovers` (`approveID`) ON DELETE CASCADE, `status` INTEGER NOT NULL default '0', `comment` TEXT NOT NULL, - `date` TEXT NOT NULL default '0000-00-00 00:00:00', + `date` TEXT NOT NULL, `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ; @@ -220,7 +220,7 @@ CREATE TABLE `tblDocumentContent` ( `dir` varchar(255) NOT NULL default '', `orgFileName` varchar(150) NOT NULL default '', `fileType` varchar(10) NOT NULL default '', - `mimeType` varchar(70) NOT NULL default '', + `mimeType` varchar(100) NOT NULL default '', `fileSize` INTEGER, `checksum` char(32), UNIQUE (`document`,`version`) @@ -263,14 +263,16 @@ CREATE TABLE `tblDocumentLinks` ( CREATE TABLE `tblDocumentFiles` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `document` INTEGER NOT NULL default 0 REFERENCES `tblDocuments` (`id`), + `version` INTEGER unsigned NOT NULL default '0', `userID` INTEGER NOT NULL default 0 REFERENCES `tblUsers` (`id`), + `public` INTEGER NOT NULL default '0', `comment` text, `name` varchar(150) default NULL, `date` INTEGER default NULL, `dir` varchar(255) NOT NULL default '', `orgFileName` varchar(150) NOT NULL default '', `fileType` varchar(10) NOT NULL default '', - `mimeType` varchar(70) NOT NULL default '' + `mimeType` varchar(100) NOT NULL default '' ) ; -- -------------------------------------------------------- @@ -310,7 +312,7 @@ CREATE TABLE `tblDocumentReviewLog` ( `reviewID` INTEGER NOT NULL default 0 REFERENCES `tblDocumentReviewers` (`reviewID`) ON DELETE CASCADE, `status` INTEGER NOT NULL default 0, `comment` TEXT NOT NULL, - `date` TEXT NOT NULL default '0000-00-00 00:00:00', + `date` TEXT NOT NULL, `userID` INTEGER NOT NULL default 0 REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ; @@ -338,7 +340,7 @@ CREATE TABLE `tblDocumentStatusLog` ( `statusID` INTEGER NOT NULL default '0' REFERENCES `tblDocumentStatus` (`statusID`) ON DELETE CASCADE, `status` INTEGER NOT NULL default '0', `comment` text NOT NULL, - `date` TEXT NOT NULL default '0000-00-00 00:00:00', + `date` TEXT NOT NULL, `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ; @@ -566,7 +568,7 @@ CREATE TABLE `tblWorkflowLog` ( `workflow` INTEGER default NULL REFERENCES `tblWorkflows` (`id`) ON DELETE CASCADE, `userid` INTEGER default NULL REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, `transition` INTEGER default NULL REFERENCES `tblWorkflowTransitions` (`id`) ON DELETE CASCADE, - `date` datetime NOT NULL default '0000-00-00 00:00:00', + `date` datetime NOT NULL, `comment` text ) ; @@ -582,7 +584,7 @@ CREATE TABLE `tblWorkflowDocumentContent` ( `document` INTEGER DEFAULT NULL REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, `version` INTEGER DEFAULT NULL, `state` INTEGER DEFAULT NULL REFERENCES `tblWorkflowStates` (`id`) ON DELETE CASCADE, - `date` datetime NOT NULL default '0000-00-00 00:00:00' + `date` datetime NOT NULL ) ; -- -------------------------------------------------------- @@ -604,7 +606,7 @@ CREATE TABLE `tblWorkflowMandatoryWorkflow` ( -- CREATE TABLE `tblVersion` ( - `date` TEXT NOT NULL default '0000-00-00 00:00:00', + `date` TEXT NOT NULL, `major` INTEGER, `minor` INTEGER, `subminor` INTEGER @@ -619,4 +621,4 @@ CREATE TABLE `tblVersion` ( INSERT INTO tblUsers VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'address@server.com', '', '', '', 1, 0, '', 0, 0, 0, 0); INSERT INTO tblUsers VALUES (2, 'guest', NULL, 'Guest User', NULL, '', '', '', 2, 0, '', 0, 0, 0, 0); INSERT INTO tblFolders VALUES (1, 'DMS', 0, '', 'DMS root', strftime('%s','now'), 1, 0, 2, 0); -INSERT INTO tblVersion VALUES (DATETIME(), 5, 0, 0); +INSERT INTO tblVersion VALUES (DATETIME(), 5, 1, 0); diff --git a/install/install.php b/install/install.php index 8a169a713..335bd3835 100644 --- a/install/install.php +++ b/install/install.php @@ -37,6 +37,10 @@ if (!file_exists("create_tables-sqlite3.sql")) { echo "Can't install SeedDMS, 'create_tables-sqlite3.sql' missing"; exit; } +if (!file_exists("create_tables-postgres.sql")) { + echo "Can't install SeedDMS, 'create_tables-postgres.sql' missing"; + exit; +} if (!file_exists("settings.xml.template_install")) { echo "Can't install SeedDMS, 'settings.xml.template_install' missing"; exit; @@ -50,6 +54,7 @@ function openDBConnection($settings) { /* {{{ */ case 'mysql': case 'mysqli': case 'mysqlnd': + case 'pgsql': $tmp = explode(":", $settings->_dbHostname); $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0]; if(isset($tmp[1])) @@ -118,7 +123,7 @@ function fileExistsInIncludePath($file) { /* {{{ */ * Load default settings + set */ define("SEEDDMS_INSTALL", "on"); -define("SEEDDMS_VERSION", "5.0.11"); +define("SEEDDMS_VERSION", "5.1.2"); require_once('../inc/inc.ClassSettings.php'); @@ -297,6 +302,8 @@ if ($action=="setSettings") { $queries = file_get_contents("create_tables-innodb.sql"); elseif($settings->_dbDriver=="sqlite") $queries = file_get_contents("create_tables-sqlite3.sql"); + elseif($settings->_dbDriver=="pgsql") + $queries = file_get_contents("create_tables-postgres.sql"); else die(); @@ -338,7 +345,18 @@ if ($action=="setSettings") { $needsupdate = false; $connTmp =openDBConnection($settings); if ($connTmp) { - $res = $connTmp->query('select * from tblVersion'); + switch($settings->_dbDriver) { + case 'mysql': + case 'mysqli': + case 'mysqlnd': + case 'sqlite': + $sql = 'select * from `tblVersion`'; + break; + case 'pgsql': + $sql = 'select * from "tblVersion"'; + break; + } + $res = $connTmp->query($sql); if($res) { if($rec = $res->fetch(PDO::FETCH_ASSOC)) { $updatedirs = array(); diff --git a/install/update-5.1.0/update-sqlite3.sql b/install/update-5.1.0/update-sqlite3.sql new file mode 100644 index 000000000..ac2c192a7 --- /dev/null +++ b/install/update-5.1.0/update-sqlite3.sql @@ -0,0 +1,205 @@ +BEGIN; + +ALTER TABLE `tblVersion` RENAME TO `__tblVersion`; + +CREATE TABLE `tblVersion` ( + `date` TEXT default NULL, + `major` INTEGER, + `minor` INTEGER, + `subminor` INTEGER +); + +INSERT INTO `tblVersion` SELECT * FROM `__tblVersion`; + +DROP TABLE `__tblVersion`; + +ALTER TABLE `tblUserImages` RENAME TO `__tblUserImages`; + +CREATE TABLE `tblUserImages` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, + `image` blob NOT NULL, + `mimeType` varchar(100) NOT NULL default '' +); + +INSERT INTO `tblUserImages` SELECT * FROM `__tblUserImages`; + +DROP TABLE `__tblUserImages`; + +ALTER TABLE `tblDocumentContent` RENAME TO `__tblDocumentContent`; + +CREATE TABLE `tblDocumentContent` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `document` INTEGER NOT NULL default '0' REFERENCES `tblDocuments` (`id`), + `version` INTEGER unsigned NOT NULL, + `comment` text, + `date` INTEGER default NULL, + `createdBy` INTEGER default NULL, + `dir` varchar(255) NOT NULL default '', + `orgFileName` varchar(150) NOT NULL default '', + `fileType` varchar(10) NOT NULL default '', + `mimeType` varchar(100) NOT NULL default '', + `fileSize` INTEGER, + `checksum` char(32), + UNIQUE (`document`,`version`) +); + +INSERT INTO `tblDocumentContent` SELECT * FROM `__tblDocumentContent`; + +DROP TABLE `__tblDocumentContent`; + +ALTER TABLE `tblDocumentFiles` RENAME TO `__tblDocumentFiles`; + +CREATE TABLE `tblDocumentFiles` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `document` INTEGER NOT NULL default 0 REFERENCES `tblDocuments` (`id`), + `userID` INTEGER NOT NULL default 0 REFERENCES `tblUsers` (`id`), + `comment` text, + `name` varchar(150) default NULL, + `date` INTEGER default NULL, + `dir` varchar(255) NOT NULL default '', + `orgFileName` varchar(150) NOT NULL default '', + `fileType` varchar(10) NOT NULL default '', + `mimeType` varchar(100) NOT NULL default '' +) ; + +INSERT INTO `tblDocumentFiles` SELECT * FROM `__tblDocumentFiles`; + +DROP TABLE `__tblDocumentFiles`; + +ALTER TABLE `tblDocumentFiles` ADD COLUMN `version` INTEGER unsigned NOT NULL DEFAULT '0'; + +ALTER TABLE `tblDocumentFiles` ADD COLUMN `public` INTEGER unsigned NOT NULL DEFAULT '0'; + +ALTER TABLE `tblUsers` RENAME TO `__tblUsers`; + +CREATE TABLE `tblUsers` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `login` varchar(50) default NULL, + `pwd` varchar(50) default NULL, + `fullName` varchar(100) default NULL, + `email` varchar(70) default NULL, + `language` varchar(32) NOT NULL, + `theme` varchar(32) NOT NULL, + `comment` text NOT NULL, + `role` INTEGER NOT NULL default '0', + `hidden` INTEGER NOT NULL default '0', + `pwdExpiration` TEXT default NULL, + `loginfailures` INTEGER NOT NULL default '0', + `disabled` INTEGER NOT NULL default '0', + `quota` INTEGER, + `homefolder` INTEGER default NULL REFERENCES `tblFolders` (`id`), + UNIQUE (`login`) +); + +INSERT INTO `tblUsers` SELECT * FROM `__tblUsers`; + +DROP TABLE `__tblUsers`; + +ALTER TABLE `tblUserPasswordRequest` RENAME TO `__tblUserPasswordRequest`; + +CREATE TABLE `tblUserPasswordRequest` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, + `hash` varchar(50) default NULL, + `date` TEXT NOT NULL +); + +INSERT INTO `tblUserPasswordRequest` SELECT * FROM `__tblUserPasswordRequest`; + +DROP TABLE `__tblUserPasswordRequest`; + +ALTER TABLE `tblUserPasswordHistory` RENAME TO `__tblUserPasswordHistory`; + +CREATE TABLE `tblUserPasswordHistory` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, + `pwd` varchar(50) default NULL, + `date` TEXT NOT NULL +); + +INSERT INTO `tblUserPasswordHistory` SELECT * FROM `__tblUserPasswordHistory`; + +DROP TABLE `__tblUserPasswordHistory`; + +ALTER TABLE `tblDocumentReviewLog` RENAME TO `__tblDocumentReviewLog`; + +CREATE TABLE `tblDocumentReviewLog` ( + `reviewLogID` INTEGER PRIMARY KEY AUTOINCREMENT, + `reviewID` INTEGER NOT NULL default 0 REFERENCES `tblDocumentReviewers` (`reviewID`) ON DELETE CASCADE, + `status` INTEGER NOT NULL default 0, + `comment` TEXT NOT NULL, + `date` TEXT NOT NULL, + `userID` INTEGER NOT NULL default 0 REFERENCES `tblUsers` (`id`) ON DELETE CASCADE +); + +INSERT INTO `tblDocumentReviewLog` SELECT * FROM `__tblDocumentReviewLog`; + +DROP TABLE `__tblDocumentReviewLog`; + +ALTER TABLE `tblDocumentStatusLog` RENAME TO `__tblDocumentStatusLog`; + +CREATE TABLE `tblDocumentStatusLog` ( + `statusLogID` INTEGER PRIMARY KEY AUTOINCREMENT, + `statusID` INTEGER NOT NULL default '0' REFERENCES `tblDocumentStatus` (`statusID`) ON DELETE CASCADE, + `status` INTEGER NOT NULL default '0', + `comment` text NOT NULL, + `date` TEXT NOT NULL, + `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE +) ; + +INSERT INTO `tblDocumentStatusLog` SELECT * FROM `__tblDocumentStatusLog`; + +DROP TABLE `__tblDocumentStatusLog`; + +ALTER TABLE `tblDocumentApproveLog` RENAME TO `__tblDocumentApproveLog`; + +CREATE TABLE `tblDocumentApproveLog` ( + `approveLogID` INTEGER PRIMARY KEY AUTOINCREMENT, + `approveID` INTEGER NOT NULL default '0' REFERENCES `tblDocumentApprovers` (`approveID`) ON DELETE CASCADE, + `status` INTEGER NOT NULL default '0', + `comment` TEXT NOT NULL, + `date` TEXT NOT NULL, + `userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE +); + +INSERT INTO `tblDocumentApproveLog` SELECT * FROM `__tblDocumentApproveLog`; + +DROP TABLE `__tblDocumentApproveLog`; + +ALTER TABLE `tblWorkflowLog` RENAME TO `__tblWorkflowLog`; + +CREATE TABLE `tblWorkflowLog` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `document` INTEGER default NULL REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, + `version` INTEGER default NULL, + `workflow` INTEGER default NULL REFERENCES `tblWorkflows` (`id`) ON DELETE CASCADE, + `userid` INTEGER default NULL REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, + `transition` INTEGER default NULL REFERENCES `tblWorkflowTransitions` (`id`) ON DELETE CASCADE, + `date` datetime NOT NULL, + `comment` text +); + +INSERT INTO `tblWorkflowLog` SELECT * FROM `__tblWorkflowLog`; + +DROP TABLE `__tblWorkflowLog`; + +ALTER TABLE `tblWorkflowDocumentContent` RENAME TO `__tblWorkflowDocumentContent`; + +CREATE TABLE `tblWorkflowDocumentContent` ( + `parentworkflow` INTEGER DEFAULT 0, + `workflow` INTEGER DEFAULT NULL REFERENCES `tblWorkflows` (`id`) ON DELETE CASCADE, + `document` INTEGER DEFAULT NULL REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, + `version` INTEGER DEFAULT NULL, + `state` INTEGER DEFAULT NULL REFERENCES `tblWorkflowStates` (`id`) ON DELETE CASCADE, + `date` datetime NOT NULL +); + +INSERT INTO `tblWorkflowDocumentContent` SELECT * FROM `__tblWorkflowDocumentContent`; + +DROP TABLE `__tblWorkflowDocumentContent`; + +UPDATE tblVersion set major=5, minor=1, subminor=0; + +COMMIT; + diff --git a/install/update-5.1.0/update.sql b/install/update-5.1.0/update.sql new file mode 100644 index 000000000..cb69d9f52 --- /dev/null +++ b/install/update-5.1.0/update.sql @@ -0,0 +1,34 @@ +START TRANSACTION; + +ALTER TABLE `tblDocumentContent` CHANGE `mimeType` `mimeType` varchar(100) NOT NULL DEFAULT ''; + +ALTER TABLE `tblDocumentFiles` CHANGE `mimeType` `mimeType` varchar(100) NOT NULL DEFAULT ''; + +ALTER TABLE `tblUserImages` CHANGE `mimeType` `mimeType` varchar(100) NOT NULL DEFAULT ''; + +ALTER TABLE `tblDocumentFiles` ADD COLUMN `public` tinyint(1) NOT NULL DEFAULT '0' AFTER `document`; + +ALTER TABLE `tblDocumentFiles` ADD COLUMN `version` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `document`; + +ALTER TABLE `tblUsers` CHANGE `pwdExpiration` `pwdExpiration` datetime DEFAULT NULL; + +ALTER TABLE `tblUserPasswordRequest` CHANGE `date` `date` datetime NOT NULL; + +ALTER TABLE `tblUserPasswordHistory` CHANGE `date` `date` datetime NOT NULL; + +ALTER TABLE `tblDocumentApproveLog` CHANGE `date` `date` datetime NOT NULL; + +ALTER TABLE `tblDocumentReviewLog` CHANGE `date` `date` datetime NOT NULL; + +ALTER TABLE `tblDocumentStatusLog` CHANGE `date` `date` datetime NOT NULL; + +ALTER TABLE `tblWorkflowLog` CHANGE `date` `date` datetime NOT NULL; + +ALTER TABLE `tblWorkflowDocumentContent` CHANGE `date` `date` datetime NOT NULL; + +ALTER TABLE `tblVersion` CHANGE `date` `date` datetime NOT NULL; + +UPDATE tblVersion set major=5, minor=1, subminor=0; + +COMMIT; + diff --git a/install/update-5.1.0/update.txt b/install/update-5.1.0/update.txt new file mode 100644 index 000000000..4d2fba328 --- /dev/null +++ b/install/update-5.1.0/update.txt @@ -0,0 +1,15 @@ +Caution when you update an sqlite database +========================================== + +The database changes for this version will require to change the +definition of various columns. This is not easily possible when using +sqlite. Therefore, the affected tables are first renamed, than +new tables with the modified columns are created and the old table +contents will be copied into the new tables. The old tables will +be removed afterwards. + +Because sqlite does not support transactions on alter, create and drop +table these changes cannot not be undone in case of an error. Backup +your database before and consider to do the update manually by running + +cat install/update-5.1.0/update-sqlite.sql | sqlite data/content.db diff --git a/install/update.php b/install/update.php index 23e1714ce..0682492d4 100644 --- a/install/update.php +++ b/install/update.php @@ -49,13 +49,23 @@ switch($settings->_dbDriver) { case 'mysql': case 'mysqli': case 'mysqlnd': - $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$settings->_dbHostname; + $tmp = explode(":", $settings->_dbHostname); + $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0]; + if(isset($tmp[1])) + $dsn .= ";port=".$tmp[1]; break; case 'sqlite': $dsn = $settings->_dbDriver.":".$settings->_dbDatabase; if(file_exists('update-'.$_GET['version'].'/update-sqlite3.sql')) $sqlfile = "update-sqlite3.sql"; break; + case 'pgsql': + $tmp = explode(":", $settings->_dbHostname); + $dsn = $settings->_dbDriver.":dbname=".$settings->_dbDatabase.";host=".$tmp[0]; + if(isset($tmp[1])) + $dsn .= ";port=".$tmp[1]; + if(file_exists('update-'.$_GET['version'].'/update-postgres.sql')) + $sqlfile = "update-postgres.sql"; } $db = new PDO($dsn, $settings->_dbUser, $settings->_dbPass); if (!$db) { diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 869209281..8dc9b55b1 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -222,6 +222,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => 'من فضلك اختر تعريف السمة', @@ -454,7 +455,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'تم تغيير تاريخ الصلاحية', @@ -593,6 +596,7 @@ URL: [url]', 'invalid_target_folder' => 'معرف خاطىء لمجلد الهدف', 'invalid_user_id' => 'معرف مستخدم خاطىء', 'invalid_version' => 'اصدار مستند خاطىء', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => 'رهن مسار عمل', 'is_disabled' => 'تعطيل الحساب', @@ -1020,6 +1024,7 @@ URL: [url]', 'seq_end' => 'في الاخر', 'seq_keep' => 'حافظ على المرتبة', 'seq_start' => 'اول مرتبة', +'sessions' => '', 'settings' => 'الإعدادات', 'settings_activate_module' => 'Activate module', 'settings_activate_php_extension' => 'Activate PHP extension', @@ -1125,6 +1130,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => '', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => '', 'settings_enableNotificationAppRev_desc' => '', 'settings_enableNotificationWorkflow' => '', @@ -1143,6 +1150,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => '', 'settings_enableThemeSelector_desc' => '', 'settings_enableUpdateReceipt' => '', @@ -1365,6 +1374,7 @@ URL: [url]', 'splash_moved_clipboard' => '', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => '', 'splash_rm_attribute' => '', 'splash_rm_document' => 'تم حذف المستند', @@ -1554,6 +1564,7 @@ URL: [url]', 'workflow_action_name' => 'اسم', 'workflow_editor' => 'محرر مسارات العمل', 'workflow_group_summary' => 'ملخص المجموعة', +'workflow_has_cycle' => '', 'workflow_initstate' => 'الحالة الابتدائية', 'workflow_in_use' => 'مسار العمل هذا مستخدم حاليا لمستندات', 'workflow_layoutdata_saved' => '', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index e8d0cb6b5..ab60f7778 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 (791) +// Translators: Admin (831) $text = array( '2_factor_auth' => '', @@ -53,7 +53,7 @@ $text = array( 'add_attrdefgroup' => '', 'add_document' => 'Добави документ', 'add_document_link' => 'Добави препратка', -'add_document_notify' => '', +'add_document_notify' => 'Добави нотификация', 'add_doc_reviewer_approver_warning' => 'Документът получава статус ДОСТЪПЕН автоматично ако няма нито рецензент нито утвърждаващ', 'add_doc_workflow_warning' => 'N.B. Документът автоматично семаркира като освободен ако не се работи по него.', 'add_event' => 'Добави събитие', @@ -105,7 +105,7 @@ $text = array( 'april' => 'Април', 'archive_creation' => 'Създаване архив', 'archive_creation_warning' => 'Тази операция ще създаде архив, съдържащ всички папки. След създаването архивът ще бъде съхранен в папката с данни на сървъра.
ВНИМАНИЕ: Архивът създаден като понятен за човек, ще бъде непригоден за бекъп!', -'ar_EG' => '', +'ar_EG' => 'Арабски', 'assign_approvers' => 'Назначи утвърждаващи', 'assign_reviewers' => 'Назначи рецензенти', 'assign_user_property_to' => 'Назначи свойства на потребителя', @@ -158,7 +158,7 @@ $text = array( 'at_least_n_users_of_group' => '', 'august' => 'Август', 'authentication' => '', -'author' => '', +'author' => 'Автор', 'automatic_status_update' => 'Автоматично изменение на статуса', 'back' => 'Назад', 'backup_list' => 'Списък на бекъпите', @@ -166,7 +166,7 @@ $text = array( 'backup_remove' => 'Изтрий бекъп', 'backup_tools' => 'Иструменти за бекъп', 'between' => 'между', -'bg_BG' => '', +'bg_BG' => 'Български', 'browse' => 'Преглеждане', 'calendar' => 'Календар', 'calendar_week' => '', @@ -187,14 +187,14 @@ $text = array( 'category_info' => '', 'category_in_use' => 'Тази категория се използва от документите', 'category_noname' => 'Въведете име на категорията', -'ca_ES' => '', +'ca_ES' => 'Каталунски', 'change_assignments' => 'Промени предназначението', 'change_password' => 'Промени паролата', 'change_password_message' => 'Паролата променена', 'change_recipients' => '', 'change_revisors' => '', 'change_status' => 'Промени статусът', -'charts' => '', +'charts' => 'Графики', 'chart_docsaccumulated_title' => '', 'chart_docspercategory_title' => '', 'chart_docspermimetype_title' => '', @@ -207,6 +207,7 @@ $text = array( 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => 'Изберете attribute definition', @@ -260,7 +261,7 @@ $text = array( 'create_fulltext_index' => 'Създай пълнотекстов индекс', 'create_fulltext_index_warning' => 'Вие искате да пресъздадете пълнотекстов индекс. Това ще отнеме време и ще понижи производителността. Да продолжа ли?', 'creation_date' => 'Създаден', -'cs_CZ' => '', +'cs_CZ' => 'Чешки', 'current_password' => 'Текуща парола', 'current_quota' => '', 'current_state' => '', @@ -277,7 +278,7 @@ $text = array( 'delete' => 'Изтрий', 'details' => 'Детайли', 'details_version' => 'Детайли за версия: [version]', -'de_DE' => '', +'de_DE' => 'Немски', 'disclaimer' => 'Работим аккуратно и задълбочено. От това зависи бъдeщето на нашата страна и благополучието на народа.nПетилетката за три години!nДа не оставим неодрусана слива в наше село!', 'discspace' => '', 'docs_in_reception_no_access' => '', @@ -347,7 +348,7 @@ $text = array( 'dropfolder_file' => 'Файл от drop папка', 'dropfolder_folder' => '', 'dropupload' => '', -'drop_files_here' => '', +'drop_files_here' => 'Пусни файла тук!', 'dump_creation' => 'Създаване дъмп на БД', 'dump_creation_warning' => 'Тази операция шъ създаде дамп на базата данни. След създаването, файлът ще бъде съхранен в папката с данни на сървъра.', 'dump_list' => 'Съществуващи дъмпове', @@ -375,7 +376,7 @@ $text = array( 'edit_user' => 'Редактирай потребител', 'edit_user_details' => 'Редактирай данните на потребителя', 'edit_version' => '', -'el_GR' => '', +'el_GR' => 'Гръцки', 'email' => 'Email', 'email_error_title' => 'Email не е указан', 'email_footer' => 'Винаги можете да измените e-mail исползвайки функцията \'Моя учетка\'', @@ -384,7 +385,7 @@ $text = array( 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Няма документи или папки', 'empty_notify_list' => 'Няма записи', -'en_GB' => '', +'en_GB' => 'Английски (Великобритания)', 'equal_transition_states' => 'Началното и крайно състояние са еднакви', 'error' => 'Грешка', 'error_add_aro' => '', @@ -398,7 +399,7 @@ $text = array( 'error_remove_folder' => '', 'error_remove_permission' => '', 'error_toogle_permission' => '', -'es_ES' => '', +'es_ES' => 'Испански', 'event_details' => 'Детайли за събитието', 'exclude_items' => '', 'expired' => 'Изтекъл', @@ -409,14 +410,16 @@ $text = array( 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Датата на изтичане променена', 'expiry_changed_email_body' => '', 'expiry_changed_email_subject' => '', 'export' => '', -'extension_manager' => '', +'extension_manager' => 'управление на добавките', 'february' => 'Февруари', 'file' => 'Файл', 'files' => 'Файлове', @@ -447,7 +450,7 @@ $text = array( 'friday' => 'петък', 'friday_abbr' => '', 'from' => 'От', -'fr_FR' => '', +'fr_FR' => 'Френски', 'fullsearch' => 'Пълнотекстово търсене', 'fullsearch_hint' => 'Използвай пълнотекстов индекс', 'fulltextsearch_disabled' => '', @@ -476,14 +479,14 @@ $text = array( 'hook_name' => '', 'hourly' => 'Ежечасно', 'hours' => 'часа', -'hr_HR' => '', +'hr_HR' => 'Хърватски', 'human_readable' => 'Човекопонятен архив', -'hu_HU' => '', +'hu_HU' => 'Унгарски', 'id' => 'ID', 'identical_version' => 'Новата версия е идентична с текущата.', 'import' => '', 'importfs' => '', -'import_fs' => '', +'import_fs' => 'добави от файловата система', 'import_fs_warning' => '', 'include_content' => '', 'include_documents' => 'Включи документи', @@ -492,7 +495,7 @@ $text = array( 'index_converters' => 'Index document conversion', 'index_done' => '', 'index_error' => '', -'index_folder' => '', +'index_folder' => 'Индекс на директорията', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'Личности', @@ -524,11 +527,12 @@ $text = array( 'invalid_target_folder' => 'Неправилен идентификатор на целевата папка', 'invalid_user_id' => 'Неправилен идентификатор на потребителя', 'invalid_version' => 'Неправилна версия на документа', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => 'в процес', 'is_disabled' => 'забранена сметка', 'is_hidden' => 'Не показвай в списъка с потребители', -'it_IT' => '', +'it_IT' => 'Италиански', 'january' => 'януари', 'js_form_error' => '', 'js_form_errors' => '', @@ -555,9 +559,9 @@ $text = array( 'keep' => '', 'keep_doc_status' => 'Запази статуса на документа', 'keywords' => 'Ключови думи', -'keywords_loading' => '', +'keywords_loading' => 'Моля, изчакайте, докато ключовите думи се зареждат', 'keyword_exists' => 'Ключовата дума съществува', -'ko_KR' => '', +'ko_KR' => 'Корейски', 'language' => 'Език', 'lastaccess' => '', 'last_update' => 'Последно обновление', @@ -570,7 +574,7 @@ $text = array( 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Ако искате да качите файлове над текущия лимит, използвайте друг начин.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Списък на права', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'local_file' => 'Локален файл', @@ -642,7 +646,7 @@ $text = array( 'new_subfolder_email_subject' => '', 'new_user_image' => 'Ново изображение', 'next_state' => 'Ново състояние', -'nl_NL' => '', +'nl_NL' => 'Холандски', 'no' => 'Не', 'notify_added_email' => 'Вие сте добавен в списъка с уведомявани', 'notify_added_email_body' => '', @@ -716,7 +720,7 @@ $text = array( 'pending_reviews' => '', 'pending_workflows' => '', 'personal_default_keywords' => 'Личен списък с ключови думи', -'pl_PL' => '', +'pl_PL' => 'Полски', 'possible_substitutes' => '', 'preset_expires' => '', 'preview' => '', @@ -726,7 +730,7 @@ $text = array( 'preview_plain' => '', 'previous_state' => 'Предишно състояние', 'previous_versions' => 'Предишни версии', -'pt_BR' => '', +'pt_BR' => 'Португалски (Бразилия)', 'quota' => 'Квота', 'quota_exceeded' => 'Вашата дискова квота е превишена с [bytes].', 'quota_is_disabled' => '', @@ -831,11 +835,11 @@ $text = array( 'role_name' => '', 'role_type' => '', 'role_user' => 'Потребител', -'ro_RO' => '', +'ro_RO' => 'Румънски', 'run_subworkflow' => 'Пусни под-процес', 'run_subworkflow_email_body' => '', 'run_subworkflow_email_subject' => '', -'ru_RU' => '', +'ru_RU' => 'Руски', 'saturday' => 'събота', 'saturday_abbr' => '', 'save' => 'Съхрани', @@ -865,12 +869,12 @@ $text = array( 'select_grp_ind_notification' => '', 'select_grp_ind_recipients' => '', 'select_grp_ind_reviewers' => '', -'select_grp_notification' => '', +'select_grp_notification' => 'Избор на групова нотификация', 'select_grp_recipients' => '', 'select_grp_reviewers' => 'Кликни да избереш група рецензенти', 'select_grp_revisors' => '', 'select_ind_approvers' => 'Кликни да избереш утвърждаващ', -'select_ind_notification' => '', +'select_ind_notification' => 'Избор на индивидуална нотификация', 'select_ind_recipients' => '', 'select_ind_reviewers' => 'Кликни да избереш рецензент', 'select_ind_revisors' => '', @@ -885,6 +889,7 @@ $text = array( 'seq_end' => 'В края', 'seq_keep' => 'Съхрани позицията', 'seq_start' => 'Първа позиция', +'sessions' => '', 'settings' => 'Настройки', 'settings_activate_module' => 'Активирай модул', 'settings_activate_php_extension' => 'Активирай разширение на PHP', @@ -990,6 +995,8 @@ $text = array( 'settings_enableLargeFileUpload_desc' => 'Ако е включено, качване на файлове е дустъпно и чрез джава-аплет, именован jumploader, без лимит за размер на файла. Това също ще позволи да се качват няколко файла наведнъж.', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Разреши уведомление до рецензиращи/утвърждаващи', 'settings_enableNotificationAppRev_desc' => 'Избери за изпращане на уведомление до рецензиращи/утвърждаващи когато се добавя нова версия на документа', 'settings_enableNotificationWorkflow' => '', @@ -1008,6 +1015,8 @@ $text = array( 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => '', 'settings_enableThemeSelector_desc' => '', 'settings_enableUpdateReceipt' => '', @@ -1197,7 +1206,7 @@ $text = array( 'sign_in' => 'вход', 'sign_out' => 'изход', 'sign_out_user' => '', -'sk_SK' => '', +'sk_SK' => 'Словашки', 'space_used_on_data_folder' => 'Размер на каталога с данните', 'splash_added_to_clipboard' => '', 'splash_add_attribute' => '', @@ -1213,7 +1222,7 @@ $text = array( 'splash_document_checkedout' => '', 'splash_document_edited' => '', 'splash_document_indexed' => '', -'splash_document_locked' => '', +'splash_document_locked' => 'Документът е заключен', 'splash_document_unlocked' => '', 'splash_edit_attribute' => '', 'splash_edit_event' => '', @@ -1230,9 +1239,10 @@ $text = array( 'splash_moved_clipboard' => '', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => '', 'splash_rm_attribute' => '', -'splash_rm_document' => '', +'splash_rm_document' => 'Документът е преместен', 'splash_rm_download_link' => '', 'splash_rm_folder' => '', 'splash_rm_group' => '', @@ -1279,14 +1289,14 @@ $text = array( 'submit_userinfo' => 'Изпрати информация за потребител', 'subsribe_timelinefeed' => '', 'substitute_to_user' => '', -'substitute_user' => '', +'substitute_user' => 'Заместващ потребител', 'success_add_aro' => '', 'success_add_permission' => '', 'success_remove_permission' => '', 'success_toogle_permission' => '', 'sunday' => 'неделя', 'sunday_abbr' => '', -'sv_SE' => '', +'sv_SE' => 'Шведски', 'switched_to' => '', 'takeOverAttributeValue' => '', 'takeOverGrpApprover' => '', @@ -1300,7 +1310,7 @@ $text = array( 'theme' => 'Тема', 'thursday' => 'четвъртък', 'thursday_abbr' => '', -'timeline' => '', +'timeline' => 'времева линия', 'timeline_add_file' => '', 'timeline_add_version' => '', 'timeline_full_add_file' => '', @@ -1330,12 +1340,12 @@ $text = array( 'transmittal_size' => '', 'tree_loading' => '', 'trigger_workflow' => 'Процес', -'tr_TR' => '', +'tr_TR' => 'Турски', 'tuesday' => 'вторник', 'tuesday_abbr' => '', 'type_of_hook' => '', 'type_to_search' => 'Тип за търсене', -'uk_UA' => '', +'uk_UA' => 'Украински', 'under_folder' => 'В папка', 'unknown_attrdef' => '', 'unknown_command' => 'Командата не е позната.', @@ -1379,7 +1389,7 @@ $text = array( 'user_login' => 'Идентификатор на потребителя', 'user_management' => 'Управление на потребителите', 'user_name' => 'Пълно име', -'use_comment_of_document' => '', +'use_comment_of_document' => 'Използвай коментара от документа', 'use_default_categories' => 'Исползвай предопределени категории', 'use_default_keywords' => 'Исползовай предопределенни ключови думи', 'valid_till' => '', @@ -1405,6 +1415,7 @@ $text = array( 'workflow_action_name' => 'Име', 'workflow_editor' => 'Редактор на процес', 'workflow_group_summary' => 'Резюме за група', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Начално състояние', 'workflow_in_use' => 'Този процес се използва от документ.', 'workflow_layoutdata_saved' => '', @@ -1425,7 +1436,7 @@ $text = array( 'workflow_user_summary' => 'Резюме за потребител', 'year_view' => 'годишен изглед', 'yes' => 'Да', -'zh_CN' => '', -'zh_TW' => '', +'zh_CN' => 'Китайски (Китай)', +'zh_TW' => 'Китайски (Тайван)', ); ?> diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index f370b7788..73404594d 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -212,6 +212,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => '', @@ -414,7 +415,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Data de caducitat modificada', @@ -529,6 +532,7 @@ URL: [url]', 'invalid_target_folder' => 'ID de carpeta destinació no válid', 'invalid_user_id' => 'ID d\'usuari no vàlid', 'invalid_version' => 'La versión de documento no és vàlida', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => '', 'is_disabled' => '', @@ -890,6 +894,7 @@ URL: [url]', 'seq_end' => 'Al final', 'seq_keep' => 'Mantenir posició', 'seq_start' => 'Primera posició', +'sessions' => '', 'settings' => 'Settings', 'settings_activate_module' => 'Activate module', 'settings_activate_php_extension' => 'Activate PHP extension', @@ -995,6 +1000,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => '', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => '', 'settings_enableNotificationAppRev_desc' => '', 'settings_enableNotificationWorkflow' => '', @@ -1013,6 +1020,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => '', 'settings_enableThemeSelector_desc' => '', 'settings_enableUpdateReceipt' => '', @@ -1235,6 +1244,7 @@ URL: [url]', 'splash_moved_clipboard' => '', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => '', 'splash_rm_attribute' => '', 'splash_rm_document' => 'Document esborrat', @@ -1410,6 +1420,7 @@ URL: [url]', 'workflow_action_name' => '', 'workflow_editor' => '', 'workflow_group_summary' => '', +'workflow_has_cycle' => '', 'workflow_initstate' => '', 'workflow_in_use' => '', 'workflow_layoutdata_saved' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index b72744743..857e35b12 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 (720), kreml (455) +// Translators: Admin (722), kreml (455) $text = array( '2_factor_auth' => '', @@ -229,6 +229,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => 'Zvolte definici atributů', @@ -461,7 +462,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Datum expirace změněno', @@ -564,7 +567,7 @@ URL: [url]', 'include_content' => '', 'include_documents' => 'Včetně dokumentů', 'include_subdirectories' => 'Včetně podadresářů', -'indexing_tasks_in_queue' => '', +'indexing_tasks_in_queue' => 'Indexování úkolů ve frontě', 'index_converters' => 'Index konverze dokumentu', 'index_done' => '', 'index_error' => '', @@ -600,6 +603,7 @@ URL: [url]', 'invalid_target_folder' => 'Neplatné cílové ID adresáře', 'invalid_user_id' => 'Neplatné ID uživatele', 'invalid_version' => 'Neplatná verze dokumentu', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => 'Zpracováváno', 'is_disabled' => 'Zakázaný účet', @@ -789,7 +793,7 @@ URL: [url]', 'only_jpg_user_images' => 'Pro obrázky uživatelů je možné použít pouze obrázky .jpg', 'order_by_sequence_off' => '', 'original_filename' => 'Originální název souboru', -'overall_indexing_progress' => '', +'overall_indexing_progress' => 'Celkový průběh indexování', 'owner' => 'Vlastník', 'ownership_changed_email' => 'Vlastník změněn', 'ownership_changed_email_body' => 'Vlastník změněn @@ -1029,6 +1033,7 @@ URL: [url]', 'seq_end' => 'Na konec', 'seq_keep' => 'Ponechat pozici', 'seq_start' => 'První pozice', +'sessions' => '', 'settings' => 'Settings', 'settings_activate_module' => 'Activate module', 'settings_activate_php_extension' => 'Activate PHP extension', @@ -1134,6 +1139,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'If set, file upload is also available through a java applet called jumploader without a file size limit set by the browser. It also allows to upload several files in one step.', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Povolit oznámení posuzovateli/schvalovateli', 'settings_enableNotificationAppRev_desc' => 'Označit pro oznamování posuzovateli/schvalovateli, pokud je přidána nová verze dokumentu.', 'settings_enableNotificationWorkflow' => '', @@ -1152,6 +1159,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => 'Povolit posouzení/schválení pro přihlášeného uživatele', 'settings_enableSelfRevApp_desc' => 'Povolte, pokud chcete aktuálně přihlášeného uvést jako posuzovatele/schvalovatele a pro přechody pracovního postupu', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Volba tématu', 'settings_enableThemeSelector_desc' => 'Volba témat na přihlašovací stránce.', 'settings_enableUpdateReceipt' => '', @@ -1374,6 +1383,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Schránka přenesena do aktuální složky', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Odstraněno ze schránky', 'splash_rm_attribute' => 'Atribut odstraněn', 'splash_rm_document' => 'Dokument odstraněn', @@ -1563,6 +1573,7 @@ URL: [url]', 'workflow_action_name' => 'Název', 'workflow_editor' => 'Editor pracovního postupu', 'workflow_group_summary' => 'Přehled skupiny', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Počáteční stav', 'workflow_in_use' => 'Tento pracovní postup je momentálně používán dokumentem.', 'workflow_layoutdata_saved' => '', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 491be8b4a..e20ccd608 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 (2403), dgrutsch (22) +// Translators: Admin (2420), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -56,7 +56,7 @@ URL: [url]', 'add_approval' => 'Freigabe hinzufügen', 'add_attrdefgroup' => 'Neue Attributgruppe anlegen', 'add_document' => 'Dokument anlegen', -'add_document_link' => 'Verweis hinzufügen', +'add_document_link' => 'Verknüpfung hinzufügen', 'add_document_notify' => 'Beobachter zuweisen', 'add_doc_reviewer_approver_warning' => 'Anmerkung: Dokumente werden automatisch geprüft und als freigegeben markiert, wenn kein Prüfer oder keine Freigabe zugewiesen wird.', 'add_doc_workflow_warning' => 'Anmerkung: Dokumente werden automatisch freigegeben, wenn kein Workflow gewählt wird.', @@ -234,6 +234,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'Die Datei des ausgecheckten Dokuments ist nicht mehr vorhanden. Ein Einchecken ist nicht möglich.', 'checkedout_file_is_unchanged' => 'Die Datei des ausgecheckten Dokuments ist noch unverändert. Das Einchecken ist daher nicht möglich. Wenn Sie keine weiteren Änderungen am Dokument vornehmen möchten, dann setzen Sie den CheckOut-Status zurück.', 'checkin_document' => 'Einchecken', +'checkoutpath_does_not_exist' => 'Verzeichnis für das Auschecken von Dokumenten exisitiert nicht', 'checkout_document' => 'Auschecken', 'checkout_is_disabled' => 'Auschecken von Dokumenten ist in der Konfiguration ausgeschaltet.', 'choose_attrdef' => 'Attributdefinition wählen', @@ -349,7 +350,7 @@ Benutzer: [username]', 'document_infos' => 'Informationen', 'document_is_checked_out' => 'Das Dokument ist zur Zeit ausgecheckt. Wenn Sie eine neue Version hochladen, werden Sie die ausgecheckte Version nicht mehr einchecken können.', 'document_is_not_locked' => 'Dieses Dokument ist nicht gesperrt', -'document_link_by' => 'Verweis erstellt von', +'document_link_by' => 'Verknüpfung erstellt von', 'document_link_public' => 'Für alle sichtbar', 'document_moved_email' => 'Dokument verschoben', 'document_moved_email_body' => 'Dokument verschoben @@ -472,7 +473,9 @@ Der Link ist bis zum [valid] gültig. 'expire_in_1h' => 'Ablauf in 1 Std.', 'expire_in_1m' => 'Ablauf in 1 Monat', 'expire_in_1w' => 'Ablauf in 1 Woche', +'expire_in_1y' => 'Ablauf in 1 Jahr', 'expire_in_2h' => 'Ablauf in 2 Std.', +'expire_in_2y' => 'Ablauf in 2 Jahren', 'expire_today' => 'Ablauf heute', 'expire_tomorrow' => 'Ablauf morgen', 'expiry_changed_email' => 'Ablaufdatum geändert', @@ -611,6 +614,7 @@ URL: [url]', 'invalid_target_folder' => 'Unzulässige Ziel-Ordner Identifikation', 'invalid_user_id' => 'Unzulässige Benutzernummer', 'invalid_version' => 'Unzulässige Dokumenten-Version', +'in_folder' => 'In', 'in_revision' => 'Erneute Prüfung', 'in_workflow' => 'im Workflow', 'is_disabled' => 'Anmeldung sperren', @@ -656,7 +660,7 @@ URL: [url]', 'linked_to_document' => 'Mit dem Dokument verknüpft', 'linked_to_this_version' => 'Mit dieser Version verknüpft', 'link_alt_updatedocument' => 'Wenn Sie ein Dokument hochladen möchten, das größer als die maximale Dateigröße ist, dann benutzen Sie bitte die alternative Upload-Seite.', -'link_to_version' => 'Version', +'link_to_version' => 'An Version hängen', 'list_access_rights' => 'Alle Zugriffsrechte auflisten ...', 'list_contains_no_access_docs' => 'Die Liste enthält weitere Dokumente auf die Sie keinen Zugriff haben und deshalb nicht angezeigt werden.', 'list_hooks' => 'Liste interne Aufrufe', @@ -1085,6 +1089,7 @@ URL: [url]', 'seq_end' => 'Ans Ende', 'seq_keep' => 'Beibehalten', 'seq_start' => 'An den Anfang', +'sessions' => 'Benutzer Online', 'settings' => 'Einstellungen', 'settings_activate_module' => 'Modul aktivieren', 'settings_activate_php_extension' => 'PHP-Erweiterung aktivieren', @@ -1121,8 +1126,8 @@ URL: [url]', 'settings_cookieLifetime_desc' => 'Die Lebensdauer des Cookies für die Sitzungsverwaltung. Wenn dieser Wert auf 0 gesetzt wird, dann wird der Cookie beim Schließen des Browsers gelöscht.', 'settings_coreDir' => 'Core SeedDMS Verzeichnis', 'settings_coreDir_desc' => 'Pfad zum PEAR-Paket SeedDMS_Core (optional). Lassen Sie diese Einstellung leer, wenn SeedDMS_Core ohnehin von PHP gefunden wird, weil es beispielweise im \'Extra PHP Include-Path\' installiert ist.', -'settings_createCheckOutDir' => 'Check out Verzeichnis', -'settings_createCheckOutDir_desc' => 'Dokumentenversionen werden hierhin kopiert, wenn ein Dokument ausgecheckt wird.', +'settings_createCheckOutDir' => 'Check out Verzeichnis erstellen', +'settings_createCheckOutDir_desc' => 'Check out Verzeichnis erstellen, wenn es nicht existiert.', 'settings_createdatabase' => 'Datenbank erzeugen', 'settings_createdirectory' => 'Verzeichnis erzeugen', 'settings_currentvalue' => 'Aktueller Wert', @@ -1190,6 +1195,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Wenn dies gesetzt ist, dann ist ebenfalls der Upload von Dokumenten durch ein java applet mit Namen \'jumploader\' ohne Begrenzung der maximalen Dateigröße möglich. Auch das Hochladen mehrerer Dokumente in einem Schritt wird dadurch ermöglicht. Das Einschalten bewirkt, dass keine http only Cookies mehr gesetzt werden.', 'settings_enableMenuTasks' => 'Aufgabenliste im Menü', 'settings_enableMenuTasks_desc' => 'Ein-/Ausschalten des Menüeintrags, der anstehenden Aufgaben des Benutzers enthält. Diese Liste beinhaltet Dokumente die geprüft, freigegeben, usw. werden müssen.', +'settings_enableMultiUpload' => 'Erlaube Hochladen mehrerer Dateien', +'settings_enableMultiUpload_desc' => 'Beim Erstellen eines neuen Dokuments können mehrere Dateien in einem Vorgang hochgeladen werden. Jede Datei erzeugt ein neues Dokument.', 'settings_enableNotificationAppRev' => 'Prűfer/Freigeber benachrichtigen', 'settings_enableNotificationAppRev_desc' => 'Setzen Sie diese Option, wenn die Prüfer und Freigeber eines Dokuments beim Hochladen einer neuen Version benachrichtigt werden sollen.', 'settings_enableNotificationWorkflow' => 'Sende Benachrichtigung an Benutzer im nächsten Workflow-Schritt', @@ -1208,6 +1215,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => 'Anwählen, um den Workflow der Wiederholungsprüfung von Dokumenten nach einer einstellbaren Zeit zu ermöglichen.', 'settings_enableSelfRevApp' => 'Erlaube Prüfung/Freigabe durch angemeldeten Benutzer', 'settings_enableSelfRevApp_desc' => 'Anwählen, um den aktuell angemeldeten Benutzer in der Liste der Prüfer/Freigeber und für Workflow-Aktionen auswählbar zu machen.', +'settings_enableSessionList' => 'Liste angemeldeter Benutzer einschalten', +'settings_enableSessionList_desc' => 'Schaltet die Liste der zur Zeit angemeldeten Benutzer im Menu ein/aus.', 'settings_enableThemeSelector' => 'Auswahl des Themas', 'settings_enableThemeSelector_desc' => 'Schaltet das Auswahlmenü für die Themenauswahl in der Anmeldemaske ein oder aus.', 'settings_enableUpdateReceipt' => 'Erlaube die Änderung einer Empfangsbestätigung', @@ -1430,6 +1439,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Inhalt der Zwischenablage in aktuellen Ordner verschoben', 'splash_move_document' => 'Dokument verschoben', 'splash_move_folder' => 'Ordner verschoben', +'splash_receipt_update_success' => 'Empfangsbestätigung hinzugefügt', 'splash_removed_from_clipboard' => 'Aus der Zwischenablage entfernt', 'splash_rm_attribute' => 'Attribut gelöscht', 'splash_rm_document' => 'Dokument gelöscht', @@ -1619,6 +1629,7 @@ URL: [url]', 'workflow_action_name' => 'Name', 'workflow_editor' => 'Workflow Editor', 'workflow_group_summary' => 'Gruppenübersicht', +'workflow_has_cycle' => 'Workflow hat Zyklus', 'workflow_initstate' => 'Initialer Status', 'workflow_in_use' => 'Dieser Workflow wird zur Zeit noch von einem Dokument verwendet.', 'workflow_layoutdata_saved' => 'Layout-Daten gespeichert', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index 45d441f83..12382af23 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 (220) +// Translators: Admin (226) $text = array( '2_factor_auth' => '', @@ -166,7 +166,7 @@ $text = array( 'backup_remove' => '', 'backup_tools' => 'Εργαλεία εφεδρικής καταγραφής', 'between' => 'μεταξύ', -'bg_BG' => '', +'bg_BG' => 'Βουλγάρικα', 'browse' => '', 'calendar' => 'Ημερολόγιο', 'calendar_week' => 'Εβδομάδα', @@ -187,14 +187,14 @@ $text = array( 'category_info' => '', 'category_in_use' => 'Η Κατηγορία αυτή είναι σε χρήση.', 'category_noname' => 'Δεν δόθηκε όνομα κατηγορίας.', -'ca_ES' => '', +'ca_ES' => 'Καταλανικά', 'change_assignments' => '', 'change_password' => 'Αλλαγή κωδικού', 'change_password_message' => 'Ο κωδικός σας έχει αλλάξει.', 'change_recipients' => '', 'change_revisors' => '', 'change_status' => '', -'charts' => '', +'charts' => 'Διαγράμματα', 'chart_docsaccumulated_title' => 'Αριθμός Εγγράφων', 'chart_docspercategory_title' => 'Έγγραφα κατά κατηγορία', 'chart_docspermimetype_title' => '', @@ -207,12 +207,13 @@ $text = array( 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => '', 'choose_attrdefgroup' => '', 'choose_category' => 'Επιλέξτε', -'choose_group' => '', +'choose_group' => 'Επιλέξτε Ομάδα', 'choose_role' => '', 'choose_target_category' => 'Επιλογή κατηγορίας', 'choose_target_document' => 'Επιλογή εγγράφου', @@ -226,7 +227,7 @@ $text = array( 'clear_cache' => '', 'clear_clipboard' => '', 'clear_password' => '', -'clipboard' => '', +'clipboard' => 'Πρόχειρο', 'close' => 'Κλέισιμο', 'command' => '', 'comment' => 'Σχόλιο', @@ -342,7 +343,7 @@ $text = array( 'draft' => '', 'draft_pending_approval' => '', 'draft_pending_review' => '', -'drag_icon_here' => '', +'drag_icon_here' => 'Σείρτε την εικόνα του φακέλου ή το έγγραφο εδώ!', 'dropfolderdir_missing' => '', 'dropfolder_file' => '', 'dropfolder_folder' => '', @@ -409,7 +410,9 @@ $text = array( 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Η ημερομηνία λήξης έχει αλλάξει', @@ -524,6 +527,7 @@ $text = array( 'invalid_target_folder' => '', 'invalid_user_id' => '', 'invalid_version' => '', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => '', 'is_disabled' => '', @@ -896,6 +900,7 @@ URL: [url]', 'seq_end' => 'Στο τέλος', 'seq_keep' => 'Διατήρηση θέσης', 'seq_start' => 'Τοποθέτηση στην αρχή', +'sessions' => '', 'settings' => 'Ρυθμίσεις', 'settings_activate_module' => '', 'settings_activate_php_extension' => '', @@ -1001,6 +1006,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => '', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => '', 'settings_enableNotificationAppRev_desc' => '', 'settings_enableNotificationWorkflow' => '', @@ -1019,6 +1026,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => '', 'settings_enableThemeSelector_desc' => '', 'settings_enableUpdateReceipt' => '', @@ -1241,6 +1250,7 @@ URL: [url]', 'splash_moved_clipboard' => '', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => '', 'splash_rm_attribute' => '', 'splash_rm_document' => '', @@ -1416,6 +1426,7 @@ URL: [url]', 'workflow_action_name' => 'Όνομα', 'workflow_editor' => '', 'workflow_group_summary' => '', +'workflow_has_cycle' => '', 'workflow_initstate' => '', 'workflow_in_use' => 'This workflow is currently used by documents.', 'workflow_layoutdata_saved' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 8222cb3c4..659aca8f6 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 (1531), dgrutsch (9), netixw (14) +// Translators: Admin (1545), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -234,6 +234,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'The file of the checked out document has disappeared. Check in will not be possible.', 'checkedout_file_is_unchanged' => 'The file of the checked out document is still unchanged. Check in will not be possible. If do not plan any modifications, you can reset the check out status.', 'checkin_document' => 'Check In', +'checkoutpath_does_not_exist' => 'Checkout path does not exists', 'checkout_document' => 'Check out', 'checkout_is_disabled' => 'Check out of documents is disabled in the configuration.', 'choose_attrdef' => 'Please choose attribute definition', @@ -473,7 +474,9 @@ The link is valid until [valid]. 'expire_in_1h' => 'Expires in 1h', 'expire_in_1m' => 'Expires in 1 month', 'expire_in_1w' => 'Expires in 1 week', +'expire_in_1y' => 'Expires in 1 year', 'expire_in_2h' => 'Expires in 2h', +'expire_in_2y' => 'Expires in 2 years', 'expire_today' => 'Expires today', 'expire_tomorrow' => 'Expires tomorrow', 'expiry_changed_email' => 'Expiry date changed', @@ -612,6 +615,7 @@ URL: [url]', 'invalid_target_folder' => 'Invalid Target Folder ID', 'invalid_user_id' => 'Invalid User ID', 'invalid_version' => 'Invalid Document Version', +'in_folder' => 'In', 'in_revision' => 'In revision', 'in_workflow' => 'In workflow', 'is_disabled' => 'Disable account', @@ -657,7 +661,7 @@ URL: [url]', 'linked_to_document' => 'Linked to document', 'linked_to_this_version' => 'Linked to this version', 'link_alt_updatedocument' => 'If you would like to upload files bigger than the current maximum upload size, please use the alternative upload page.', -'link_to_version' => 'Version', +'link_to_version' => 'Attach to version', 'list_access_rights' => 'List all access rights ...', 'list_contains_no_access_docs' => 'The list contains more documents you have no access to and are not displayed.', 'list_hooks' => 'List hooks', @@ -1080,6 +1084,7 @@ URL: [url]', 'seq_end' => 'At the end', 'seq_keep' => 'Keep Position', 'seq_start' => 'First position', +'sessions' => 'Users online', 'settings' => 'Settings', 'settings_activate_module' => 'Activate module', 'settings_activate_php_extension' => 'Activate PHP extension', @@ -1116,8 +1121,8 @@ URL: [url]', 'settings_cookieLifetime_desc' => 'The life time of a cookie in seconds. If set to 0 the cookie will be removed when the browser is closed.', 'settings_coreDir' => 'Core SeedDMS directory', 'settings_coreDir_desc' => 'Path to SeedDMS_Core (optional). Leave this empty if you have installed SeedDMS_Core at a place where it can be found by PHP, e.g. Extra PHP Include-Path', -'settings_createCheckOutDir' => 'Check out directory', -'settings_createCheckOutDir_desc' => 'Document version will be copied in this directory, when a document is checked out.', +'settings_createCheckOutDir' => 'Create check out directory', +'settings_createCheckOutDir_desc' => 'Create checkout dir if it does not exists', 'settings_createdatabase' => 'Create database tables', 'settings_createdirectory' => 'Create directory', 'settings_currentvalue' => 'Current value', @@ -1185,6 +1190,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'If set, file upload is also available through a java applet called jumploader without a file size limit set by the browser. It also allows to upload several files in one step. Turning this on will turn off http only cookies.', 'settings_enableMenuTasks' => 'Enable task list in menu', 'settings_enableMenuTasks_desc' => 'Enable/Disable the menu item which contains all tasks for the user. This contains documents, that need to be reviewed, approved, etc.', +'settings_enableMultiUpload' => 'Allow upload of multiple files', +'settings_enableMultiUpload_desc' => 'When creating a new document, multiple files can be uploaded. Each will create a new document.', 'settings_enableNotificationAppRev' => 'Enable reviewer/approver notification', 'settings_enableNotificationAppRev_desc' => 'Check to send a notification to the reviewer/approver when a new document version is added', 'settings_enableNotificationWorkflow' => 'Send notification to users in next workflow transition', @@ -1203,6 +1210,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => 'Enable, to be able to run the workflow for revising a document after a given period of time.', 'settings_enableSelfRevApp' => 'Allow review/approval for logged in user', 'settings_enableSelfRevApp_desc' => 'Enable this if you want the currently logged in user to be listed as reviewers/approvers and for workflow transitions.', +'settings_enableSessionList' => 'Enable list of users online', +'settings_enableSessionList_desc' => 'Enable list of currently logged in users in menu.', 'settings_enableThemeSelector' => 'Theme selection', 'settings_enableThemeSelector_desc' => 'Turns on/off the theme selector on the login page.', 'settings_enableUpdateReceipt' => 'Allow editing of existing reception', @@ -1425,6 +1434,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Clipboard moved into current folder', 'splash_move_document' => 'Document moved', 'splash_move_folder' => 'Folder moved', +'splash_receipt_update_success' => 'Reception added successfully', 'splash_removed_from_clipboard' => 'Removed from clipboard', 'splash_rm_attribute' => 'Attribute removed', 'splash_rm_document' => 'Document removed', @@ -1614,6 +1624,7 @@ URL: [url]', 'workflow_action_name' => 'Name', 'workflow_editor' => 'Workflow Editor', 'workflow_group_summary' => 'Group summary', +'workflow_has_cycle' => 'Workflow has cycle', 'workflow_initstate' => 'Initial state', 'workflow_in_use' => 'This workflow is currently used by documents.', 'workflow_layoutdata_saved' => 'Layout data saved', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 57c1bcd7f..a10de4468 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: acabello (20), Admin (1016), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1021), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -170,10 +170,10 @@ URL: [url]', 'attr_malformed_date' => '', 'attr_malformed_email' => '', 'attr_malformed_float' => '', -'attr_malformed_int' => '', +'attr_malformed_int' => 'El atributo valor \'[value]\' del atributo \'[attrname]\' no es un número entero válido', 'attr_malformed_url' => '', 'attr_max_values' => '', -'attr_min_values' => '', +'attr_min_values' => 'No se alcanza el número mínimo de valores requeridos para el campo [attrname]', 'attr_not_in_valueset' => '', 'attr_no_regex_match' => 'El valor del atributo no concuerda con la expresión regular', 'attr_validation_error' => '', @@ -229,6 +229,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => 'Por favor, seleccione definición de atributo', @@ -305,7 +306,7 @@ URL: [url]', 'docs_in_reception_no_access' => '', 'docs_in_revision_no_access' => '', 'document' => 'Documento', -'documentcontent' => '', +'documentcontent' => 'Contenido del documento', 'documents' => 'Documentos', 'documents_checked_out_by_you' => '', 'documents_in_process' => 'Documentos en proceso', @@ -461,7 +462,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Fecha de caducidad modificada', @@ -600,6 +603,7 @@ URL: [url]', 'invalid_target_folder' => 'ID de carpeta destino no válido', 'invalid_user_id' => 'ID de usuario no válido', 'invalid_version' => 'Versión de documento no válida', +'in_folder' => 'En el directorio', 'in_revision' => '', 'in_workflow' => 'En flujo de trabajo', 'is_disabled' => 'Deshabilitar cuenta', @@ -1035,6 +1039,7 @@ URL: [url]', 'seq_end' => 'Al final', 'seq_keep' => 'Mantener posición', 'seq_start' => 'Primera posición', +'sessions' => '', 'settings' => 'Configuración', 'settings_activate_module' => 'Activar módulo', 'settings_activate_php_extension' => 'Activar extensión PHP', @@ -1048,7 +1053,7 @@ URL: [url]', 'settings_autoLoginUser' => 'Acceso automatico', 'settings_autoLoginUser_desc' => '', 'settings_available_languages' => 'Idiomas disponibles', -'settings_available_languages_desc' => '', +'settings_available_languages_desc' => 'Unicamente los lenguages seleccionados seran cargados y mostrados en el selector de lenguages. El lenguage por defecto siempre sera cargado', 'settings_backupDir' => '', 'settings_backupDir_desc' => '', 'settings_cacheDir' => 'Carpeta caché', @@ -1140,6 +1145,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Si se habilita, la carga de ficheros también estará disponible a través de un applet java llamado jumploader, sin límite de tamaño de fichero fijado por el navegador. También permite la carga de múltiples ficheros de una sola vez.', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Habilitar notificación a revisor/aprobador', 'settings_enableNotificationAppRev_desc' => 'Habilitar para enviar notificación a revisor/aprobador cuando se añade una nueva versión de documento', 'settings_enableNotificationWorkflow' => 'Enviar notificación a los usuarios en la siguiente transacción del flujo.', @@ -1158,6 +1165,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => 'Permitir al usuario identificado revisar/aprobar.', 'settings_enableSelfRevApp_desc' => 'Habilitar esto si quiere que el usuario identificado sea listado como revisor/aprobador y para las transiciones del flujo de trabajo.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Selección de temas (skins)', 'settings_enableThemeSelector_desc' => 'Habilitar/deshabilitar la selección de temas en la página de login', 'settings_enableUpdateReceipt' => '', @@ -1380,6 +1389,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Portapapeles movido a la carpeta actual', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Eliminado del portapapeles', 'splash_rm_attribute' => 'Atributo eliminado', 'splash_rm_document' => 'Documento eliminado', @@ -1569,6 +1579,7 @@ URL: [url]', 'workflow_action_name' => 'Nombre', 'workflow_editor' => 'Editor de Flujo de Trabajo', 'workflow_group_summary' => 'Resumen de Grupo', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Estado Inicial', 'workflow_in_use' => 'Este flujo de trabajo esta siendo usado por documentos.', 'workflow_layoutdata_saved' => '', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 35537937e..7d27f988d 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 (1060), jeromerobert (50), lonnnew (9), Oudiceval (218) +// Translators: Admin (1062), jeromerobert (50), lonnnew (9), Oudiceval (250) $text = array( '2_factor_auth' => 'Authentification forte', @@ -234,6 +234,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'Le fichier du document bloqué n’existe plus. Le déblocage est impossible.', 'checkedout_file_is_unchanged' => 'Le fichier du document bloqué est inchangé. Le déblocage n’est pas possible. Si vous ne souhaitez pas apporter de modifications, désactivez le blocage.', 'checkin_document' => 'Débloquer (check-in)', +'checkoutpath_does_not_exist' => '', 'checkout_document' => 'Bloquer (check-out)', 'checkout_is_disabled' => 'Le blocage (check-out) de documents est désactivé dans la configuration.', 'choose_attrdef' => 'Choisissez une définition d\'attribut', @@ -389,8 +390,15 @@ URL: [url]', 'does_not_expire' => 'N\'expire jamais', 'does_not_inherit_access_msg' => 'Accès hérité', 'download' => 'Téléchargement', -'download_links' => '', -'download_link_email_body' => '', +'download_links' => 'Liens de téléchargement', +'download_link_email_body' => 'Cliquez sur le lien suivant pour télécharger la version [version] du document +« [docname] ». + +[url] + +Le lien est valide jusqu’au [valid]. + +[comment]', 'download_link_email_subject' => '', 'do_object_repair' => 'Réparer tous les dossiers et documents.', 'do_object_setchecksum' => 'Définir checksum', @@ -409,7 +417,7 @@ URL: [url]', 'dump_creation_warning' => 'Avec cette opération, vous pouvez créer une sauvegarde du contenu de votre base de données. Après la création, le fichier de sauvegarde sera sauvegardé dans le dossier de données de votre serveur.', 'dump_list' => 'Fichiers de sauvegarde existants', 'dump_remove' => 'Supprimer fichier de sauvegarde', -'duplicates' => '', +'duplicates' => 'Doublons', 'duplicate_content' => 'Contenu en double', 'edit' => 'Modifier', 'edit_attributes' => 'Modifier les attributs', @@ -459,16 +467,18 @@ URL: [url]', 'event_details' => 'Détails de l\'événement', 'exclude_items' => 'Exclure des élements', 'expired' => 'Expiré', -'expired_at_date' => '', +'expired_at_date' => 'Expiré le [datetime]', 'expires' => 'Expiration', -'expire_by_date' => '', -'expire_in_1d' => '', -'expire_in_1h' => '', -'expire_in_1m' => '', -'expire_in_1w' => '', -'expire_in_2h' => '', -'expire_today' => '', -'expire_tomorrow' => '', +'expire_by_date' => 'Expire à une date', +'expire_in_1d' => 'Expire dans 1 jour', +'expire_in_1h' => 'Expire dans 1 heure', +'expire_in_1m' => 'Expire dans 1 mois', +'expire_in_1w' => 'Expire dans 1 semaine', +'expire_in_1y' => 'Expire dans 1 an', +'expire_in_2h' => 'Expire dans 2 heures', +'expire_in_2y' => 'Expire dans 2 ans', +'expire_today' => 'Expire aujourd’hui', +'expire_tomorrow' => 'Expire demain', 'expiry_changed_email' => 'Date d\'expiration modifiée', 'expiry_changed_email_body' => 'Date d\'expiration modifiée Document : [name] @@ -551,7 +561,7 @@ URL: [url]', 'group_review_summary' => 'Résumé groupe correcteur', 'guest_login' => 'Se connecter comme invité', 'guest_login_disabled' => 'Connexion d\'invité désactivée.', -'hash' => '', +'hash' => 'Hash', 'help' => 'Aide', 'home_folder' => 'Dossier personnel', 'hook_name' => '', @@ -605,6 +615,7 @@ URL: [url]', 'invalid_target_folder' => 'Identifiant de dossier cible invalide', 'invalid_user_id' => 'Identifiant utilisateur invalide', 'invalid_version' => 'Version de document invalide', +'in_folder' => 'Dans', 'in_revision' => '', 'in_workflow' => 'Dans le workflow', 'is_disabled' => 'Compte désactivé', @@ -835,7 +846,7 @@ En cas de problème persistant, veuillez contacter votre administrateur.', 'personal_default_keywords' => 'Mots-clés personnels', 'pl_PL' => 'Polonais', 'possible_substitutes' => '', -'preset_expires' => '', +'preset_expires' => 'Expiration prédéfinie', 'preview' => 'Aperçu', 'preview_converters' => '', 'preview_images' => 'Miniatures', @@ -846,7 +857,7 @@ En cas de problème persistant, veuillez contacter votre administrateur.', 'pt_BR' => 'Portuguais (BR)', 'quota' => 'Quota', 'quota_exceeded' => 'Votre quota de disque est dépassé de [bytes].', -'quota_is_disabled' => 'Le support des quota est actuellement désactivé dans les réglages. Affecter un quota utilisateur n\'aura pas d\'effet jusqu\'à ce qu\'il soit de nouveau activé.', +'quota_is_disabled' => 'Le support des quotas est actuellement désactivé dans les réglages. Affecter un quota utilisateur n’aura pas d’effet jusqu’à ce qu’il soit de nouveau activé.', 'quota_warning' => 'Votre quota d’espace disque est dépassé de [bytes]. Veuillez supprimer des documents ou d\'anciennes versions.', 'receipt_deletion_email_body' => 'L’utilisateur a été retiré de la liste des destinataires Document : [name] @@ -888,7 +899,7 @@ Répertoire: [folder_path] Utilisateur: [username] URL: [url]', 'removed_workflow_email_subject' => '', -'removeFolderFromDropFolder' => '', +'removeFolderFromDropFolder' => 'Suppression du dossier après importation', 'remove_marked_files' => 'Supprimer les fichiers sélectionnés', 'repaired' => 'réparé', 'repairing_objects' => 'Réparation des documents et des dossiers.', @@ -1023,6 +1034,7 @@ URL: [url]', 'seq_end' => 'A la fin', 'seq_keep' => 'Conserver la position', 'seq_start' => 'Première position', +'sessions' => 'Utilisateurs en ligne', 'settings' => 'Configuration', 'settings_activate_module' => 'Activez le module', 'settings_activate_php_extension' => 'Activez l\'extension PHP', @@ -1126,8 +1138,10 @@ URL: [url]', 'settings_enableLanguageSelector_desc' => 'Montrer le sélecteur de langue d\'interface après connexion de l\'utilisateur.', 'settings_enableLargeFileUpload' => 'Activer téléchargement des gros fichiers', 'settings_enableLargeFileUpload_desc' => 'Si défini, le téléchargement de fichier est également disponible via un applet java appelé jumploader sans limite de taille définie par le navigateur. Il permet également de télécharger plusieurs fichiers en une seule fois.', -'settings_enableMenuTasks' => '', -'settings_enableMenuTasks_desc' => '', +'settings_enableMenuTasks' => 'Activer le menu des tâches', +'settings_enableMenuTasks_desc' => 'Affiche un menu avec la liste des tâches. Cette liste contient les documents en attente d’une action par l’utilisateur.', +'settings_enableMultiUpload' => 'Autoriser le dépôt de plusieurs fichiers', +'settings_enableMultiUpload_desc' => 'Lors de la création d’un document, autoriser le dépôt de plusieurs fichiers à la fois. Un nouveau document sera créé pour chaque fichier.', 'settings_enableNotificationAppRev' => 'Notification correcteur/approbateur', 'settings_enableNotificationAppRev_desc' => 'Cochez pour envoyer une notification au correcteur/approbateur quand une nouvelle version du document est ajoutée', 'settings_enableNotificationWorkflow' => 'Envoyer les notifications aux utilisateurs dans le prochain workflow', @@ -1146,6 +1160,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => 'Autoriser correction/approbbation pour l\'utilisateur actuel', 'settings_enableSelfRevApp_desc' => 'A autoriser pour avoir l\'utilisateur actuel désigné correcteur/approbateur et pour les transitions de workflow.', +'settings_enableSessionList' => 'Activer la liste des utilisateurs en ligne', +'settings_enableSessionList_desc' => 'Affiche un menu avec la liste des utilisateurs connectés.', 'settings_enableThemeSelector' => 'Sélection du thème', 'settings_enableThemeSelector_desc' => 'Activer/désactiver le sélecteur de thème sur la page de connexion.', 'settings_enableUpdateReceipt' => '', @@ -1217,8 +1233,8 @@ URL: [url]', 'settings_maxRecursiveCount_desc' => 'Nombre maximum de documents et répertoires dont l\'accès sera vérifié, lors d\'un décompte récursif. Si ce nombre est dépassé, le nombre de documents et répertoires affichés sera approximé.', 'settings_maxSizeForFullText' => 'Taille maximum pour l\'indexation instantanée', 'settings_maxSizeForFullText_desc' => 'Toute nouvelle version d\'un document plus petite que la taille configurée sera intégralement indexée juste après l\'upload. Dans tous les autres cas, seulement les métadonnées seront indexées.', -'settings_maxUploadSize' => '', -'settings_maxUploadSize_desc' => '', +'settings_maxUploadSize' => 'Taille max. des fichiers', +'settings_maxUploadSize_desc' => 'Taille maximale (en octets) pour les fichiers téléversés. Concerne les versions d’un document et les fichiers attachés.', 'settings_more_settings' => 'Configurer d\'autres paramètres. Connexion par défaut: admin/admin', 'settings_notfound' => 'Introuvable', 'settings_Notification' => 'Notifications', @@ -1359,8 +1375,8 @@ URL: [url]', 'splash_edit_role' => '', 'splash_edit_user' => 'Utilisateur modifié', 'splash_error_add_to_transmittal' => '', -'splash_error_rm_download_link' => '', -'splash_error_send_download_link' => '', +'splash_error_rm_download_link' => 'Erreur lors de la suppression du lien de téléchargement', +'splash_error_send_download_link' => 'Erreur lors de l’envoi du lien de téléchargement', 'splash_folder_edited' => 'Dossier modifié', 'splash_importfs' => '[docs] documents et [folders] dossiers importés', 'splash_invalid_folder_id' => 'Identifiant de répertoire invalide', @@ -1368,10 +1384,11 @@ URL: [url]', 'splash_moved_clipboard' => 'Presse-papier déplacé dans le répertoire courant', 'splash_move_document' => 'Document déplacé', 'splash_move_folder' => 'Dossier déplacé', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Enlevé du presse-papiers', 'splash_rm_attribute' => 'Attribut supprimé', 'splash_rm_document' => 'Document supprimé', -'splash_rm_download_link' => '', +'splash_rm_download_link' => 'Lien de téléchargement supprimé', 'splash_rm_folder' => 'Dossier supprimé', 'splash_rm_group' => 'Groupe supprimé', 'splash_rm_group_member' => 'Membre retiré du groupe', @@ -1379,7 +1396,7 @@ URL: [url]', 'splash_rm_transmittal' => '', 'splash_rm_user' => 'Utilisateur supprimé', 'splash_saved_file' => '', -'splash_send_download_link' => '', +'splash_send_download_link' => 'Lien de téléchargement envoyé par e-mail', 'splash_settings_saved' => 'Configuration sauvegardée', 'splash_substituted_user' => 'Utilisateur de substitution', 'splash_switched_back_user' => 'Revenu à l\'utilisateur initial', @@ -1525,11 +1542,11 @@ URL : [url]', 'user_list' => 'Liste des utilisateurs', 'user_login' => 'Identifiant', 'user_management' => 'Utilisateurs', -'user_name' => 'Nom utilisateur', +'user_name' => 'Nom d’affichage', 'use_comment_of_document' => 'Utiliser le commentaire du document', 'use_default_categories' => 'Use predefined categories', 'use_default_keywords' => 'Utiliser les mots-clés prédéfinis', -'valid_till' => '', +'valid_till' => 'Valide jusqu’au', 'version' => 'Version', 'versioning_file_creation' => 'Créer les fichiers de versionnage', 'versioning_file_creation_warning' => 'Cette opération permet de créer, pour chaque document, un fichier texte contenant les informations générales et l’historique des versions du document. Chaque fichier sera enregistré dans le répertoire du document. Ces fichiers ne sont pas nécessaires au bon fonctionnement de SeedDMS, mais ils peuvent être utiles en cas de transfert des fichiers vers un autre système.', @@ -1557,6 +1574,7 @@ URL: [url]', 'workflow_action_name' => 'Nom', 'workflow_editor' => 'Editeur de Workflow', 'workflow_group_summary' => 'Résumé de groupe', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Etat initial', 'workflow_in_use' => 'Ce workflow est actuellement utilisé par des documents.', 'workflow_layoutdata_saved' => '', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 09f30f954..3838afa8d 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 (1195), marbanas (16) +// Translators: Admin (1196), marbanas (16) $text = array( '2_factor_auth' => '', @@ -234,6 +234,7 @@ Internet poveznica: [url]', 'checkedout_file_has_disappeared' => 'Datoteka odjavljenog dokumenta je nestala. Prijava neće biti moguća.', 'checkedout_file_is_unchanged' => 'Datoteka odjavljenog dokumenta je još uvijek nepromijenjena. Prijava neće biti moguća. Ukoliko ne planirate izmjene, možete resetirati status odjave.', 'checkin_document' => 'Prijava', +'checkoutpath_does_not_exist' => '', 'checkout_document' => 'Odjava', 'checkout_is_disabled' => 'Odjava dokumenata je onemogućena u konfiguraciji.', 'choose_attrdef' => 'Molim odaberite definiciju atributa', @@ -466,7 +467,9 @@ Internet poveznica: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Promijenjen datum isteka', @@ -605,6 +608,7 @@ Internet poveznica: [url]', 'invalid_target_folder' => 'Pogrešan ID ciljane mape', 'invalid_user_id' => 'Pogrešan ID korisnika', 'invalid_version' => 'Pogrešna verzija dokumenta', +'in_folder' => '', 'in_revision' => 'U reviziji', 'in_workflow' => 'U toku rada', 'is_disabled' => 'Onemogući klijenta', @@ -651,7 +655,7 @@ Internet poveznica: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Ako želite prenijeti datoteke veće od trenutne maksimalne veličine prijenosa, molimo koristite alternativu upload page.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Izlistaj sve dozvole pristupa', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'local_file' => 'Lokalna datoteka', @@ -1056,6 +1060,7 @@ Internet poveznica: [url]', 'seq_end' => 'Na kraju', 'seq_keep' => 'Zadrži poziciju', 'seq_start' => 'Na početak', +'sessions' => '', 'settings' => 'Postavke', 'settings_activate_module' => 'Aktiviraj modul', 'settings_activate_php_extension' => 'Aktiviraj PHP ekstenziju', @@ -1161,6 +1166,8 @@ Internet poveznica: [url]', 'settings_enableLargeFileUpload_desc' => 'Ako je postavljeno, učitavanje datoteke je također dostupno kroz Java aplet naziva "jumploader" bez postavljenog ograničenja veličine datoteke od strane pretraživača. To također omogućuje učitavanje nekoliko datoteka u jednom koraku. Uključivanjem ovoga isključit će se samo http kolačići.', 'settings_enableMenuTasks' => 'Omogućavanje liste zadataka u izborniku', 'settings_enableMenuTasks_desc' => 'Omogućavanje/onemogućavanje stavke izbornika koja sadrži sve zadatke za korisnika. Ovo sadrži dokumente koji trebaju biti revidirani, odobreni itd.', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Omogući bilježenje recezenta/validatora', 'settings_enableNotificationAppRev_desc' => 'Označi za slanje obavijesti recezentu/validatoru kada je dodana nova verzija dokumenta', 'settings_enableNotificationWorkflow' => 'Omogući obavijesti o zadanom toku rada', @@ -1179,6 +1186,8 @@ Internet poveznica: [url]', 'settings_enableRevisionWorkflow_desc' => 'Omogućite kako bi se mogao pokrenuti tok rada za revidiranje dokumenta nakon zadanog vremenskog perioda.', 'settings_enableSelfRevApp' => 'Omogući pregled/ovjeru za prijavljenog korisnika', 'settings_enableSelfRevApp_desc' => 'Omogući ovo ako želite da trenutno prijavljeni korisnik bude naveden kao recezent/validator i za promjenu toka rada.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Odabir teme', 'settings_enableThemeSelector_desc' => 'Uključuje/isključuje izbornik tema na stranici prijave.', 'settings_enableUpdateReceipt' => '', @@ -1401,6 +1410,7 @@ Internet poveznica: [url]', 'splash_moved_clipboard' => 'Međuspremnik je premješten u trenutnu mapu', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Uklonjeno iz međuspremnika', 'splash_rm_attribute' => 'Atribut uklonjen', 'splash_rm_document' => 'Dokument uklonjen', @@ -1590,6 +1600,7 @@ Internet poveznica: [url]', 'workflow_action_name' => 'Naziv', 'workflow_editor' => 'Urednik toka rada', 'workflow_group_summary' => 'Pregled grupe', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Početni status', 'workflow_in_use' => 'Dokumenti trenutno koriste ovaj tok rada.', 'workflow_layoutdata_saved' => '', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index e51701e1a..15363c39c 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 (606), ribaz (1023) +// Translators: Admin (607), ribaz (1023) $text = array( '2_factor_auth' => '', @@ -229,6 +229,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => 'Kérem válasszon jellemző meghatározást', @@ -461,7 +462,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Lejárati dátum módosítva', @@ -600,6 +603,7 @@ URL: [url]', 'invalid_target_folder' => 'Érvénytelen cél mappa állapot', 'invalid_user_id' => 'Érvénytelen felhasználói azonosító', 'invalid_version' => 'Érvénytelen dokumentum változat', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => 'Munkafolyamatban', 'is_disabled' => 'Hozzáférés tiltás', @@ -646,7 +650,7 @@ URL: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Ha a jelenlegi maximális feltöltési méretnél nagyobb állományokat szeretne feltölteni, akkor használja az alternatív feltöltő oldalt.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Összes jogosultság felsorolása...', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'local_file' => 'Helyi állomány', @@ -1034,6 +1038,7 @@ URL: [url]', 'seq_end' => 'V‰g‰re', 'seq_keep' => 'Pozci megtartßsa', 'seq_start' => 'Elej‰re', +'sessions' => '', 'settings' => 'Beállítások', 'settings_activate_module' => 'Modul aktiválása', 'settings_activate_php_extension' => 'PHP kiterjesztés aktiválása', @@ -1139,6 +1144,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Ha beállítja az állományok feltöltése elérhető lesz egy jumploadernek hívott java appleten keresztül a böngészőprogram állomány méret korlátja nélkül. Ez engedélyezi több állomány feltöltését egy lépésben.', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'A felülvizsgáló/jóváhagyó értesítés engedélyezése', 'settings_enableNotificationAppRev_desc' => 'Ellenőrzi az értesítés küldését a felülvizsgálónak/jóváhagyónak új dokumentum változat hozzáadásakor', 'settings_enableNotificationWorkflow' => 'A felhasználó értesítése a következő munkafolyamatnál', @@ -1157,6 +1164,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => 'Engedélyezi a felülvizsgálatot/jóváhagyást a bejelentkezett felhasználó számára', 'settings_enableSelfRevApp_desc' => 'Engedélyezze, a azt szeretné, hogy a bejelentkezett felhasználó listázásra kerüljön felülvizsgálóként/jóváhagyóként és a munkamenet átmeneteknél.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Téma választása', 'settings_enableThemeSelector_desc' => 'Kapcsolja be/ki a témaválasztót a bejelentkező oldalon', 'settings_enableUpdateReceipt' => '', @@ -1379,6 +1388,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Vágólap tartalom áthelyezve az aktuális mappába', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Eltávolítva a vágólapról', 'splash_rm_attribute' => 'Jellemző eltávolítva', 'splash_rm_document' => 'Dokumentum eltávolítva', @@ -1568,6 +1578,7 @@ URL: [url]', 'workflow_action_name' => 'Név', 'workflow_editor' => 'Munkafolyamat szerkesztő', 'workflow_group_summary' => 'Csoport áttekintés', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Kezdeti állapot', 'workflow_in_use' => 'Ezt a munkafolyamatot dokumentumok használják.', 'workflow_layoutdata_saved' => '', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 632d8ba53..1cde84acd 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 (1539), rickr (144), s.pnt (26) +// Translators: Admin (1554), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -235,6 +235,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'File documento approvato non trovato. Impossibile caricare.', 'checkedout_file_is_unchanged' => 'La versione approvata è uguale alla versione corrente. Impossibile caricare.', 'checkin_document' => 'Da approvare', +'checkoutpath_does_not_exist' => '', 'checkout_document' => 'Approvato', 'checkout_is_disabled' => 'Approvazione dei documenti disabilitata', 'choose_attrdef' => 'Seleziona l\'Attributo', @@ -256,7 +257,7 @@ URL: [url]', 'clear_password' => 'Cancella la password', 'clipboard' => 'Appunti', 'close' => 'Chiudi', -'command' => '', +'command' => 'Comando', 'comment' => 'Commento', 'comment_changed_email' => '', 'comment_for_current_version' => 'Commento per la versione', @@ -311,7 +312,7 @@ URL: [url]', 'docs_in_reception_no_access' => '', 'docs_in_revision_no_access' => '', 'document' => 'Documento', -'documentcontent' => '', +'documentcontent' => 'Contenuto documento', 'documents' => 'Documenti', 'documents_checked_out_by_you' => 'Documenti approvati da te', 'documents_in_process' => 'Documenti in lavorazione', @@ -410,7 +411,7 @@ URL: [url]', 'dump_creation_warning' => 'Con questa operazione è possibile creare un file di dump del contenuto del database. Dopo la creazione il file viene salvato nella cartella dati del server.', 'dump_list' => 'List dei dump presenti', 'dump_remove' => 'Cancella il file di dump', -'duplicates' => '', +'duplicates' => 'Duplicati', 'duplicate_content' => 'Contenuto Duplicato', 'edit' => 'Modifica', 'edit_attributes' => 'Modifica gli attributi', @@ -467,7 +468,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Scadenza cambiata', @@ -570,7 +573,7 @@ URL: [url]', 'include_content' => 'Includi contenuto', 'include_documents' => 'Includi documenti', 'include_subdirectories' => 'Includi sottocartelle', -'indexing_tasks_in_queue' => '', +'indexing_tasks_in_queue' => 'Operazione di indicizzazione in corso', 'index_converters' => 'Indice di conversione documenti', 'index_done' => '', 'index_error' => '', @@ -606,6 +609,7 @@ URL: [url]', 'invalid_target_folder' => 'ID cartella selezionata non valido', 'invalid_user_id' => 'ID utente non valido', 'invalid_version' => 'Versione del documento non valida', +'in_folder' => 'nella cartella', 'in_revision' => 'In fase di revisione', 'in_workflow' => 'In fase di lavorazione', 'is_disabled' => 'Account Disabilitato', @@ -795,7 +799,7 @@ URL: [url]', 'only_jpg_user_images' => 'Possono essere utilizzate solo immagini di tipo jpeg', 'order_by_sequence_off' => 'Ordina in sequenza disabilitato', 'original_filename' => 'Nome file originale', -'overall_indexing_progress' => '', +'overall_indexing_progress' => 'Totale processo di indicizzazione', 'owner' => 'Proprietario', 'ownership_changed_email' => 'Proprietario cambiato', 'ownership_changed_email_body' => 'Cambio di proprietario @@ -891,7 +895,7 @@ Cartella: [folder_path] Utente: [username] URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Flusso di lavoro rimosso dalla versione del documento', -'removeFolderFromDropFolder' => '', +'removeFolderFromDropFolder' => 'Rimuovi la cartella dopo l\'importazione', 'remove_marked_files' => 'Rimuovi i files contrassegnati', 'repaired' => 'riparato', 'repairing_objects' => 'Riparazione documenti e cartelle in corso...', @@ -1068,6 +1072,7 @@ URL: [url]', 'seq_end' => 'Alla fine', 'seq_keep' => 'Mantieni la posizione', 'seq_start' => 'Prima posizione', +'sessions' => '', 'settings' => 'Impostazioni', 'settings_activate_module' => 'Attivazione modulo', 'settings_activate_php_extension' => 'Attivazione estensione PHP', @@ -1081,7 +1086,7 @@ URL: [url]', 'settings_autoLoginUser' => 'Login automatico', 'settings_autoLoginUser_desc' => 'Utilizzare questo ID utente per l\'accesso se l\'utente non è già connesso. Questo tipo di accesso non creerà una sessione.', 'settings_available_languages' => 'Lingue disponibili', -'settings_available_languages_desc' => '', +'settings_available_languages_desc' => 'Solo le lingue selezionate verranno caricate e mostrate nel selettore. La lingua predefinita sarà sempre caricata.', 'settings_backupDir' => 'Directory di backup', 'settings_backupDir_desc' => 'Directory in cui lo strumento di backup salva i backup. Se questa directory non è impostato o non è possibile accedervi, quindi i backup vengono salvati nella directory dei contenuti.', 'settings_cacheDir' => 'Cartella di cache', @@ -1098,7 +1103,7 @@ URL: [url]', 'settings_contentDir_desc' => 'Cartella in cui vengono conservati i files caricati, si consiglia di scegliere una cartella sul web-server che non sia direttamente accessibile.', 'settings_contentOffsetDir' => 'Cartella Offset', 'settings_contentOffsetDir_desc' => 'Per supplire a limitazioni all\'utilizzo del filesystem è stata concepita una nuova struttura di cartelle all\'interno della cartella contenitore (Content Directory). Questa necessita di una cartella di partenza: di solito è sufficiente lasciare il nome di default, 1048576, ma può essere usato un qualsiasi numero o stringa che non esistano già all\'interno della cartella contenitore (Content Directory)', -'settings_convertToPdf' => '', +'settings_convertToPdf' => 'Converti documento in PDF per anteprima', 'settings_convertToPdf_desc' => 'Se il documento non può essere nativamente mostrato nel browser, verrà mostrata una versione in PDF.', 'settings_cookieLifetime' => 'Tempo di vita del cookie', 'settings_cookieLifetime_desc' => 'Tempo di vita del cookie in secondi: se impostato su 0 il cookie verrà rimosso alla chiusura del browser', @@ -1121,8 +1126,8 @@ URL: [url]', 'settings_dbUser' => 'Utente', 'settings_dbUser_desc' => 'Utente per accedere al database da utilizzarsi durante il processo di installazione. Non modificare questo campo se non assolutamente necessario, per esempio nel caso di trasferimento del database su un nuovo Host.', 'settings_dbVersion' => 'Schema del database obsoleto', -'settings_defaultAccessDocs' => '', -'settings_defaultAccessDocs_desc' => '', +'settings_defaultAccessDocs' => 'Diritto di accesso per i nuovi documenti', +'settings_defaultAccessDocs_desc' => 'Quando si crea un nuovo documento, questo sarà il diritto di accesso predefinito', 'settings_defaultSearchMethod' => 'Metodo di ricerca predefinito', 'settings_defaultSearchMethod_desc' => 'Metodo di ricerca predefinito, quando la ricerca viene avviata dal modulo di ricerca nel menu principale.', 'settings_defaultSearchMethod_valdatabase' => 'database', @@ -1173,6 +1178,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Se selezionato, il caricamento (upload) dei files può essere effettuato anche attraverso un\'applet Java chiamata Jumploader evitando il limite di dimensioni file imposto dal browser; Jumploader permette anche il caricamento di diversi files contemporaneamente.', 'settings_enableMenuTasks' => 'Abilita compito delle attività nel menù', 'settings_enableMenuTasks_desc' => 'Abilita / Disabilita la voce di menu che contiene tutte le attività degli utenti. Questo conterrà i documenti che devono essere rivisti, approvati, etc.', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Abilita/disabilita notifica a revisore/approvatore', 'settings_enableNotificationAppRev_desc' => 'Spuntare per inviare una notifica al revisore/approvatore nel momento in cui viene aggiunta una nuova versione del documento.', 'settings_enableNotificationWorkflow' => 'Invia notifiche ai partecipanti al flusso di lavoro', @@ -1191,6 +1198,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => 'Abilita per attivare workflow su revisione documenti dopo scadenza.', 'settings_enableSelfRevApp' => 'Permetti revisione/approvazione all\'utente registrato', 'settings_enableSelfRevApp_desc' => 'Abilitare se si desidera aggiungere l\'utente attualmente registrato alla lista dei revisori/approvatori e per le transizioni del flusso di lavoro.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Selezione tema grafico', 'settings_enableThemeSelector_desc' => 'Abilita/disabilita il selettore di tema grafico nella finestra di login', 'settings_enableUpdateReceipt' => '', @@ -1262,8 +1271,8 @@ URL: [url]', 'settings_maxRecursiveCount_desc' => 'Numero massimo di documenti e cartelle considerati dal conteggio ricursivo per il controllo dei diritti d\'accesso. Se tale valore dovesse essere superato, il risultato del conteggio sarà stimato.', 'settings_maxSizeForFullText' => 'La lungeza massima del file per l\'indicizzazione istantanea', 'settings_maxSizeForFullText_desc' => 'Tutte le nuove versioni dei documenti più in basso della dimensione configurata saranno completamente indicizzati dopo il caricamento. In tutti gli altri casi sarà indicizzato solo i metadati.', -'settings_maxUploadSize' => '', -'settings_maxUploadSize_desc' => '', +'settings_maxUploadSize' => 'Dimensiona massima dei file da caricare', +'settings_maxUploadSize_desc' => 'Questa è la dimensiona massima del file da caricare. Avrà impatto sulla versione del documento e sull\'allegato.', 'settings_more_settings' => 'Ulteriori configurazioni. Login di default: admin/admin', 'settings_notfound' => 'Non trovato', 'settings_Notification' => 'Impostazioni di notifica', @@ -1413,6 +1422,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Appunti trasferiti nella cartella corrente', 'splash_move_document' => 'Documento spostato', 'splash_move_folder' => 'Cartella spostato', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Rimosso dagli appunti', 'splash_rm_attribute' => 'Attributo rimosso', 'splash_rm_document' => 'Documento rimosso', @@ -1602,6 +1612,7 @@ URL: [url]', 'workflow_action_name' => 'Nome', 'workflow_editor' => 'Modifica flussi di lavoro', 'workflow_group_summary' => 'Sommario di gruppo', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Stato iniziale', 'workflow_in_use' => 'Questo flusso di lavoro è attualmente usato da alcuni documenti', 'workflow_layoutdata_saved' => '', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index b3dbc3c27..9e4d59982 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -19,15 +19,15 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (940), daivoc (418) +// Translators: Admin (940), daivoc (421) $text = array( -'2_factor_auth' => '', +'2_factor_auth' => '관리자 ({LOCALE}/lang.inc)', '2_factor_auth_info' => '', '2_fact_auth_secret' => '', 'accept' => '동의', -'access_control' => '', -'access_control_is_off' => '', +'access_control' => '접근 제어', +'access_control_is_off' => '접근 제어 불가', 'access_denied' => '접근가 거부되었습니다.', 'access_inheritance' => '접근 상속', 'access_mode' => '접근 모드', @@ -236,6 +236,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '요청한 문서파일이 사라져 버렸습니다. 확인이 불가능 합니다.', 'checkedout_file_is_unchanged' => '요청한 문서가 아직 변경전 상태입니다. 변경을 원하지 않는 경우 재설정 할 수 있습니다.', 'checkin_document' => '체크인', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '체크아웃', 'checkout_is_disabled' => '체크아웃된 문서는 설정에서 비활성화됩니다.', 'choose_attrdef' => '속성의 정의를 선택하세요', @@ -466,7 +467,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => '유효 기간 변경', @@ -605,6 +608,7 @@ URL: [url]', 'invalid_target_folder' => '잘못된 대상 폴더 ID', 'invalid_user_id' => '잘못된 사용자 ID', 'invalid_version' => '잘못된 문서 버전', +'in_folder' => '', 'in_revision' => '개정에서', 'in_workflow' => '워크플로우내', 'is_disabled' => '계정 사용 안 함', @@ -1049,6 +1053,7 @@ URL : [url]', 'seq_end' => '마지막 위치', 'seq_keep' => '위치 유지', 'seq_start' => '첫 번째 위치', +'sessions' => '', 'settings' => '설정', 'settings_activate_module' => '모듈 활성화', 'settings_activate_php_extension' => 'PHP 확장 활성화', @@ -1154,6 +1159,8 @@ URL : [url]', 'settings_enableLargeFileUpload_desc' => '설정하면, 브라우저가 설정 한 파일 크기 제한없이 jumploader라는 파일 업로드 자바 애플릿을 통해 사용할 수 있습니다. 또한 한 번에 여러 파일을 업로드 할 수 있습니다.', 'settings_enableMenuTasks' => '메뉴의 작업 목록 허용', 'settings_enableMenuTasks_desc' => '사용자의 모든 작업이 포함되어있는 메뉴 항목을 활성/비활성 합니다. 이것은 검토, 승인등이 필요한 문서를 포함 합니다', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => '검토 / 승인 알림 사용', 'settings_enableNotificationAppRev_desc' => '새 문서 버전이 추가 된 경우 리뷰 / 승인자에게 알림을 보내 확인', 'settings_enableNotificationWorkflow' => '다음 작업 사용자에게 알림을 보냅니다.', @@ -1172,6 +1179,8 @@ URL : [url]', 'settings_enableRevisionWorkflow_desc' => '일정 기간후에 문서를 개정 하기위해 워크플로우를 수행 할 수 있도록 설정 합니다.', 'settings_enableSelfRevApp' => '로그인 한 사용자에 대한 검토 / 승인을 허용', 'settings_enableSelfRevApp_desc' => '검토 / 승인자로 워크 플로우 전환을 위해 나열되어있는 것이 현재 로그인 한 사용자가 필요한 경우이를 활성화합니다.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => '테마 선택', 'settings_enableThemeSelector_desc' => '로그인 페이지의 테마 선택기를 켜기/끄기로 전환합니다.', 'settings_enableUpdateReceipt' => '', @@ -1394,6 +1403,7 @@ URL : [url]', 'splash_moved_clipboard' => '클립 보드가 현재 폴더로 이동', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => '클립 보드에서 제거', 'splash_rm_attribute' => '속성 제거', 'splash_rm_document' => '문서 삭제', @@ -1583,6 +1593,7 @@ URL : [url]', 'workflow_action_name' => '이름', 'workflow_editor' => '워크플로우 편집기', 'workflow_group_summary' => '그룹 요약', +'workflow_has_cycle' => '', 'workflow_initstate' => '초기 상태', 'workflow_in_use' => '이 워크플로는 현재 문서에서 사용 됩니다.', 'workflow_layoutdata_saved' => '', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 43362707d..f4faeba02 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/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 (723), gijsbertush (329), pepijn (45), reinoutdijkstra@hotmail.com (270) +// Translators: Admin (726), gijsbertush (329), pepijn (45), reinoutdijkstra@hotmail.com (270) $text = array( '2_factor_auth' => '', @@ -227,6 +227,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'File is onvindbaar', 'checkedout_file_is_unchanged' => 'Checkout-document ongewijzigd', 'checkin_document' => 'Veranderd document', +'checkoutpath_does_not_exist' => '', 'checkout_document' => 'Checkout-document', 'checkout_is_disabled' => 'Checkout is niet mogelijk', 'choose_attrdef' => 'Selecteer een kenmerk definitie', @@ -459,7 +460,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Verloopdatum gewijzigd', @@ -598,6 +601,7 @@ URL: [url]', 'invalid_target_folder' => 'Foutief Doel Map ID', 'invalid_user_id' => 'Foutief Gebruiker ID', 'invalid_version' => 'Foutief Document Versie', +'in_folder' => 'In map', 'in_revision' => 'In herziening', 'in_workflow' => 'In workflow', 'is_disabled' => 'Deactiveer account', @@ -644,7 +648,7 @@ URL: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Als u bestanden wilt uploaden groter dan het huidige maximum, gebruik aub de alternatieve upload pagina.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Oplijsten toegangsrechten', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'local_file' => 'Lokaal bestand', @@ -1058,6 +1062,7 @@ URL: [url]', 'seq_end' => 'Op het einde', 'seq_keep' => 'Behoud Positie', 'seq_start' => 'Eerste positie', +'sessions' => '', 'settings' => 'Instellingen', 'settings_activate_module' => 'Activeer module', 'settings_activate_php_extension' => 'Activeer PHP uitbreiding', @@ -1167,6 +1172,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Indien ingeschakeld, is bestandsupload ook beschikbaar via een java applet jumploader genaamd zonder een bestandsgrootte limiet door de browser. Het staat ook toe om meerdere bestanden in een keer te versturen.', 'settings_enableMenuTasks' => 'Menu-taken aanzetten', 'settings_enableMenuTasks_desc' => 'Menu-taken aanzetten', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Inschakelen controleur/beoordeler notificatie', 'settings_enableNotificationAppRev_desc' => 'Vink aan om een notificatie te versturen naar de controleur/beoordeler als een nieuw document versie is toegevoegd.', 'settings_enableNotificationWorkflow' => 'Workflow-notificatie aanzetten', @@ -1185,6 +1192,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => 'Herzieningsworkflow aanzetten', 'settings_enableSelfRevApp' => 'Beoordeling/ goedkeuring toestaan voor ingelogde gebruikers', 'settings_enableSelfRevApp_desc' => 'Schakel in indien the huidig ingelogde gebruiker wordt toegewezen als goedkeurder/ beoordelaar en voor workflow overgangen.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Selecteer thema', 'settings_enableThemeSelector_desc' => 'Schakel thema selectie op de aanmeldpagina uit', 'settings_enableUpdateReceipt' => '', @@ -1304,7 +1313,7 @@ URL: [url]', 'settings_rootFolderID_desc' => 'ID van basismap (meestal geen verandering nodig)', 'settings_SaveError' => 'Opslagfout Configuratiebestand', 'settings_Server' => 'Server instellingen', -'settings_showFullPreview' => '', +'settings_showFullPreview' => 'Toon volledige document', 'settings_showFullPreview_desc' => '', 'settings_showMissingTranslations' => 'Ontbrekende vertalingen weergeven', 'settings_showMissingTranslations_desc' => 'Geef alle ontbrekende vertalingen onder aan de pagina weer. De gebruiker kan een verzoek tot vertaling indienen dat wordt opgeslagen als csv bestand. Let op! Zet deze functie niet aan in productieomgevingen!', @@ -1407,6 +1416,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Klembord verplaatst naar de huidige map', 'splash_move_document' => 'Document verplaatst', 'splash_move_folder' => 'Map verplaatst', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Verwijderd van het klembord', 'splash_rm_attribute' => 'Attribuut verwijderd', 'splash_rm_document' => 'Document verwijderd', @@ -1596,6 +1606,7 @@ URL: [url]', 'workflow_action_name' => 'Naam', 'workflow_editor' => 'Workflow editor', 'workflow_group_summary' => 'Groepssamenvatting', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Begin status', 'workflow_in_use' => 'Deze workflow wordt momenteel gebruikt door documenten.', 'workflow_layoutdata_saved' => '', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index 2881ac811..69c5f1c24 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 (755), netixw (84), romi (93), uGn (112) +// Translators: Admin (770), netixw (84), romi (93), uGn (112) $text = array( '2_factor_auth' => '', @@ -140,11 +140,11 @@ URL: [url]', 'attrdef_regex' => 'Wyrażenie regularne', 'attrdef_type' => 'Typ', 'attrdef_type_boolean' => '', -'attrdef_type_date' => '', +'attrdef_type_date' => 'Data', 'attrdef_type_email' => '', -'attrdef_type_float' => '', -'attrdef_type_int' => '', -'attrdef_type_string' => '', +'attrdef_type_float' => 'Liczna zmiennoprzecinkowa', +'attrdef_type_int' => 'Liczba całkowita', +'attrdef_type_string' => 'Ciąg znaków', 'attrdef_type_url' => '', 'attrdef_valueset' => 'Set of values', 'attributes' => 'Atrybuty', @@ -222,6 +222,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => 'Proszę wybrać definicję atrybutu', @@ -298,7 +299,7 @@ URL: [url]', 'docs_in_reception_no_access' => '', 'docs_in_revision_no_access' => '', 'document' => 'Dokument', -'documentcontent' => '', +'documentcontent' => 'Zawartość dokumentu', 'documents' => 'Dokumenty', 'documents_checked_out_by_you' => '', 'documents_in_process' => 'Dokumenty procesowane', @@ -454,7 +455,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Zmieniona data wygaśnięcia', @@ -557,7 +560,7 @@ URL: [url]', 'include_content' => '', 'include_documents' => 'Uwzględnij dokumenty', 'include_subdirectories' => 'Uwzględnij podkatalogi', -'indexing_tasks_in_queue' => '', +'indexing_tasks_in_queue' => 'Zadanie indeksowania w kolejce', 'index_converters' => 'Konwersja indeksu dokumentów', 'index_done' => '', 'index_error' => '', @@ -593,6 +596,7 @@ URL: [url]', 'invalid_target_folder' => 'Nieprawidłowy identyfikator folderu docelowego', 'invalid_user_id' => 'Nieprawidłowy identyfikator użytkownika', 'invalid_version' => 'Nieprawidłowa wersja dokumentu', +'in_folder' => 'w folderze', 'in_revision' => '', 'in_workflow' => 'W procesie', 'is_disabled' => 'Konto nieaktywne', @@ -639,7 +643,7 @@ URL: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Jeśli chcesz wczytać pliki większe niż bieżące maksimum, użyj alternatywnej strony wczytywania.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Pokaż uprawnienia dostępu', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'local_file' => 'Lokalny plik', @@ -1014,6 +1018,7 @@ URL: [url]', 'seq_end' => 'Na końcu', 'seq_keep' => 'Na tej samej pozycji', 'seq_start' => 'Na początku', +'sessions' => '', 'settings' => 'Ustawienia', 'settings_activate_module' => 'Aktywuj moduł', 'settings_activate_php_extension' => 'Aktywuj rozszerzenie PHP', @@ -1027,7 +1032,7 @@ URL: [url]', 'settings_autoLoginUser' => '', 'settings_autoLoginUser_desc' => '', 'settings_available_languages' => 'Dostępne języki', -'settings_available_languages_desc' => '', +'settings_available_languages_desc' => 'Tylko wybrane języki zostaną załadowane i będą widoczne w kontrolce wyboru języka. Domyślny język zawsze jest ładowany.', 'settings_backupDir' => '', 'settings_backupDir_desc' => '', 'settings_cacheDir' => 'Folder bufora', @@ -1044,8 +1049,8 @@ URL: [url]', 'settings_contentDir_desc' => 'Miejsce, gdzie będą przechowywane wczytane pliki (najlepien wybrać katalog, który nie jest dostępny dla serwera http)', 'settings_contentOffsetDir' => 'Offset katalogu treści', 'settings_contentOffsetDir_desc' => 'Aby obejść ograniczenia w bazowym systemie plików, zostanie w nim utworzona nowa struktura katalogów. To wymaga określenia katalogu początkowego. Zazwyczaj można zostawić domyślną wartość, 1048576, ale może też być dowolnym numerem lub słowem, które aktualnie nie istnieje w katalogu treści (Katalog treści)', -'settings_convertToPdf' => '', -'settings_convertToPdf_desc' => '', +'settings_convertToPdf' => 'Skonwertuj dokument do pdf', +'settings_convertToPdf_desc' => 'Jeżeli dokument nie będzie możliwy do pokazania w natywnej formie, wyświetlona zostanie wersja skonwertowana do pdf.', 'settings_cookieLifetime' => 'Czas życia ciasteczka', 'settings_cookieLifetime_desc' => 'Czas życia pliku cookie w sekundach. Jeśli wartość zostanie ustawione na 0, plik cookie zostanie usunięte po zamknięciu przeglądarki.', 'settings_coreDir' => 'Katalog Core letoDMS', @@ -1081,8 +1086,8 @@ URL: [url]', 'settings_dropFolderDir' => 'Katalog dla folderu rozwijanego', 'settings_dropFolderDir_desc' => 'Ten katalog służy do kopiowania plików, przeznaczonych do zaimportowania, bezpośrednio do serwera i z pominięciem przeglądarki. W tym katalogu muszą się znajdować podfoldery dla wszystkich użytkowników, którzy posiadają uprawnienia do tego typu importu.', 'settings_Edition' => 'Ustawienia edycji', -'settings_editOnlineFileTypes' => '', -'settings_editOnlineFileTypes_desc' => '', +'settings_editOnlineFileTypes' => 'Edytuj typy plików online', +'settings_editOnlineFileTypes_desc' => 'Pliki z następującymi rozszerzeniami mogą być edytowane online (używaj tylko małych liter)', 'settings_enable2FactorAuthentication' => '', 'settings_enable2FactorAuthentication_desc' => '', 'settings_enableAcknowledgeWorkflow' => '', @@ -1119,6 +1124,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Jeśli zaznaczone, wczytywanie plików będzie możliwe również przez aplet javy nazywany jumploader bez limitu rozmiaru plików. Aplet ten pozwala również na wczytywanie wielu plików jednocześnie.', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Włącz/Wyłącz powiadomienia dla zatwierdzających/recenzentów', 'settings_enableNotificationAppRev_desc' => 'Zaznacz aby wysyłać powiadomienia do zatwierdzających i recenzentów kiedy pojawi się nowa wersja dokumentu', 'settings_enableNotificationWorkflow' => '', @@ -1137,6 +1144,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => 'Pozwalaj przeglądać/zatwierdzać dla zalogowanych użytkowników', 'settings_enableSelfRevApp_desc' => 'Włącz tę opcję jeżeli zalogowany użytkownik ma prawo do recenzowania/zatwierdzania oraz do przepływu procesu', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => '', 'settings_enableThemeSelector_desc' => '', 'settings_enableUpdateReceipt' => '', @@ -1159,7 +1168,7 @@ URL: [url]', 'settings_expandFolderTree_val0' => 'Rozpocznij z ukrytym drzewem', 'settings_expandFolderTree_val1' => 'Rozpocznij z pokazanym drzewem i rozwiniętym pierwszym poziomem', 'settings_expandFolderTree_val2' => 'Rozpocznij z pokazanym, w pełni rozwiniętym drzewem', -'settings_Extensions' => '', +'settings_Extensions' => 'Rozszerzenia', 'settings_extraPath' => 'Dodatkowa ścieżka include dla PHP', 'settings_extraPath_desc' => 'Ścieżka do dodatkowego oprogramowania. Jest to katalog zawierający np. adodb, pear lub dodatkowe pakiety', 'settings_firstDayOfWeek' => 'Pierwszy dzień tygodnia', @@ -1256,7 +1265,7 @@ URL: [url]', 'settings_rootFolderID_desc' => 'ID katalogu głównego (zazwyczaj nie trzeba tego zmieniać)', 'settings_SaveError' => 'Błąd zapisu pliku konfiguracyjnego', 'settings_Server' => 'Ustawienia serwera', -'settings_showFullPreview' => '', +'settings_showFullPreview' => 'Pokaż cały dokument', 'settings_showFullPreview_desc' => '', 'settings_showMissingTranslations' => 'Pokaż brakujące tłumaczenia', 'settings_showMissingTranslations_desc' => '', @@ -1359,6 +1368,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Schowek został przeniesiony do bieżącego folderu', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Usunięto ze schowka', 'splash_rm_attribute' => 'Usunięto atrybut', 'splash_rm_document' => 'Dokument usunięto', @@ -1548,6 +1558,7 @@ URL: [url]', 'workflow_action_name' => 'Nazwa', 'workflow_editor' => 'Edytor procesu', 'workflow_group_summary' => 'Podsumowanie grupy', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Początkowy status', 'workflow_in_use' => 'Proces ten jest obecnie zastosowany w dokumentach.', 'workflow_layoutdata_saved' => '', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 497e6c7c1..cb404d60e 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 (937), flaviove (627), lfcristofoli (352) +// Translators: Admin (945), flaviove (627), lfcristofoli (352) $text = array( '2_factor_auth' => '', @@ -180,7 +180,7 @@ URL: [url]', 'at_least_n_users_of_group' => 'Pelo menos [nuber_of_users] usuários de [group]', 'august' => 'August', 'authentication' => 'Autenticação', -'author' => '', +'author' => 'Autor', 'automatic_status_update' => 'Mudança de status automático', 'back' => 'Voltar', 'backup_list' => 'Existings backup list', @@ -229,6 +229,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => 'Por favor escolha a definição de atributo', @@ -460,7 +461,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Data de validade mudou', @@ -599,6 +602,7 @@ URL: [url]', 'invalid_target_folder' => 'Invalid Target Folder ID', 'invalid_user_id' => 'Invalid User ID', 'invalid_version' => 'Invalid Document Version', +'in_folder' => 'Na Pasta', 'in_revision' => '', 'in_workflow' => 'No fluxo de trabalho', 'is_disabled' => 'Desativar conta', @@ -645,7 +649,7 @@ URL: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Se você gostaria de fazer envio de arquivos maiores que o tamanho permitido, por favor use a página alternativa de envio.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Listar todos os direitos de acesso...', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'local_file' => 'Arquivo local', @@ -1032,6 +1036,7 @@ URL: [url]', 'seq_end' => 'No final', 'seq_keep' => 'Manter posição', 'seq_start' => 'Primeira posição', +'sessions' => '', 'settings' => 'Configurações', 'settings_activate_module' => 'Ativar módulo', 'settings_activate_php_extension' => 'Ativar extensão PHP', @@ -1042,10 +1047,10 @@ URL: [url]', 'settings_advancedAcl_desc' => '', 'settings_apache_mod_rewrite' => 'Apache - Módulo Rewrite', 'settings_Authentication' => 'Definições de autenticação', -'settings_autoLoginUser' => '', +'settings_autoLoginUser' => 'Login automático', 'settings_autoLoginUser_desc' => '', 'settings_available_languages' => 'Idiomas disponíveis', -'settings_available_languages_desc' => '', +'settings_available_languages_desc' => 'Apenas os idiomas selecionados serão carregados e mostrados no seletor de idioma. O idioma padrão sempre será carregado.', 'settings_backupDir' => '', 'settings_backupDir_desc' => '', 'settings_cacheDir' => 'Diretório de cache', @@ -1062,7 +1067,7 @@ URL: [url]', 'settings_contentDir_desc' => 'Onde arquivos enviados são armazenados (melhor escolher um diretório que não é acessível através de seu web-server)', 'settings_contentOffsetDir' => 'Pasta de Compensação de Conteúdo', 'settings_contentOffsetDir_desc' => 'Para contornar as limitações do sistema de arquivos subjacente, uma nova estrutura de diretórios foi concebida que existe dentro do diretório de conteúdo (Content Directory). Isso requer um diretório base para começar. Normalmente, deixe Isso para a configuração padrão, 1048576, mas pode ser qualquer número ou cadeia de caracteres que ainda não existe dentro (Diretório de conteúdo)', -'settings_convertToPdf' => '', +'settings_convertToPdf' => 'Converte o PDF para visualização', 'settings_convertToPdf_desc' => '', 'settings_cookieLifetime' => 'Tempo de Vida dos Cookies', 'settings_cookieLifetime_desc' => 'O tempo de vida de um cookie em segundos. Se definido como 0, o cookie será removido quando o navegador é fechado.', @@ -1137,6 +1142,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Se selecionado, o upload de arquivo também estará disponível através de um applet java chamado jumploader sem limite de tamanho de arquivo definido pelo navegador. Ele também permite fazer o upload de vários arquivos de uma só vez.', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Habilitar notificações revisor/aprovador', 'settings_enableNotificationAppRev_desc' => 'Verificar o envio de uma notificação para o revisor/aprovador quando uma nova versão do documento for adicionada', 'settings_enableNotificationWorkflow' => '', @@ -1155,6 +1162,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => 'Permitir revisão/aprovação para usuário conectado', 'settings_enableSelfRevApp_desc' => 'Habilite esta opção se quiser que o usuário conectado no momento seja listado como revisores/aprovadores e para transições de fluxo de trabalho.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Seleção de tema', 'settings_enableThemeSelector_desc' => 'Liga/desliga o seletor de tema na página de login.', 'settings_enableUpdateReceipt' => '', @@ -1184,7 +1193,7 @@ URL: [url]', 'settings_firstDayOfWeek_desc' => 'Primeiro dia da semana', 'settings_footNote' => 'Nota de Pé', 'settings_footNote_desc' => 'Mensagem a ser exibida na parte inferior de cada página', -'settings_fullSearchEngine' => '', +'settings_fullSearchEngine' => 'Motor de texto', 'settings_fullSearchEngine_desc' => 'Selecione o método utilizado para a busca textual', 'settings_fullSearchEngine_vallucene' => 'Zend Lucene', 'settings_fullSearchEngine_valsqlitefts' => 'SQLiteFTS', @@ -1274,7 +1283,7 @@ URL: [url]', 'settings_rootFolderID_desc' => 'ID da pasta-raiz (na maioria das vezes não precisa ser mudado)', 'settings_SaveError' => 'Erro no arquivo de configuração salvo', 'settings_Server' => 'Configuraçoes do servidor', -'settings_showFullPreview' => '', +'settings_showFullPreview' => 'Mostra o documento completo', 'settings_showFullPreview_desc' => '', 'settings_showMissingTranslations' => 'Mostrar traduções em falta', 'settings_showMissingTranslations_desc' => 'Listar todas as traduções faltando na página na parte inferior da página. O usuário conectado será capaz de apresentar uma proposta para uma tradução em falta que serão salvos em um arquivo CSV. Não ativar eáa função, se em um ambiente de produção!', @@ -1377,6 +1386,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Área de transferência movida para a pasta corrente', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Remover da área de transferência', 'splash_rm_attribute' => 'Atributo removido', 'splash_rm_document' => 'Documento removido', @@ -1566,6 +1576,7 @@ URL: [url]', 'workflow_action_name' => 'Nome', 'workflow_editor' => 'Editor de Fluxo de trabalho', 'workflow_group_summary' => 'Sumário do grupo', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Estado inicial', 'workflow_in_use' => 'Esse fluxo de trabalho é usado atualmente por documentos.', 'workflow_layoutdata_saved' => '', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 04a0d9811..5a65698cd 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 (1050), balan (87) +// Translators: Admin (1060), balan (87) $text = array( '2_factor_auth' => '', @@ -234,6 +234,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'Fisierul documentului verificat a disparut. Check in-ul nu va fi posibil.', 'checkedout_file_is_unchanged' => 'Fisierul documentului verificat este inca neschimbat. Check in-ul nu va fi posibil. Daca nu planuiti modificari, puteti reseta starea de Verificare.', 'checkin_document' => 'Check In', +'checkoutpath_does_not_exist' => '', 'checkout_document' => 'Verifica', 'checkout_is_disabled' => 'Verificarea documentelor este dezactivata in configurari.', 'choose_attrdef' => 'Vă rugăm să alegeți definiția atributului', @@ -255,7 +256,7 @@ URL: [url]', 'clear_password' => '', 'clipboard' => 'Clipboard', 'close' => 'Inchide', -'command' => '', +'command' => 'Comanda', 'comment' => 'Comentariu', 'comment_changed_email' => '', 'comment_for_current_version' => 'Comentariu versiune', @@ -466,7 +467,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Data de expirare schimbată', @@ -569,7 +572,7 @@ URL: [url]', 'include_content' => '', 'include_documents' => 'Include documente', 'include_subdirectories' => 'Include subfoldere', -'indexing_tasks_in_queue' => '', +'indexing_tasks_in_queue' => 'Actiuni de indexare in stiva', 'index_converters' => 'Indexare conversie documente', 'index_done' => '', 'index_error' => '', @@ -605,6 +608,7 @@ URL: [url]', 'invalid_target_folder' => 'ID Folder țintă invalid', 'invalid_user_id' => 'ID Utilizator invalid', 'invalid_version' => 'Versiune Document invalidă', +'in_folder' => '', 'in_revision' => 'In revizuire', 'in_workflow' => 'În workflow', 'is_disabled' => 'Dezactivează cont', @@ -651,7 +655,7 @@ URL: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Dacă doriți să încărcați fișiere mai mari decât dimensiunea maximă curentă de încărcare, vă rugăm să folosiți alternativa pagină de încărcare.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Listeaza toate drepturile de acces', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'local_file' => 'Fișier local', @@ -794,7 +798,7 @@ URL: [url]', 'only_jpg_user_images' => 'Doar imagini .jpg pot fi utilizate ca imagine-utilizator', 'order_by_sequence_off' => 'Ordonarea dupa secventa este dezactivata in setari. Daca doriti acest parametru sa aiba efect, va trebui sa-l reactivati.', 'original_filename' => 'Nume de fișier original', -'overall_indexing_progress' => '', +'overall_indexing_progress' => 'Progres indexare total', 'owner' => 'Proprietar', 'ownership_changed_email' => 'Proprietar schimbat', 'ownership_changed_email_body' => 'Proprietar schimbat @@ -1050,13 +1054,14 @@ URL: [url]', 'select_users' => 'Click pentru a selecta utilizatori', 'select_workflow' => 'Selectați workflow', 'send_email' => '', -'send_test_mail' => '', +'send_test_mail' => 'Trimite e-mail de test', 'september' => 'Septembrie', 'sequence' => 'Poziție', 'seq_after' => 'După "[prevname]"', 'seq_end' => 'La sfârșit', 'seq_keep' => 'Păstrați poziția', 'seq_start' => 'Prima poziție', +'sessions' => '', 'settings' => 'Setări', 'settings_activate_module' => 'Activați modulul', 'settings_activate_php_extension' => 'Activați extensia PHP', @@ -1067,9 +1072,9 @@ URL: [url]', 'settings_advancedAcl_desc' => '', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', 'settings_Authentication' => 'Setări de autentificare', -'settings_autoLoginUser' => '', +'settings_autoLoginUser' => 'Login automat', 'settings_autoLoginUser_desc' => '', -'settings_available_languages' => '', +'settings_available_languages' => 'Limbi disponibile', 'settings_available_languages_desc' => '', 'settings_backupDir' => '', 'settings_backupDir_desc' => '', @@ -1087,7 +1092,7 @@ URL: [url]', 'settings_contentDir_desc' => 'Unde sunt stocate fișierele încărcate (este recomandat sa alegeti un director care nu este accesibil prin intermediul web-server-ului dumneavoastră)', 'settings_contentOffsetDir' => 'Conținut Director Offset', 'settings_contentOffsetDir_desc' => 'Pentru a lucra în jurul valorii de limităre în sistemul de fișiere de bază, o nouă structură director a fost concepută care există in directorul conținut (Content Director). Acest lucru necesită un director de bază din care să se înceapă. De obicei, lăsați asta la setarea implicită, 1048576, dar se poate trece orice număr sau șir care nu este deja inclus (Content Director)', -'settings_convertToPdf' => '', +'settings_convertToPdf' => 'Converteste PDF pentru previzualizare', 'settings_convertToPdf_desc' => '', 'settings_cookieLifetime' => 'Timp de viață Cookie', 'settings_cookieLifetime_desc' => 'Durata de viață a unui cookie în secunde. Dacă este setat la 0 cookie-ul va fi eliminat atunci când browser-ul este închis.', @@ -1162,6 +1167,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Dacă este setat, incărcarea este de asemenea disponibilă prin intermediul unui applet Java numit jumploader fără limită de dimensiune a fișierului stabilită de browser. De asemenea, permite încărcarea mai multor fișiere într-un singur pas. Activand aceasta optiune va dezactiva optiunea http only cookies.', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Activare notificari rezuitor/aprobator', 'settings_enableNotificationAppRev_desc' => 'Bifati pentru a trimite o notificare către revizuitor/aprobator când se adaugă o nouă versiune la document', 'settings_enableNotificationWorkflow' => 'Trimite notificare utilizatorilor din urmatorul pas al workflow-ului', @@ -1180,6 +1187,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => 'Permite revizuirea/aprobarea pentru utilizatorul autentificat', 'settings_enableSelfRevApp_desc' => 'Activați această opțiune dacă doriți ca utilizatorul autentificat să fie listat ca revizuitor/aprobator sau in tranzițiile workflow-ului.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Selecție Temă', 'settings_enableThemeSelector_desc' => 'Activare/dezactivare selector temă pe pagina de login.', 'settings_enableUpdateReceipt' => '', @@ -1299,7 +1308,7 @@ URL: [url]', 'settings_rootFolderID_desc' => 'ID-ul folder-ului rădăcină (de regulă nu este nevoie să se schimbe)', 'settings_SaveError' => 'Eroare la salvarea fișierului de configurare', 'settings_Server' => 'Setări server', -'settings_showFullPreview' => '', +'settings_showFullPreview' => 'Afiseaza document integral', 'settings_showFullPreview_desc' => '', 'settings_showMissingTranslations' => 'Arată traducerile lipsă', 'settings_showMissingTranslations_desc' => 'Listează toate traducerile lipsă în partea de jos a paginii. Utilizatorul autentificat va putea să propună o traducere lipsă care va fi apoi salvată într-un fișier csv. Nu porniți această funcționalitate într-un mediu de producție!', @@ -1402,6 +1411,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Clipboard mutat în folderul curent', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Eliminat din clipboard', 'splash_rm_attribute' => 'Atribut eliminat', 'splash_rm_document' => 'Document eliminat', @@ -1473,7 +1483,7 @@ URL: [url]', 'thursday' => 'Joi', 'thursday_abbr' => 'Jo', 'timeline' => 'Cronologie', -'timeline_add_file' => '', +'timeline_add_file' => 'Atasament nou', 'timeline_add_version' => '', 'timeline_full_add_file' => '[document]
Adaugă atașament', 'timeline_full_add_version' => '', @@ -1591,6 +1601,7 @@ URL: [url]', 'workflow_action_name' => 'Nume', 'workflow_editor' => 'Editor Workflow', 'workflow_group_summary' => 'Sumar Grup', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Stare inițială', 'workflow_in_use' => 'Acest Workflow este utilizat în prezent de documente.', 'workflow_layoutdata_saved' => '', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index 4a0373247..8d0cc45a8 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 (1642) +// Translators: Admin (1644) $text = array( '2_factor_auth' => 'Двухфакторная аутентификация', @@ -234,6 +234,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'Файл полученного документа не найден. Загрузка невозможна.', 'checkedout_file_is_unchanged' => 'Документ не изменен. Загрузка не возможна.', 'checkin_document' => 'Получение', +'checkoutpath_does_not_exist' => '', 'checkout_document' => 'Загрузка', 'checkout_is_disabled' => 'Загрузка отключена.', 'choose_attrdef' => 'Выберите атрибут', @@ -310,7 +311,7 @@ URL: [url]', 'docs_in_reception_no_access' => '', 'docs_in_revision_no_access' => '', 'document' => 'Документ', -'documentcontent' => '', +'documentcontent' => 'Содержание документа', 'documents' => 'док.', 'documents_checked_out_by_you' => 'Документ проверен вами', 'documents_in_process' => 'Документы в работе', @@ -466,7 +467,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Срок действия изменен', @@ -605,6 +608,7 @@ URL: [url]', 'invalid_target_folder' => 'Неверный идентификатор целевого каталога', 'invalid_user_id' => 'Неверный идентификатор пользователя', 'invalid_version' => 'Неверная версия документа', +'in_folder' => '', 'in_revision' => 'В рассмотрении', 'in_workflow' => 'В процессе', 'is_disabled' => 'Отключить учётную запись', @@ -651,7 +655,7 @@ URL: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Для загрузки файлов, превышающих ограничение размера, используйте другой способ.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Показать все права доступа', 'list_contains_no_access_docs' => '', 'list_hooks' => 'Список хуков', 'local_file' => 'Локальный файл', @@ -1064,6 +1068,7 @@ URL: [url]', 'seq_end' => 'В конце', 'seq_keep' => 'Не изменять', 'seq_start' => 'В начале', +'sessions' => '', 'settings' => 'Настройки', 'settings_activate_module' => 'Активировать модуль', 'settings_activate_php_extension' => 'Активировать расширение PHP', @@ -1169,6 +1174,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Если включено, загрузка файлов доступна так же через Java-апплет, называемый jumploader, без ограничения размера файла. Это также позволит загружать несколько файлов за раз.', 'settings_enableMenuTasks' => 'Включить список задач в меню', 'settings_enableMenuTasks_desc' => 'Включить/отключить пункт меню, который содержит все задачи пользователя. Там содержатся документы, которые нуждаются в рецензии, утверждении и т.д.', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Извещать рецензента или утверждающего', 'settings_enableNotificationAppRev_desc' => 'Включите для отправки извещения рецензенту или утверждающему при добавлении новой версии документа.', 'settings_enableNotificationWorkflow' => 'Отправить уведомление пользователям в следующей стадии процесса', @@ -1187,6 +1194,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => 'Включить для активации функции ревизии документа по истечении определенного периода времени.', 'settings_enableSelfRevApp' => 'Разрешить рецензию/утверждение
пользователями вошедшими в систему', 'settings_enableSelfRevApp_desc' => 'Включите для того, чтобы пользователи, в настоящее время выполнившие вход в систему, были в списке рецензентов/утверждающих и в изменении процесса.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Выбор темы', 'settings_enableThemeSelector_desc' => 'Включить или отключить возможность выбора темы на странице входа.', 'settings_enableUpdateReceipt' => '', @@ -1409,6 +1418,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Буфер обмена перенесён в текущий каталог', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Удалён из буфера обмена', 'splash_rm_attribute' => 'Атрибут удалён', 'splash_rm_document' => 'Документ удалён', @@ -1598,6 +1608,7 @@ URL: [url]', 'workflow_action_name' => 'Название', 'workflow_editor' => 'Редактор процесса', 'workflow_group_summary' => 'Сводка по группе', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Начальный статус', 'workflow_in_use' => 'Этот процесс используется документами.', 'workflow_layoutdata_saved' => '', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index 33e4005a0..fee6ee8e1 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 (544), destinqo (19) +// Translators: Admin (547), destinqo (19) $text = array( '2_factor_auth' => '', @@ -211,6 +211,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => '', @@ -413,14 +414,16 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Datum platnosti zmeneny', 'expiry_changed_email_body' => '', 'expiry_changed_email_subject' => '', 'export' => '', -'extension_manager' => '', +'extension_manager' => 'Správa rozšírení', 'february' => 'Február', 'file' => 'Súbor', 'files' => 'Súbory', @@ -487,7 +490,7 @@ URL: [url]', 'identical_version' => '', 'import' => '', 'importfs' => '', -'import_fs' => '', +'import_fs' => 'Importovanie zo súborového systému', 'import_fs_warning' => '', 'include_content' => '', 'include_documents' => 'Vrátane súborov', @@ -528,6 +531,7 @@ URL: [url]', 'invalid_target_folder' => 'Neplatné cieľové ID zložky', 'invalid_user_id' => 'Neplatné ID používateľa', 'invalid_version' => 'Neplatná verzia dokumentu', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => '', 'is_disabled' => '', @@ -632,7 +636,7 @@ URL: [url]', 'new_attrdef' => '', 'new_default_keywords' => 'Pridať kľúčové slová', 'new_default_keyword_category' => 'Pridať kategóriu', -'new_document_category' => '', +'new_document_category' => 'Pridať kategóriu', 'new_document_email' => 'Novy dokument', 'new_document_email_body' => '', 'new_document_email_subject' => '', @@ -889,6 +893,7 @@ URL: [url]', 'seq_end' => 'Na koniec', 'seq_keep' => 'Ponechať pozíciu', 'seq_start' => 'Prvá pozícia', +'sessions' => '', 'settings' => 'Nastavenia', 'settings_activate_module' => '', 'settings_activate_php_extension' => '', @@ -994,6 +999,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => '', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => '', 'settings_enableNotificationAppRev_desc' => '', 'settings_enableNotificationWorkflow' => '', @@ -1012,6 +1019,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Výber šablóny', 'settings_enableThemeSelector_desc' => '', 'settings_enableUpdateReceipt' => '', @@ -1234,6 +1243,7 @@ URL: [url]', 'splash_moved_clipboard' => '', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => '', 'splash_rm_attribute' => '', 'splash_rm_document' => 'Dokument odstránený', @@ -1409,6 +1419,7 @@ URL: [url]', 'workflow_action_name' => '', 'workflow_editor' => '', 'workflow_group_summary' => '', +'workflow_has_cycle' => '', 'workflow_initstate' => '', 'workflow_in_use' => '', 'workflow_layoutdata_saved' => '', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index d27a69344..04f955c4f 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/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 (1138), tmichelfelder (106) +// Translators: Admin (1144), tmichelfelder (106) $text = array( '2_factor_auth' => '', @@ -57,7 +57,7 @@ URL: [url]', 'add_attrdefgroup' => '', 'add_document' => 'Lägg till dokument', 'add_document_link' => 'Lägg till länkat dokument', -'add_document_notify' => '', +'add_document_notify' => 'Lägg till notifiering', 'add_doc_reviewer_approver_warning' => 'OBS! Dokumentet kommer automatiskt att markeras klart för användning, om ingen person anges för granskning eller godkännande av dokumentet.', 'add_doc_workflow_warning' => 'OBS! Dokumentet kommer automatiskt att markeras klart för användning, om inget arbetsflöde anges.', 'add_event' => 'Lägg till händelse', @@ -173,7 +173,7 @@ URL: [url]', 'at_least_n_users_of_group' => 'Åtminstone [number_of_users] användare av [group]', 'august' => 'augusti', 'authentication' => '', -'author' => '', +'author' => 'Författare', 'automatic_status_update' => 'Automatisk ändring av status', 'back' => 'Tillbaka', 'backup_list' => 'Befintliga backup-filer', @@ -222,6 +222,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => 'Välj attributdefinition', @@ -454,7 +455,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Utgångsdatum ändrat', @@ -471,7 +474,7 @@ URL: [url]', 'files' => 'Filer', 'files_deletion' => 'Ta bort alla filer', 'files_deletion_warning' => 'Med detta alternativ kan du ta bort alla filer i en dokumentkatalog. Versionsinformationen kommer fortfarande att visas.', -'files_loading' => '', +'files_loading' => 'V.v. vänta tills listan med filer har laddats ...', 'file_size' => 'Filstorlek', 'filter_for_documents' => '', 'filter_for_folders' => '', @@ -593,6 +596,7 @@ URL: [url]', 'invalid_target_folder' => 'Ogiltigt ID för målkatalogen', 'invalid_user_id' => 'Ogiltigt användar-ID', 'invalid_version' => 'Ogiltig dokumentversion', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => 'Utkast: under bearbetning', 'is_disabled' => 'Inaktivera kontot', @@ -1000,12 +1004,12 @@ URL: [url]', 'select_grp_ind_notification' => '', 'select_grp_ind_recipients' => '', 'select_grp_ind_reviewers' => '', -'select_grp_notification' => '', +'select_grp_notification' => 'Klicka för att välja gruppnotifiering', 'select_grp_recipients' => '', 'select_grp_reviewers' => 'Välj en grupp som ska granska', 'select_grp_revisors' => '', 'select_ind_approvers' => 'Välj en person som ska godkänna', -'select_ind_notification' => '', +'select_ind_notification' => 'Klicka för att välja individuell notifiering', 'select_ind_recipients' => '', 'select_ind_reviewers' => 'Välj en person som ska granska', 'select_ind_revisors' => '', @@ -1020,6 +1024,7 @@ URL: [url]', 'seq_end' => 'på slutet', 'seq_keep' => 'behåll positionen', 'seq_start' => 'första positionen', +'sessions' => '', 'settings' => 'Inställningar', 'settings_activate_module' => 'Aktivera modul', 'settings_activate_php_extension' => 'Aktivera PHP-extension', @@ -1033,7 +1038,7 @@ URL: [url]', 'settings_autoLoginUser' => '', 'settings_autoLoginUser_desc' => '', 'settings_available_languages' => 'Tillgängliga språk', -'settings_available_languages_desc' => '', +'settings_available_languages_desc' => 'Bara de valda språken kommer att laddas och visas i språk väljaren. Det förvalda språket kommer alltid att laddas.', 'settings_backupDir' => '', 'settings_backupDir_desc' => '', 'settings_cacheDir' => 'Cache-mapp', @@ -1125,6 +1130,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Om aktiverad, kan filer laddas upp via javaapplet med namnet jumploader, utan begränsningar i filstorlek. Flera filer kan även laddas upp samtidigt i ett steg.', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Aktivera meddelande till personer som granskar/godkänner', 'settings_enableNotificationAppRev_desc' => 'Kryssa i, för att skicka ett meddelande till personer som granskar/godkänner när en ny version av dokumentet har lagts till', 'settings_enableNotificationWorkflow' => '', @@ -1143,6 +1150,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => 'Tillåt granskning/godkänning av inloggad användare', 'settings_enableSelfRevApp_desc' => 'Aktivera om du vill att aktuell inloggad användare visas i listan för personer som granskar/godkänner dokument och i övergång på arbetsflöden.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Tema urval', 'settings_enableThemeSelector_desc' => 'Stäng på/av tema urval vid inloggningssidan.', 'settings_enableUpdateReceipt' => '', @@ -1365,6 +1374,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Urklipp flyttades till aktuella katalogen', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Borttagen från urklipp', 'splash_rm_attribute' => 'Attribut har tagits bort', 'splash_rm_document' => 'Dokument borttaget', @@ -1554,6 +1564,7 @@ URL: [url]', 'workflow_action_name' => 'Namn', 'workflow_editor' => 'Arbetsflöde Editor', 'workflow_group_summary' => 'Sammanfattning grupp', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Ursprungsstatus', 'workflow_in_use' => 'Detta arbetsflöde används i ett dokument.', 'workflow_layoutdata_saved' => '', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index a8f6af9ae..3e3cdfe5a 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 (1049), aydin (83) +// Translators: Admin (1051), aydin (83) $text = array( '2_factor_auth' => '', @@ -228,6 +228,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => 'Lütfen nitelik tanımını seçiniz', @@ -460,7 +461,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Süresinin dolacağı tarihi değişti', @@ -599,6 +602,7 @@ URL: [url]', 'invalid_target_folder' => 'Geçersiz Hedef Klasör ID', 'invalid_user_id' => 'Geçersiz Kullanıcı ID', 'invalid_version' => 'Geçersiz Doküman Versiyonu', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => 'İş Akışında', 'is_disabled' => 'Hesap devredışı', @@ -645,7 +649,7 @@ URL: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Mevcut maksimum yükleme boyutundan daha büyük dosya yüklemek istiyorsanız alternatif yükleme sayfası için tıklayın.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Tüm erişim haklarini listele', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'local_file' => 'Yerel dosya', @@ -1036,6 +1040,7 @@ URL: [url]', 'seq_end' => 'En sona', 'seq_keep' => 'Sırayı Koru', 'seq_start' => 'İlk sıra', +'sessions' => '', 'settings' => 'Ayarlar', 'settings_activate_module' => 'Modülü etkinleştir', 'settings_activate_php_extension' => 'PHP uzantısını etkinleştir', @@ -1141,6 +1146,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Etkinleştirilirse, büyük dosyalar dosya limitine bakılmaksızın jumploader isimli java applet aracılığıyla yüklenebilir. Bu ayrıca bir seferde birden çok dosya yüklemeyi de sağlar. Bu açıldığında sadece http çerezleri kapanmış olur.', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Kontrol eden/onaylayan bildirimlerini etkinleştir', 'settings_enableNotificationAppRev_desc' => 'Dokümanın yeni versiyonu yüklendiğinde kontrol eden/onaylayana bildirim mesajı gitmesi için bunu etkinleştirin.', 'settings_enableNotificationWorkflow' => 'Bir sonraki iş akışında kullanıcıları bilgilendir', @@ -1159,6 +1166,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => 'Giriş yapmış kullanıcılar için kontrol/onay izni ver', 'settings_enableSelfRevApp_desc' => 'O an giriş yapmış olan kullanıcıları kontrol eden/onaylayan olarak listelemek ve iş akışına dahil etmek için bunu seçebilirsiniz.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Tema seçimini aç/kapat', 'settings_enableThemeSelector_desc' => 'Giriş sayfasında tema seçimini aç/kapat', 'settings_enableUpdateReceipt' => '', @@ -1381,6 +1390,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Pano mevcut klasöre taşındı', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Panodan silindi', 'splash_rm_attribute' => 'Nitelik silindi', 'splash_rm_document' => 'Doküman silindi', @@ -1439,7 +1449,7 @@ URL: [url]', 'sunday_abbr' => 'Pa', 'sv_SE' => 'İsveççe', 'switched_to' => 'Yerine geçilen', -'takeOverAttributeValue' => '', +'takeOverAttributeValue' => 'Son versiyondaki özellikleri devral', 'takeOverGrpApprover' => 'Bir önceki versiyon onayını yapan grubu al.', 'takeOverGrpReviewer' => 'Bir önceki versiyon kontrolünü yapan grubu al.', 'takeOverIndApprover' => 'Bir önceki versiyonu onaylayanı al.', @@ -1570,6 +1580,7 @@ URL: [url]', 'workflow_action_name' => 'İsim', 'workflow_editor' => 'İş Akış Editörü', 'workflow_group_summary' => 'Grup özeti', +'workflow_has_cycle' => '', 'workflow_initstate' => 'İlk durum', 'workflow_in_use' => 'Bu iş akışı doküman(lar) tarafından kullanımda.', 'workflow_layoutdata_saved' => '', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 1c8a6cd1d..abade20aa 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -234,6 +234,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'Файл отримуваного документа не знайдено. Завантаження неможливе.', 'checkedout_file_is_unchanged' => 'Документ не змінено. Завантаження неможливе', 'checkin_document' => 'Отримання', +'checkoutpath_does_not_exist' => '', 'checkout_document' => 'Завантаження', 'checkout_is_disabled' => 'Завантаження відключене', 'choose_attrdef' => 'Оберіть атрибут', @@ -466,7 +467,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => 'Дату терміну виконання змінено', @@ -605,6 +608,7 @@ URL: [url]', 'invalid_target_folder' => 'Невірний ідентифікатор цільового призначення', 'invalid_user_id' => 'Невірний ідентифікатор користувача', 'invalid_version' => 'Невірна версія документа', +'in_folder' => '', 'in_revision' => 'В процесі ревізії', 'in_workflow' => 'В процесі', 'is_disabled' => 'Відключити обліковий запис', @@ -1057,6 +1061,7 @@ URL: [url]', 'seq_end' => 'В кінці', 'seq_keep' => 'Не змінювати', 'seq_start' => 'На початку', +'sessions' => '', 'settings' => 'Налаштування', 'settings_activate_module' => 'Активувати модуль', 'settings_activate_php_extension' => 'Активувати розширення PHP', @@ -1162,6 +1167,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => 'Якщо увімкнено, завантаження файлів доступне також через Java-аплет jumploader без обмеження розміру файлів. Це також дозволить завантажувати кілька файлів за раз.', 'settings_enableMenuTasks' => 'Включити список завдань в меню', 'settings_enableMenuTasks_desc' => 'Включити/відключити пункт меню, який містить всі завдання користувача. Там містяться документи, які потребують рецензії, затвердження і т.ін.', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => 'Сповіщати рецензента і затверджувача', 'settings_enableNotificationAppRev_desc' => 'Увімкніть для відправки сповіщення рецензенту чи затверджувачеві при додаванні нової версії документа.', 'settings_enableNotificationWorkflow' => 'Відсилати сповіщення користувачам, задіяним в наступній стадії процесу', @@ -1180,6 +1187,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => 'Увімкніть для актвації функції ревізії документа через певний час', 'settings_enableSelfRevApp' => 'Дозволити рецензію/затвердження
користувачами, авторизованими у системі', 'settings_enableSelfRevApp_desc' => 'Увімкніть для того, щоб користувачі, в даний момент авторизовані у системі, були в списку рецензентів/затверджувачів і в зміні процесу.', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Вибір теми', 'settings_enableThemeSelector_desc' => 'Увімкнути/вимкнути можливість вибору теми на сторінці авторизації.', 'settings_enableUpdateReceipt' => '', @@ -1402,6 +1411,7 @@ URL: [url]', 'splash_moved_clipboard' => 'Буфер обміну перенесено в поточний каталог', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => 'Видалити з буферу обміну', 'splash_rm_attribute' => 'Атрибут видалено', 'splash_rm_document' => 'Документ видалено', @@ -1591,6 +1601,7 @@ URL: [url]', 'workflow_action_name' => 'Назва', 'workflow_editor' => 'Редактор процесу', 'workflow_group_summary' => 'Підсумки по процесу групи', +'workflow_has_cycle' => '', 'workflow_initstate' => 'Початковий статус', 'workflow_in_use' => 'Цей процес використовується в документах.', 'workflow_layoutdata_saved' => '', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 4fdd449f6..149d70e5c 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 (679), fengjohn (5) +// Translators: Admin (683), fengjohn (5) $text = array( '2_factor_auth' => '', @@ -211,6 +211,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => '请选择属性', @@ -289,7 +290,7 @@ URL: [url]', 'docs_in_reception_no_access' => '', 'docs_in_revision_no_access' => '', 'document' => '文档', -'documentcontent' => '', +'documentcontent' => '文档内容', 'documents' => '文档', 'documents_checked_out_by_you' => '', 'documents_in_process' => '待处理文档', @@ -415,7 +416,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => '到期日子已改变', @@ -494,7 +497,7 @@ URL: [url]', 'include_content' => '', 'include_documents' => '包含文档', 'include_subdirectories' => '包含子目录', -'indexing_tasks_in_queue' => '', +'indexing_tasks_in_queue' => '队列中的检索任务', 'index_converters' => '索引文件转换', 'index_done' => '', 'index_error' => '', @@ -530,6 +533,7 @@ URL: [url]', 'invalid_target_folder' => '无效目标文件夹ID号', 'invalid_user_id' => '无效用户ID号', 'invalid_version' => '无效文档版本', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => '', 'is_disabled' => '禁用帐户', @@ -576,7 +580,7 @@ URL: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => '超过20M大文件,请选择上传大文件.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => '列出所有的访问权限', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'local_file' => '本地文件', @@ -891,6 +895,7 @@ URL: [url]', 'seq_end' => '末尾', 'seq_keep' => '当前', 'seq_start' => '首位', +'sessions' => '', 'settings' => '设置', 'settings_activate_module' => '', 'settings_activate_php_extension' => '', @@ -996,6 +1001,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => '', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => '', 'settings_enableNotificationAppRev_desc' => '', 'settings_enableNotificationWorkflow' => '', @@ -1014,6 +1021,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => '', 'settings_enableThemeSelector_desc' => '', 'settings_enableUpdateReceipt' => '', @@ -1036,7 +1045,7 @@ URL: [url]', 'settings_expandFolderTree_val0' => '', 'settings_expandFolderTree_val1' => '', 'settings_expandFolderTree_val2' => '', -'settings_Extensions' => '', +'settings_Extensions' => '设置扩展', 'settings_extraPath' => '额外的PHP的include路径', 'settings_extraPath_desc' => '附加软件的路径。这是包含目录,例如在ADODB目录或额外的PEAR包', 'settings_firstDayOfWeek' => '每周第一天', @@ -1236,6 +1245,7 @@ URL: [url]', 'splash_moved_clipboard' => '', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => '已从剪切板删除', 'splash_rm_attribute' => '', 'splash_rm_document' => '文档已被移除', @@ -1411,6 +1421,7 @@ URL: [url]', 'workflow_action_name' => '', 'workflow_editor' => '', 'workflow_group_summary' => '', +'workflow_has_cycle' => '', 'workflow_initstate' => '', 'workflow_in_use' => '', 'workflow_layoutdata_saved' => '', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 8d719f72f..01b127201 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 (2377) +// Translators: Admin (2378) $text = array( '2_factor_auth' => '', @@ -211,6 +211,7 @@ URL: [url]', 'checkedout_file_has_disappeared' => '', 'checkedout_file_is_unchanged' => '', 'checkin_document' => '', +'checkoutpath_does_not_exist' => '', 'checkout_document' => '', 'checkout_is_disabled' => '', 'choose_attrdef' => '請選擇屬性', @@ -413,7 +414,9 @@ URL: [url]', 'expire_in_1h' => '', 'expire_in_1m' => '', 'expire_in_1w' => '', +'expire_in_1y' => '', 'expire_in_2h' => '', +'expire_in_2y' => '', 'expire_today' => '', 'expire_tomorrow' => '', 'expiry_changed_email' => '到期日子已改變', @@ -485,7 +488,7 @@ URL: [url]', 'hu_HU' => '匈牙利語', 'id' => '序號', 'identical_version' => '新版本的內容與舊版本完全相同', -'import' => '', +'import' => '匯入', 'importfs' => '', 'import_fs' => '由檔案系統匯入', 'import_fs_warning' => '', @@ -528,6 +531,7 @@ URL: [url]', 'invalid_target_folder' => '無效目的檔案夾ID號', 'invalid_user_id' => '無效用戶ID號', 'invalid_version' => '無效文檔版本', +'in_folder' => '', 'in_revision' => '', 'in_workflow' => '', 'is_disabled' => '禁用帳戶', @@ -889,6 +893,7 @@ URL: [url]', 'seq_end' => '末尾', 'seq_keep' => '當前', 'seq_start' => '首位', +'sessions' => '', 'settings' => '設置', 'settings_activate_module' => '', 'settings_activate_php_extension' => '', @@ -994,6 +999,8 @@ URL: [url]', 'settings_enableLargeFileUpload_desc' => '', 'settings_enableMenuTasks' => '', 'settings_enableMenuTasks_desc' => '', +'settings_enableMultiUpload' => '', +'settings_enableMultiUpload_desc' => '', 'settings_enableNotificationAppRev' => '', 'settings_enableNotificationAppRev_desc' => '', 'settings_enableNotificationWorkflow' => '', @@ -1012,6 +1019,8 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', +'settings_enableSessionList' => '', +'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => '', 'settings_enableThemeSelector_desc' => '', 'settings_enableUpdateReceipt' => '', @@ -1234,6 +1243,7 @@ URL: [url]', 'splash_moved_clipboard' => '', 'splash_move_document' => '', 'splash_move_folder' => '', +'splash_receipt_update_success' => '', 'splash_removed_from_clipboard' => '', 'splash_rm_attribute' => '', 'splash_rm_document' => '文檔已被移除', @@ -1409,6 +1419,7 @@ URL: [url]', 'workflow_action_name' => '流程動作名稱', 'workflow_editor' => '', 'workflow_group_summary' => '流程群組簡述', +'workflow_has_cycle' => '', 'workflow_initstate' => '', 'workflow_in_use' => '正在使用之流程', 'workflow_layoutdata_saved' => '', diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index 2f9d4bb65..3d3db7173 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -28,6 +28,10 @@ include("../inc/inc.Extension.php"); include("../inc/inc.DBInit.php"); include("../inc/inc.Authentication.php"); include("../inc/inc.ClassUI.php"); +include("../inc/inc.ClassController.php"); + +$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); +$controller = Controller::factory($tmp[1]); /* Check if the form data comes from a trusted request */ if(!checkFormKey('adddocument')) { @@ -77,6 +81,13 @@ if($version_comment == "" && isset($_POST["use_comment"])) $keywords = trim($_POST["keywords"]); $categories = isset($_POST["categories"]) ? $_POST["categories"] : null; +$cats = array(); +if($categories) { + foreach($categories as $catid) { + $cats[] = $dms->getDocumentCategory($catid); + } +} + if(isset($_POST["attributes"])) $attributes = $_POST["attributes"]; else @@ -116,14 +127,31 @@ if (!is_numeric($sequence)) { UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("invalid_sequence")); } -$expires = false; -if (!isset($_POST['expires']) || $_POST["expires"] != "false") { - if($_POST["expdate"]) { - $tmp = explode('-', $_POST["expdate"]); - $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); - } else { - $expires = mktime(0,0,0, $_POST["expmonth"], $_POST["expday"], $_POST["expyear"]); - } +switch($_POST["presetexpdate"]) { +case "date": + $tmp = explode('-', $_POST["expdate"]); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + break; +case "1w": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2]+7, $tmp[0]); + break; +case "1m": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1]+1, $tmp[2], $tmp[0]); + break; +case "1y": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]+1); + break; +case "2y": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]+2); + break; +case "never": +default: + $expires = null; + break; } // Get the list of reviewers and approvers for this document. @@ -220,10 +248,13 @@ if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'tra } } +$docsource = 'upload'; + if($settings->_dropFolderDir) { if(isset($_POST["dropfolderfileform1"]) && $_POST["dropfolderfileform1"]) { $fullfile = $settings->_dropFolderDir.'/'.$user->getLogin().'/'.$_POST["dropfolderfileform1"]; if(file_exists($fullfile)) { + $docsource = 'dropfolder'; /* Check if a local file is uploaded as well */ if(isset($_FILES["userfile"]['error'][0])) { if($_FILES["userfile"]['error'][0] != 0) @@ -240,9 +271,10 @@ if($settings->_dropFolderDir) { } } -if(isset($_POST['fineuploaderuuids']) && $_POST['fineuploaderuuids']) { - $uuids = explode(';', $_POST['fineuploaderuuids']); - $names = explode(';', $_POST['fineuploadernames']); +$prefix = 'userfile'; +if(isset($_POST[$prefix.'-fine-uploader-uuids']) && $_POST[$prefix.'-fine-uploader-uuids']) { + $uuids = explode(';', $_POST[$prefix.'-fine-uploader-uuids']); + $names = explode(';', $_POST[$prefix.'-fine-uploader-names']); foreach($uuids as $i=>$uuid) { $fullfile = $settings->_stagingDir.'/'.utf8_basename($uuid); if(file_exists($fullfile)) { @@ -257,6 +289,33 @@ if(isset($_POST['fineuploaderuuids']) && $_POST['fineuploaderuuids']) { } } +if($settings->_enableFullSearch) { + $index = $indexconf['Indexer']::open($settings->_luceneDir); + $indexconf['Indexer']::init($settings->_stopWordsFile); +} else { + $index = null; +} + +/* Check if additional notification shall be added */ +$notusers = array(); +if(!empty($_POST['notification_users'])) { + foreach($_POST['notification_users'] as $notuserid) { + $notuser = $dms->getUser($notuserid); + if($notuser) { + $notusers[] = $notuser; + } + } +} +$notgroups = array(); +if(!empty($_POST['notification_groups'])) { + foreach($_POST['notification_groups'] as $notgroupid) { + $notgroup = $dms->getGroup($notgroupid); + if($notgroup) { + $notgroups[] = $notgroup; + } + } +} + /* Check files for Errors first */ for ($file_num=0;$file_numgetDocumentCategory($catid); - } - } + $controller->setParam('documentsource', $docsource); + $controller->setParam('folder', $folder); + $controller->setParam('index', $index); + $controller->setParam('indexconf', $indexconf); + $controller->setParam('name', $name); + $controller->setParam('comment', $comment); + $controller->setParam('expires', $expires); + $controller->setParam('keywords', $keywords); + $controller->setParam('categories', $cats); + $controller->setParam('owner', $owner); + $controller->setParam('userfiletmp', $userfiletmp); + $controller->setParam('userfilename', $userfilename); + $controller->setParam('filetype', $fileType); + $controller->setParam('userfiletype', $userfiletype); + $controller->setParam('sequence', $sequence); + $controller->setParam('reviewers', $reviewers); + $controller->setParam('approvers', $approvers); + $controller->setParam('reqversion', $reqversion); + $controller->setParam('versioncomment', $version_comment); + $controller->setParam('attributes', $attributes); + $controller->setParam('attributesversion', $attributes_version); + $controller->setParam('workflow', $workflow); + $controller->setParam('notificationgroups', $notgroups); + $controller->setParam('notificationusers', $notusers); + $controller->setParam('maxsizeforfulltext', $settings->_maxSizeForFullText); + $controller->setParam('defaultaccessdocs', $settings->_defaultAccessDocs); - if(isset($GLOBALS['SEEDDMS_HOOKS']['addDocument'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['addDocument'] as $hookObj) { - if (method_exists($hookObj, 'preAddDocument')) { - $hookObj->preAddDocument(array('name'=>&$name, 'comment'=>&$comment)); - } - } - } - - $filesize = SeedDMS_Core_File::fileSize($userfiletmp); - $res = $folder->addDocument($name, $comment, $expires, $owner, $keywords, - $cats, $userfiletmp, utf8_basename($userfilename), - $fileType, $userfiletype, $sequence, - $reviewers, $approvers, $reqversion, - $version_comment, $attributes, $attributes_version, $workflow); - - if (is_bool($res) && !$res) { - UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_occured")); + if(!$document = $controller->run()) { + UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText($controller->getErrorMsg())); } else { - $document = $res[0]; - - /* Set access as specified in settings. */ - if($settings->_defaultAccessDocs) { - if($settings->_defaultAccessDocs > 0 && $settings->_defaultAccessDocs < 4) { - $document->setInheritAccess(0, true); - $document->setDefaultAccess($settings->_defaultAccessDocs, true); - } - } - - if(isset($GLOBALS['SEEDDMS_HOOKS']['addDocument'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['addDocument'] as $hookObj) { - if (method_exists($hookObj, 'postAddDocument')) { - $hookObj->postAddDocument($document); - } - } - } - if($settings->_enableFullSearch) { - $index = $indexconf['Indexer']::open($settings->_luceneDir); - if($index) { - $indexconf['Indexer']::init($settings->_stopWordsFile); - $idoc = new $indexconf['IndexedDocument']($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null, !($filesize < $settings->_maxSizeForFullText)); - if(isset($GLOBALS['SEEDDMS_HOOKS']['addDocument'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['addDocument'] as $hookObj) { - if (method_exists($hookObj, 'preIndexDocument')) { - $hookObj->preIndexDocument(null, $document, $idoc); - } - } - } - $index->addDocument($idoc); - } - } - - /* Add a default notification for the owner of the document */ - if($settings->_enableOwnerNotification) { - $res = $document->addNotify($user->getID(), true); - } - /* Check if additional notification shall be added */ - if(!empty($_POST['notification_users'])) { - foreach($_POST['notification_users'] as $notuserid) { - $notuser = $dms->getUser($notuserid); - if($notuser) { - if($document->getAccessMode($user) >= M_READ) - $res = $document->addNotify($notuserid, true); - } - } - } - if(!empty($_POST['notification_groups'])) { - foreach($_POST['notification_groups'] as $notgroupid) { - $notgroup = $dms->getGroup($notgroupid); - if($notgroup) { - if($document->getGroupAccessMode($notgroup) >= M_READ) - $res = $document->addNotify($notgroupid, false); - } - } - } - // Send notification to subscribers of folder. if($notifier) { $fnl = $folder->getNotifyList(); diff --git a/op/op.AddFile.php b/op/op.AddFile.php index e4ff30ee4..32d67c93a 100644 --- a/op/op.AddFile.php +++ b/op/op.AddFile.php @@ -77,6 +77,15 @@ for ($file_num=0;$file_numgetContentByVersion($version); + if(!$v) { + UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_occured")); + } + } $userfiletmp = $_FILES["userfile"]["tmp_name"][$file_num]; $userfiletype = $_FILES["userfile"]["type"][$file_num]; @@ -90,8 +99,8 @@ for ($file_num=0;$file_numaddDocumentFile($name, $comment, $user, $userfiletmp, - utf8_basename($userfilename),$fileType, $userfiletype ); - + utf8_basename($userfilename),$fileType, $userfiletype, $version, $public); + if (is_bool($res) && !$res) { UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_occured")); } else { diff --git a/op/op.Ajax.php b/op/op.Ajax.php index d25efbb3f..1526bfd50 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -27,6 +27,7 @@ include("../inc/inc.DBInit.php"); include("../inc/inc.ClassNotificationService.php"); include("../inc/inc.ClassEmailNotify.php"); include("../inc/inc.ClassUI.php"); +include("../inc/inc.ClassController.php"); require_once("../inc/inc.ClassSession.php"); include("../inc/inc.ClassPasswordStrength.php"); @@ -489,41 +490,6 @@ switch($command) { } break; /* }}} */ - case 'view': /* {{{ */ - require_once("SeedDMS/Preview.php"); - $view = UI::factory($theme, '', array('dms'=>$dms, 'user'=>$user)); - if($view) { - $view->setParam('refferer', ''); - $view->setParam('cachedir', $settings->_cacheDir); - } - $content = ''; - $viewname = $_REQUEST["view"]; - switch($viewname) { - case 'menuclipboard': - $content = $view->menuClipboard($session->getClipboard()); - break; - case 'mainclipboard': - $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $settings->_previewWidthList); - $content = $view->mainClipboard($session->getClipboard(), $previewer); - break; - case 'documentlistrow': - $document = $dms->getDocument($_REQUEST['id']); - if($document) { - if ($document->getAccessMode($user) >= M_READ) { - $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $settings->_previewWidthList); - $view->setParam('previewWidthList', $settings->_previewWidthList); - $view->setParam('showtree', showtree()); - $content = $view->documentListRow($document, $previewer, true); - } - } - break; - default: - $content = ''; - } - echo $content; - - break; /* }}} */ - case 'uploaddocument': /* {{{ */ if($user) { if(checkFormKey('adddocument')) { @@ -649,73 +615,54 @@ switch($command) { $cats = array(); - $filesize = SeedDMS_Core_File::fileSize($userfiletmp); - $res = $folder->addDocument($name, '', $expires, $user, '', - array(), $userfiletmp, utf8_basename($userfilename), - $fileType, $userfiletype, 0, - $reviewers, $approvers, 1, - '', array(), array(), $workflow); + if($settings->_enableFullSearch) { + $index = $indexconf['Indexer']::open($settings->_luceneDir); + $indexconf['Indexer']::init($settings->_stopWordsFile); + } else { + $index = null; + } - if (is_bool($res) && !$res) { + $controller = Controller::factory('AddDocument'); + $controller->setParam('documentsource', 'upload'); + $controller->setParam('folder', $folder); + $controller->setParam('index', $index); + $controller->setParam('indexconf', $indexconf); + $controller->setParam('name', $name); + $controller->setParam('comment', ''); + $controller->setParam('expires', $expires); + $controller->setParam('keywords', ''); + $controller->setParam('categories', $cats); + $controller->setParam('owner', $user); + $controller->setParam('userfiletmp', $userfiletmp); + $controller->setParam('userfilename', $userfilename); + $controller->setParam('filetype', $fileType); + $controller->setParam('userfiletype', $userfiletype); + $controller->setParam('sequence', 0); + $controller->setParam('reviewers', $reviewers); + $controller->setParam('approvers', $approvers); + $controller->setParam('reqversion', 1); + $controller->setParam('versioncomment', ''); + $controller->setParam('attributes', array()); + $controller->setParam('attributesversion', array()); + $controller->setParam('workflow', $workflow); + $controller->setParam('notificationgroups', array()); + $controller->setParam('notificationusers', array()); + $controller->setParam('maxsizeforfulltext', $settings->_maxSizeForFullText); + $controller->setParam('defaultaccessdocs', $settings->_defaultAccessDocs); + + if(!$document = $controller->run()) { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>getMLText("error_occured"))); + echo json_encode(array('success'=>false, 'message'=>getMLText($controller->getErrorMsg()))); exit; } else { - $document = $res[0]; - - /* Set access as specified in settings. */ - if($settings->_defaultAccessDocs) { - if($settings->_defaultAccessDocs > 0 && $settings->_defaultAccessDocs < 4) { - $document->setInheritAccess(0, true); - $document->setDefaultAccess($settings->_defaultAccessDocs, true); - } - } - - if(isset($GLOBALS['SEEDDMS_HOOKS']['addDocument'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['addDocument'] as $hookObj) { - if (method_exists($hookObj, 'postAddDocument')) { - $hookObj->postAddDocument($document); - } - } - } - if($settings->_enableFullSearch) { - $index = $indexconf['Indexer']::open($settings->_luceneDir); - if($index) { - $indexconf['Indexer']::init($settings->_stopWordsFile); - $idoc = new $indexconf['IndexedDocument']($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null, !($filesize < $settings->_maxSizeForFullText)); - if(isset($GLOBALS['SEEDDMS_HOOKS']['addDocument'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['addDocument'] as $hookObj) { - if (method_exists($hookObj, 'preIndexDocument')) { - $hookObj->preIndexDocument(null, $document, $idoc); - } - } - } - $index->addDocument($idoc); - } - } - - /* Add a default notification for the owner of the document */ - if($settings->_enableOwnerNotification) { - $res = $document->addNotify($user->getID(), true); - } // Send notification to subscribers of folder. if($notifier) { - $notifyList = $folder->getNotifyList(); - if($settings->_enableNotificationAppRev) { - /* Reviewers and approvers will be informed about the new document */ - foreach($reviewers['i'] as $reviewerid) { - $notifyList['users'][] = $dms->getUser($reviewerid); - } - foreach($approvers['i'] as $approverid) { - $notifyList['users'][] = $dms->getUser($approverid); - } - foreach($reviewers['g'] as $reviewergrpid) { - $notifyList['groups'][] = $dms->getGroup($reviewergrpid); - } - foreach($approvers['g'] as $approvergrpid) { - $notifyList['groups'][] = $dms->getGroup($approvergrpid); - } - } + $fnl = $folder->getNotifyList(); + $dnl = $document->getNotifyList(); + $nl = array( + 'users'=>array_merge($dnl['users'], $fnl['users']), + 'groups'=>array_merge($dnl['groups'], $fnl['groups']) + ); $subject = "new_document_email_subject"; $message = "new_document_email_body"; @@ -729,11 +676,80 @@ switch($command) { $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); - foreach ($notifyList["groups"] as $grp) { + $notifier->toList($user, $nl["users"], $subject, $message, $params); + foreach ($nl["groups"] as $grp) { $notifier->toGroup($user, $grp, $subject, $message, $params); } + if($workflow && $settings->_enableNotificationWorkflow) { + $subject = "request_workflow_action_email_subject"; + $message = "request_workflow_action_email_body"; + $params = array(); + $params['name'] = $document->getName(); + $params['version'] = 1; + $params['workflow'] = $workflow->getName(); + $params['folder_path'] = $folder->getFolderPathPlain(); + $params['current_state'] = $workflow->getInitState()->getName(); + $params['username'] = $user->getFullName(); + $params['sitename'] = $settings->_siteName; + $params['http_root'] = $settings->_httpRoot; + $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + + foreach($workflow->getNextTransitions($workflow->getInitState()) as $ntransition) { + foreach($ntransition->getUsers() as $tuser) { + $notifier->toIndividual($user, $tuser->getUser(), $subject, $message, $params); + } + foreach($ntransition->getGroups() as $tuser) { + $notifier->toGroup($user, $tuser->getGroup(), $subject, $message, $params); + } + } + } + + if($settings->_enableNotificationAppRev) { + /* Reviewers and approvers will be informed about the new document */ + if($reviewers['i'] || $reviewers['g']) { + $subject = "review_request_email_subject"; + $message = "review_request_email_body"; + $params = array(); + $params['name'] = $document->getName(); + $params['folder_path'] = $folder->getFolderPathPlain(); + $params['version'] = 1; + $params['comment'] = ''; + $params['username'] = $user->getFullName(); + $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['sitename'] = $settings->_siteName; + $params['http_root'] = $settings->_httpRoot; + + foreach($reviewers['i'] as $reviewerid) { + $notifier->toIndividual($user, $dms->getUser($reviewerid), $subject, $message, $params); + } + foreach($reviewers['g'] as $reviewergrpid) { + $notifier->toGroup($user, $dms->getGroup($reviewergrpid), $subject, $message, $params); + } + } + + elseif($approvers['i'] || $approvers['g']) { + $subject = "approval_request_email_subject"; + $message = "approval_request_email_body"; + $params = array(); + $params['name'] = $document->getName(); + $params['folder_path'] = $folder->getFolderPathPlain(); + $params['version'] = 1; + $params['comment'] = ''; + $params['username'] = $user->getFullName(); + $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['sitename'] = $settings->_siteName; + $params['http_root'] = $settings->_httpRoot; + + foreach($approvers['i'] as $approverid) { + $notifier->toIndividual($user, $dms->getUser($approverid), $subject, $message, $params); + } + foreach($approvers['g'] as $approvergrpid) { + $notifier->toGroup($user, $dms->getGroup($approvergrpid), $subject, $message, $params); + } + } + } + } } header('Content-Type: application/json'); diff --git a/op/op.ApproveDocument.php b/op/op.ApproveDocument.php index d99e52ba3..eaceec753 100644 --- a/op/op.ApproveDocument.php +++ b/op/op.ApproveDocument.php @@ -181,7 +181,7 @@ if ($_POST["approvalStatus"]==-1){ $params = array(); $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); - $params['status'] = getOverallStatusText($status); + $params['status'] = getOverallStatusText(S_REJECTED); $params['comment'] = $document->getComment(); $params['username'] = $user->getFullName(); $params['sitename'] = $settings->_siteName; @@ -194,8 +194,13 @@ if ($_POST["approvalStatus"]==-1){ } } - // TODO: if user os not owner send notification to owner - + if(isset($GLOBALS['SEEDDMS_HOOKS']['approveDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['approveDocument'] as $hookObj) { + if (method_exists($hookObj, 'postApproveDocument')) { + $hookObj->postApproveDocument(null, $content, S_REJECTED); + } + } + } } }else{ @@ -241,7 +246,13 @@ if ($_POST["approvalStatus"]==-1){ } } - // TODO: if user os not owner send notification to owner + if(isset($GLOBALS['SEEDDMS_HOOKS']['approveDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['approveDocument'] as $hookObj) { + if (method_exists($hookObj, 'postApproveDocument')) { + $hookObj->postApproveDocument(null, $content, S_RELEASED); + } + } + } } } } diff --git a/op/op.EditDocument.php b/op/op.EditDocument.php index 9912b85bc..d46602413 100644 --- a/op/op.EditDocument.php +++ b/op/op.EditDocument.php @@ -141,17 +141,42 @@ if (($oldcomment = $document->getComment()) != $comment) { } } -$expires = false; -if (!isset($_POST["expires"]) || $_POST["expires"] != "false") { - if(isset($_POST["expdate"]) && $_POST["expdate"]) { - $tmp = explode('-', $_POST["expdate"]); - $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); - } else { - $expires = mktime(0,0,0, $_POST["expmonth"], $_POST["expday"], $_POST["expyear"]); - } +switch($_POST["presetexpdate"]) { +case "date": + $tmp = explode('-', $_POST["expdate"]); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + break; +case "1w": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2]+7, $tmp[0]); + break; +case "1m": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1]+1, $tmp[2], $tmp[0]); + break; +case "1y": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]+1); + break; +case "2y": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]+2); + break; +case "never": +default: + $expires = null; + break; } if ($expires != $document->getExpires()) { + if(isset($GLOBALS['SEEDDMS_HOOKS']['editDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['editDocument'] as $hookObj) { + if (method_exists($hookObj, 'preSetExpires')) { + $hookObj->preSetExpires(null, array('document'=>$document, 'expires'=>&$expires)); + } + } + } + if($document->setExpires($expires)) { if($notifier) { $notifyList = $document->getNotifyList(); @@ -180,16 +205,43 @@ if ($expires != $document->getExpires()) { } else { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); } + + $document->verifyLastestContentExpriry(); + + if(isset($GLOBALS['SEEDDMS_HOOKS']['editDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['editDocument'] as $hookObj) { + if (method_exists($hookObj, 'postSetExpires')) { + $hookObj->postSetExpires(null, array('document'=>$document, 'expires'=>$expires)); + } + } + } } if (($oldkeywords = $document->getKeywords()) != $keywords) { + if(isset($GLOBALS['SEEDDMS_HOOKS']['editDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['editDocument'] as $hookObj) { + if (method_exists($hookObj, 'preSetKeywords')) { + $hookObj->preSetKeywords(null, array('document'=>$document, 'keywords'=>&$keywords, 'oldkeywords'=>&$oldkeywords)); + } + } + } + if($document->setKeywords($keywords)) { } else { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); } + + if(isset($GLOBALS['SEEDDMS_HOOKS']['editDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['editDocument'] as $hookObj) { + if (method_exists($hookObj, 'postSetKeywords')) { + $hookObj->postSetKeywords(null, array('document'=>$document, 'keywords'=>&$keywords, 'oldkeywords'=>&$oldkeywords)); + } + } + } } +$oldcategories = $document->getCategories(); if($categories) { $categoriesarr = array(); foreach($categories as $catid) { @@ -198,23 +250,50 @@ if($categories) { } } - $oldcategories = $document->getCategories(); $oldcatsids = array(); foreach($oldcategories as $oldcategory) $oldcatsids[] = $oldcategory->getID(); if (count($categoriesarr) != count($oldcategories) || array_diff($categories, $oldcatsids)) { + if(isset($GLOBALS['SEEDDMS_HOOKS']['editDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['editDocument'] as $hookObj) { + if (method_exists($hookObj, 'preSetCategories')) { + $hookObj->preSetCategories(null, array('document'=>$document, 'categories'=>&$categoriesarr, 'oldcategories'=>&$oldcategories)); + } + } + } if($document->setCategories($categoriesarr)) { } else { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); } + if(isset($GLOBALS['SEEDDMS_HOOKS']['editDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['editDocument'] as $hookObj) { + if (method_exists($hookObj, 'postSetCategories')) { + $hookObj->postSetCategories(null, array('document'=>$document, 'categories'=>&$categoriesarr, 'oldcategories'=>&$oldcategories)); + } + } + } + } +} elseif($oldcategories) { + if(isset($GLOBALS['SEEDDMS_HOOKS']['editDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['editDocument'] as $hookObj) { + if (method_exists($hookObj, 'preSetCategories')) { + $hookObj->preSetCategories(null, array('document'=>$document, 'categories'=>array(), 'oldcategories'=>&$oldcategories)); + } + } } -} else { if($document->setCategories(array())) { } else { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); } + if(isset($GLOBALS['SEEDDMS_HOOKS']['editDocument'])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['editDocument'] as $hookObj) { + if (method_exists($hookObj, 'postSetCategories')) { + $hookObj->postSetCategories(null, array('document'=>$document, 'categories'=>array(), 'oldcategories'=>&$oldcategories)); + } + } + } } $oldattributes = $document->getAttributes(); diff --git a/op/op.RemoveVersion.php b/op/op.RemoveVersion.php index b528ec273..f2d25bc75 100644 --- a/op/op.RemoveVersion.php +++ b/op/op.RemoveVersion.php @@ -158,23 +158,6 @@ else { $eU = $version->_document->_dms->getGroup($eID); $grouprecipients[] = $eU; } -/* - $subject = "###SITENAME###: ".$document->getName().", v.".$version->_version." - ".getMLText("version_deleted_email"); - $message = getMLText("version_deleted_email")."\r\n"; - $message .= - getMLText("document").": "User.$document->getName()."\r\n". - getMLText("version").": ".$version->_version."\r\n". - getMLText("comment").": ".$version->getComment()."\r\n". - getMLText("user").": ".$user->getFullName()." <". $user->getEmail() ."> "; - - $notifier->toList($user, $recipients, $subject, $message); - - // Send notification to subscribers. - $notifier->toList($user, $nl["users"], $subject, $message); - foreach ($nl["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message); - } -*/ $subject = "version_deleted_email_subject"; $message = "version_deleted_email_body"; diff --git a/op/op.SetExpires.php b/op/op.SetExpires.php index dbb80b021..a1dad52b1 100644 --- a/op/op.SetExpires.php +++ b/op/op.SetExpires.php @@ -43,20 +43,41 @@ if ($document->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied")); } -$expires = false; -if (!isset($_POST["expires"]) || $_POST["expires"] != "false") { - if(isset($_POST["expdate"]) && $_POST["expdate"]) { - $tmp = explode('-', $_POST["expdate"]); - $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); - } else { - $expires = mktime(0,0,0, $_POST["expmonth"], $_POST["expday"], $_POST["expyear"]); - } +if (!isset($_POST["presetexpdate"]) || $_POST["presetexpdate"] == "") { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_expiration_date")); +} + +switch($_POST["presetexpdate"]) { +case "date": + $tmp = explode('-', $_POST["expdate"]); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + break; +case "1w": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2]+7, $tmp[0]); + break; +case "1m": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1]+1, $tmp[2], $tmp[0]); + break; +case "1y": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]+1); + break; +case "2y": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]+2); + break; +case "never": +default: + $expires = null; + break; } if(isset($GLOBALS['SEEDDMS_HOOKS']['setExpires'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['setExpires'] as $hookObj) { if (method_exists($hookObj, 'preSetExpires')) { - $hookObj->preSetExpires(array('document'=>$document, 'expires'=>&$expires)); + $hookObj->preSetExpires(null, array('document'=>$document, 'expires'=>&$expires)); } } } @@ -70,7 +91,7 @@ $document->verifyLastestContentExpriry(); if(isset($GLOBALS['SEEDDMS_HOOKS']['setExpires'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['setExpires'] as $hookObj) { if (method_exists($hookObj, 'postSetExpires')) { - $hookObj->postSetExpires(array('document'=>$document, 'expires'=>$expires)); + $hookObj->postSetExpires(null, array('document'=>$document, 'expires'=>$expires)); } } } diff --git a/op/op.Settings.php b/op/op.Settings.php index e45084733..169845420 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -81,8 +81,11 @@ if ($action == "saveSettings") $settings->_fullSearchEngine = $_POST["fullSearchEngine"]; $settings->_defaultSearchMethod = $_POST["defaultSearchMethod"]; $settings->_showSingleSearchHit = getBoolValue("showSingleSearchHit"); + $settings->_enableSessionList = getBoolValue("enableSessionList"); $settings->_enableClipboard = getBoolValue("enableClipboard"); + $settings->_enableMenuTasks = getBoolValue("enableMenuTasks"); $settings->_enableDropUpload = getBoolValue("enableDropUpload"); + $settings->_enableMultiUpload = getBoolValue("enableMultiUpload"); $settings->_enableFolderTree = getBoolValue("enableFolderTree"); $settings->_enableRecursiveCount = getBoolValue("enableRecursiveCount"); $settings->_maxRecursiveCount = intval($_POST["maxRecursiveCount"]); @@ -189,7 +192,7 @@ if ($action == "saveSettings") // SETTINGS - ADVANCED - INDEX CMD $settings->_converters['fulltext'] = $_POST["converters"]; - $newmimetype = preg_replace('#[^A-Za-z0-9_/+.-*]+#', '', $_POST["converters_newmimetype"]); + $newmimetype = preg_replace('#[^A-Za-z0-9_/+.*-]+#', '', $_POST["converters_newmimetype"]); if($newmimetype && trim($_POST["converters_newcmd"])) { $settings->_converters['fulltext'][$newmimetype] = trim($_POST["converters_newcmd"]); } diff --git a/op/op.TriggerWorkflow.php b/op/op.TriggerWorkflow.php index 1b183ada5..6d59f8ff6 100644 --- a/op/op.TriggerWorkflow.php +++ b/op/op.TriggerWorkflow.php @@ -71,7 +71,7 @@ $workflow = $transition->getWorkflow(); if(isset($GLOBALS['SEEDDMS_HOOKS']['triggerWorkflowTransition'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['triggerWorkflowTransition'] as $hookObj) { if (method_exists($hookObj, 'preTriggerWorkflowTransition')) { - $hookObj->preTriggerWorkflowTransition(array('version'=>$version, 'transition'=>$transition, 'comment'=>$_POST["comment"])); + $hookObj->preTriggerWorkflowTransition(null, array('version'=>$version, 'transition'=>$transition, 'comment'=>$_POST["comment"])); } } } @@ -130,7 +130,7 @@ if($version->triggerWorkflowTransition($user, $transition, $_POST["comment"])) { if(isset($GLOBALS['SEEDDMS_HOOKS']['triggerWorkflowTransition'])) { foreach($GLOBALS['SEEDDMS_HOOKS']['triggerWorkflowTransition'] as $hookObj) { if (method_exists($hookObj, 'postTriggerWorkflowTransition')) { - $hookObj->postTriggerWorkflowTransition(array('version'=>$version, 'transition'=>$transition, 'comment'=>$_POST["comment"])); + $hookObj->postTriggerWorkflowTransition(null, array('version'=>$version, 'transition'=>$transition, 'comment'=>$_POST["comment"])); } } } diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php index 25547ef9c..8c6fb4c39 100644 --- a/op/op.UpdateDocument.php +++ b/op/op.UpdateDocument.php @@ -24,8 +24,17 @@ include("../inc/inc.Language.php"); include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); include("../inc/inc.DBInit.php"); -include("../inc/inc.ClassUI.php"); include("../inc/inc.Authentication.php"); +include("../inc/inc.ClassUI.php"); +include("../inc/inc.ClassController.php"); + +$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); +$controller = Controller::factory($tmp[1]); + +/* Check if the form data comes from a trusted request */ +if(!checkFormKey('updatedocument')) { + 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")); @@ -58,11 +67,12 @@ if ($document->isLocked()) { else $document->setLocked(false); } -if(isset($_POST['fineuploaderuuids']) && $_POST['fineuploaderuuids']) { - $uuids = explode(';', $_POST['fineuploaderuuids']); - $names = explode(';', $_POST['fineuploadernames']); +$prefix = 'userfile'; +if(isset($_POST[$prefix.'-fine-uploader-uuids']) && $_POST[$prefix.'-fine-uploader-uuids']) { + $uuids = explode(';', $_POST[$prefix.'-fine-uploader-uuids']); + $names = explode(';', $_POST[$prefix.'-fine-uploader-names']); $uuid = $uuids[0]; - $fullfile = $settings->_stagingDir.'/'.basename($uuid); + $fullfile = $settings->_stagingDir.'/'.utf8_basename($uuid); if(file_exists($fullfile)) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $fullfile); @@ -74,12 +84,7 @@ if(isset($_POST['fineuploaderuuids']) && $_POST['fineuploaderuuids']) { } } -if(isset($_POST["comment"])) - $comment = $_POST["comment"]; -else - $comment = ""; - -if ($_FILES['userfile']['error'] == 0) { +if (isset($_FILES['userfile']) && $_FILES['userfile']['error'] == 0) { // if(!is_uploaded_file($_FILES["userfile"]["tmp_name"])) // UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")."lsajdflk"); @@ -121,6 +126,46 @@ if ($_FILES['userfile']['error'] == 0) { $fileType = ".".pathinfo($userfilename, PATHINFO_EXTENSION); +if($settings->_enableFullSearch) { + $index = $indexconf['Indexer']::open($settings->_luceneDir); + $indexconf['Indexer']::init($settings->_stopWordsFile); +} else { + $index = null; +} + +if(isset($_POST["comment"])) + $comment = $_POST["comment"]; +else + $comment = ""; + +$oldexpires = $document->getExpires(); +switch($_POST["presetexpdate"]) { +case "date": + $tmp = explode('-', $_POST["expdate"]); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); + break; +case "1w": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2]+7, $tmp[0]); + break; +case "1m": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1]+1, $tmp[2], $tmp[0]); + break; +case "1y": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]+1); + break; +case "2y": + $tmp = explode('-', date('Y-m-d')); + $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]+2); + break; +case "never": +default: + $expires = null; + break; +} + // Get the list of reviewers and approvers for this document. $reviewers = array(); $approvers = array(); @@ -220,8 +265,8 @@ if ($_FILES['userfile']['error'] == 0) { } } - if(isset($_POST["attributes"]) && $_POST["attributes"]) { - $attributes = $_POST["attributes"]; + if(isset($_POST["attributes_version"]) && $_POST["attributes_version"]) { + $attributes = $_POST["attributes_version"]; foreach($attributes as $attrdefid=>$attribute) { $attrdef = $dms->getAttributeDefinition($attrdefid); if($attribute) { @@ -237,48 +282,25 @@ if ($_FILES['userfile']['error'] == 0) { $attributes = array(); } - if(isset($GLOBALS['SEEDDMS_HOOKS']['updateDocument'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['updateDocument'] as $hookObj) { - if (method_exists($hookObj, 'preUpdateDocument')) { - $hookObj->preUpdateDocument(array('name'=>&$name, 'comment'=>&$comment)); - } - } - } - - $filesize = SeedDMS_Core_File::fileSize($userfiletmp); - $contentResult=$document->addContent($comment, $user, $userfiletmp, basename($userfilename), $fileType, $userfiletype, $reviewers, $approvers, $version=0, $attributes, $workflow); - if (is_bool($contentResult) && !$contentResult) { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); - } - else { - if(isset($GLOBALS['SEEDDMS_HOOKS']['updateDocument'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['updateDocument'] as $hookObj) { - if (method_exists($hookObj, 'postUpdateDocument')) { - $hookObj->postUpdateDocument($document); - } - } - } - if($settings->_enableFullSearch) { - $index = $indexconf['Indexer']::open($settings->_luceneDir); - if($index) { - $lucenesearch = new $indexconf['Search']($index); - if($hit = $lucenesearch->getDocument((int) $document->getId())) { - $index->delete($hit->id); - } - $indexconf['Indexer']::init($settings->_stopWordsFile); - $idoc = new $indexconf['IndexedDocument']($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null, !($filesize < $settings->_maxSizeForFullText)); - if(isset($GLOBALS['SEEDDMS_HOOKS']['updateDocument'])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['updateDocument'] as $hookObj) { - if (method_exists($hookObj, 'preIndexDocument')) { - $hookObj->preIndexDocument(null, $document, $idoc); - } - } - } - $index->addDocument($idoc); - $index->commit(); - } - } + $controller->setParam('folder', $folder); + $controller->setParam('document', $document); + $controller->setParam('index', $index); + $controller->setParam('indexconf', $indexconf); + $controller->setParam('comment', $comment); + if($oldexpires != $expires) + $controller->setParam('expires', $expires); + $controller->setParam('userfiletmp', $userfiletmp); + $controller->setParam('userfilename', $userfilename); + $controller->setParam('filetype', $fileType); + $controller->setParam('userfiletype', $userfiletype); + $controller->setParam('reviewers', $reviewers); + $controller->setParam('approvers', $approvers); + $controller->setParam('attributes', $attributes); + $controller->setParam('workflow', $workflow); + if(!$content = $controller->run()) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText($controller->getErrorMsg())); + } else { // Send notification to subscribers. if ($notifier){ $notifyList = $document->getNotifyList(); @@ -291,7 +313,7 @@ if ($_FILES['userfile']['error'] == 0) { $params['folder_path'] = $folder->getFolderPathPlain(); $params['username'] = $user->getFullName(); $params['comment'] = $document->getComment(); - $params['version_comment'] = $contentResult->getContent()->getComment(); + $params['version_comment'] = $content->getComment(); $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; $params['http_root'] = $settings->_httpRoot; @@ -308,7 +330,7 @@ if ($_FILES['userfile']['error'] == 0) { $message = "request_workflow_action_email_body"; $params = array(); $params['name'] = $document->getName(); - $params['version'] = $contentResult->getContent()->getVersion(); + $params['version'] = $content->getVersion(); $params['workflow'] = $workflow->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); $params['current_state'] = $workflow->getInitState()->getName(); @@ -335,8 +357,8 @@ if ($_FILES['userfile']['error'] == 0) { $params = array(); $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); - $params['version'] = $contentResult->getContent()->getVersion(); - $params['comment'] = $contentResult->getContent()->getComment(); + $params['version'] = $content->getVersion(); + $params['comment'] = $content->getComment(); $params['username'] = $user->getFullName(); $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; @@ -356,8 +378,8 @@ if ($_FILES['userfile']['error'] == 0) { $params = array(); $params['name'] = $document->getName(); $params['folder_path'] = $folder->getFolderPathPlain(); - $params['version'] = $contentResult->getContent()->getVersion(); - $params['comment'] = $contentResult->getContent()->getComment(); + $params['version'] = $content->getVersion(); + $params['comment'] = $content->getComment(); $params['username'] = $user->getFullName(); $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); $params['sitename'] = $settings->_siteName; @@ -371,43 +393,25 @@ if ($_FILES['userfile']['error'] == 0) { } } } - } - $expires = false; - if (!isset($_POST['expires']) || $_POST["expires"] != "false") { - if($_POST["expdate"]) { - $tmp = explode('-', $_POST["expdate"]); - $expires = mktime(0,0,0, $tmp[1], $tmp[2], $tmp[0]); - } else { - $expires = mktime(0,0,0, $_POST["expmonth"], $_POST["expday"], $_POST["expyear"]); - } - } - - if ($expires) { - if($document->setExpires($expires)) { - if($notifier) { - $notifyList = $document->getNotifyList(); - $folder = $document->getFolder(); - - // Send notification to subscribers. - $subject = "expiry_changed_email_subject"; - $message = "expiry_changed_email_body"; - $params = array(); - $params['name'] = $document->getName(); - $params['folder_path'] = $folder->getFolderPathPlain(); - $params['username'] = $user->getFullName(); - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $params['sitename'] = $settings->_siteName; - $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); - foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); - } + if($oldexpires != $document->getExpires()) { + // Send notification to subscribers. + $subject = "expiry_changed_email_subject"; + $message = "expiry_changed_email_body"; + $params = array(); + $params['name'] = $document->getName(); + $params['folder_path'] = $folder->getFolderPathPlain(); + $params['username'] = $user->getFullName(); + $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['sitename'] = $settings->_siteName; + $params['http_root'] = $settings->_httpRoot; + $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + foreach ($notifyList["groups"] as $grp) { + $notifier->toGroup($user, $grp, $subject, $message, $params); } - } else { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); } } + if($settings->_removeFromDropFolder) { if(file_exists($userfiletmp)) { unlink($userfiletmp); diff --git a/out/out.AddDocument.php b/out/out.AddDocument.php index d65cd360f..4b545da02 100644 --- a/out/out.AddDocument.php +++ b/out/out.AddDocument.php @@ -54,6 +54,7 @@ if($view) { $view->setParam('folder', $folder); $view->setParam('strictformcheck', $settings->_strictFormCheck); $view->setParam('enablelargefileupload', $settings->_enableLargeFileUpload); + $view->setParam('enablemultiupload', $settings->_enableMultiUpload); $view->setParam('enableadminrevapp', $settings->_enableAdminRevApp); $view->setParam('enableownerrevapp', $settings->_enableOwnerRevApp); $view->setParam('enableselfrevapp', $settings->_enableSelfRevApp); diff --git a/out/out.Clipboard.php b/out/out.Clipboard.php new file mode 100644 index 000000000..45c2e21fa --- /dev/null +++ b/out/out.Clipboard.php @@ -0,0 +1,42 @@ +$dms, 'user'=>$user)); + +if($view) { + $view->setParam('previewWidthList', $settings->_previewWidthList); + $view->setParam('timeout', $settings->_cmdTimeout); + $view($_GET); + exit; +} + +?> diff --git a/out/out.Session.php b/out/out.Session.php new file mode 100644 index 000000000..4c07bc48c --- /dev/null +++ b/out/out.Session.php @@ -0,0 +1,40 @@ +$dms, 'user'=>$user)); + +if($view) { + $view($_GET); + exit; +} + +?> diff --git a/out/out.Tasks.php b/out/out.Tasks.php new file mode 100644 index 000000000..0df3d3763 --- /dev/null +++ b/out/out.Tasks.php @@ -0,0 +1,41 @@ +$dms, 'user'=>$user)); + +if($view) { + $view->setParam('previewWidthList', $settings->_previewWidthList); + $view->setParam('timeout', $settings->_cmdTimeout); + $view($_GET); + exit; +} + +?> diff --git a/styles/bootstrap/application.css b/styles/bootstrap/application.css index 0f2a2d9e0..f4acf29d6 100644 --- a/styles/bootstrap/application.css +++ b/styles/bootstrap/application.css @@ -148,34 +148,6 @@ div.help h3 { margin-right: auto; } -#timeline { - font-size: 12px; - line-height: 14px; -} -div.timeline-event-content { - margin: 3px 5px; -} -div.timeline-frame { - border-radius: 4px; - border-color: #e3e3e3; -} - -div.status_change_2 { - background-color: #DAF6D5; - border-color: #AAF897; -} - -div.status_change_-1 { - background-color: #F6D5D5; - border-color: #F89797; -} - -div.timeline-event-selected { - background-color: #fff785; - border-color: #ffc200; - z-index: 999; -} - div.splash { display: none; } diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index 731782192..c4968940f 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -165,8 +165,10 @@ $(document).ready( function() { { command: 'addtoclipboard', type: type, id: id }, function(data) { if(data.success) { - $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') - $("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') +// $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') + $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') + //$("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') + $("#menu-clipboard").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') noty({ text: attr_msg, type: 'success', @@ -200,8 +202,10 @@ $(document).ready( function() { { command: 'removefromclipboard', type: type, id: id }, function(data) { if(data.success) { - $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') - $("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') +// $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') + $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') + //$("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') + $("#menu-clipboard").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') noty({ text: attr_msg, type: 'success', @@ -234,7 +238,8 @@ $(document).ready( function() { { command: 'tooglelockdocument', id: id }, function(data) { if(data.success) { - $("#table-row-document-"+id).html('Loading').load('../op/op.Ajax.php?command=view&view=documentlistrow&id='+id) + //$("#table-row-document-"+id).html('Loading').load('../op/op.Ajax.php?command=view&view=documentlistrow&id='+id) + $("#table-row-document-"+id).html('Loading').load('../out/out.ViewDocument.php?action=documentlistitem&documentid='+id) noty({ text: attr_msg, type: 'success', @@ -342,7 +347,7 @@ $(document).ready( function() { input.trigger('fileselect', [numFiles, label]); }); - $(document).on('fileselect', '#upload-file .btn-file :file', function(event, numFiles, label) { + $(document).on('fileselect', '.upload-file .btn-file :file', function(event, numFiles, label) { var input = $(this).parents('.input-append').find(':text'), log = numFiles > 1 ? numFiles + ' files selected' : label; @@ -357,16 +362,21 @@ $(document).ready( function() { var element = $(this); var url = ''; var href = element.data('href'); + var base = element.data('base'); + if(typeof base == 'undefined') + base = ''; var view = element.data('view'); var action = element.data('action'); var query = element.data('query'); if(view && action) { - url = "out."+view+".php?action="+action; + url = seeddms_webroot+base+"out/out."+view+".php?action="+action; if(query) { url += "&"+query; } } else url = href; + if(!element.data('no-spinner')) + element.prepend('
'); $.get(url, function(data) { element.html(data); // $(".chzn-select").chosen(); @@ -389,10 +399,13 @@ $(document).ready( function() { var element = $(this); var url = ''; var href = element.data('href'); + var base = element.data('base'); + if(typeof base == 'undefined') + base = ''; var view = element.data('view'); var action = element.data('action'); if(view && action) - url = "out."+view+".php?action="+action; + url = seeddms_webroot+base+"out/out."+view+".php?action="+action; else url = href; if(typeof param1 === 'object') { @@ -450,8 +463,10 @@ $(document).ready( function() { success: function(data){ if(data.success) { if(element.data('param1') == 'command=clearclipboard') { - $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') - $("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') +// $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') + $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') + //$("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') + $("#menu-clipboard").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') } noty({ text: data.message, @@ -493,8 +508,10 @@ function onAddClipboard(ev) { /* {{{ */ { command: 'addtoclipboard', type: source_type, id: source_id }, function(data) { if(data.success) { - $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') - $("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') +// $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') + $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') + //$("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') + $("#menu-clipboard").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') noty({ text: data.message, type: 'success', @@ -1004,3 +1021,25 @@ $(document).ready(function() { /* {{{ */ $(this).parent().hide(); }); }); /* }}} */ + + var approval_count, review_count, receipt_count, revision_count; + var checkTasks = function() { + $.ajax({url: '../out/out.Tasks.php', + type: 'GET', + dataType: "json", + data: {action: 'mytasks'}, + success: function(data) { + if(data) { + if(approval_count != data.data.approval.length || + review_count != data.data.review.length) { + $("#menu-tasks > ul > li").html('Loading').hide().load('../out/out.Tasks.php?action=menutasks').fadeIn('500') + approval_count = data.data.approval.length; + review_count = data.data.review.length; + } + } + }, + timeout: 3000 + }); + timeOutId = setTimeout(checkTasks, 30000); + } + diff --git a/utils/xmldump.php b/utils/xmldump.php index 618e8c68d..192c85cae 100644 --- a/utils/xmldump.php +++ b/utils/xmldump.php @@ -412,6 +412,8 @@ function tree($folder, $parent=null, $indent='', $skipcurrent=false) { /* {{{ */ echo $indent." ".$file->getMimeType()."\n"; echo $indent." ".date('Y-m-d H:i:s', $file->getDate())."\n"; echo $indent." ".wrapWithCData($file->getFileType())."\n"; + echo $indent." ".$file->getVersion()."\n"; + echo $indent." ".($file->isPublic() ? 1 : 0)."\n"; echo $indent." ".$owner->getId()."\n"; echo $indent." ".wrapWithCData($file->getComment())."\n"; echo $indent." ".wrapWithCData($file->getOriginalFileName())."\n"; diff --git a/utils/xmlimport.php b/utils/xmlimport.php index e5d8924b1..703782300 100644 --- a/utils/xmlimport.php +++ b/utils/xmlimport.php @@ -771,7 +771,9 @@ function insert_document($document) { /* {{{ */ $filename, $file['attributes']['orgfilename'], $file['attributes']['filetype'], - $file['attributes']['mimetype'] + $file['attributes']['mimetype'], + $file['attributes']['version'], + $file['attributes']['public'] ); unlink($filename); } @@ -1692,7 +1694,6 @@ require_once("SeedDMS/Core.php"); $db = new SeedDMS_Core_DatabaseAccess($settings->_dbDriver, $settings->_dbHostname, $settings->_dbUser, $settings->_dbPass, $settings->_dbDatabase); $db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\""); -$db->_debug = 1; $dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir); if(!$settings->_doNotCheckDBVersion && !$dms->checkVersion()) { diff --git a/views/bootstrap/class.AddDocument.php b/views/bootstrap/class.AddDocument.php index 4348e4823..3c67814e7 100644 --- a/views/bootstrap/class.AddDocument.php +++ b/views/bootstrap/class.AddDocument.php @@ -36,16 +36,19 @@ class SeedDMS_View_AddDocument extends SeedDMS_Bootstrap_Style { $partitionsize = $this->params['partitionsize']; $maxuploadsize = $this->params['maxuploadsize']; $enablelargefileupload = $this->params['enablelargefileupload']; + $enablemultiupload = $this->params['enablemultiupload']; header('Content-Type: application/javascript; charset=UTF-8'); - if($enablelargefileupload) - $this->printFineUploaderJs('../op/op.UploadChunks.php', $partitionsize, $maxuploadsize); + if($enablelargefileupload) { + $this->printFineUploaderJs('../op/op.UploadChunks.php', $partitionsize, $maxuploadsize, $enablemultiupload); + } ?> $(document).ready(function() { $('#new-file').click(function(event) { - $("#upload-file").clone().appendTo("#upload-files").removeAttr("id").children('div').children('input').val(''); + tttttt = $("#userfile-upload-file").clone().appendTo("#userfile-upload-files").removeAttr("id"); + tttttt.children('div').children('input').val(''); + tttttt.children('div').children('span').children('input').val(''); }); - jQuery.validator.addMethod("alternatives", function(value, element, params) { if(value == '' && params.val() == '') return false; @@ -84,7 +87,11 @@ $(document).ready(function() { if($enablelargefileupload) { ?> submitHandler: function(form) { - manualuploader.uploadStoredFiles(); + /* fileuploader may not have any files if drop folder is used */ + if(userfileuploader.getUploads().length) + userfileuploader.uploadStoredFiles(); + else + form.submit(); }, - fineuploaderuuids: { - fineuploader: [ manualuploader, $('#dropfolderfileform1') ] + 'userfile-fine-uploader-uuids': { + fineuploader: [ userfileuploader, $('#dropfolderfileform1') ] } printKeywordChooserJs("form1"); @@ -135,6 +148,7 @@ $(document).ready(function() { $user = $this->params['user']; $folder = $this->params['folder']; $enablelargefileupload = $this->params['enablelargefileupload']; + $enablemultiupload = $this->params['enablemultiupload']; $enableadminrevapp = $this->params['enableadminrevapp']; $enableownerrevapp = $this->params['enableownerrevapp']; $enableselfrevapp = $this->params['enableselfrevapp']; @@ -158,9 +172,6 @@ $(document).ready(function() { $this->pageNavigation($this->getFolderPathHTML($folder, true), "view_folder", $folder); $msg = getMLText("max_upload_size").": ".ini_get( "upload_max_filesize"); - if(0 && $enablelargefileupload) { - $msg .= "

".sprintf(getMLText('link_alt_updatedocument'), "out.AddMultiDocument.php?folderid=".$folderid."&showtree=".showtree())."

"; - } $this->warningMsg($msg); $this->contentHeading(getMLText("add_document")); $this->contentContainerStart(); @@ -209,6 +220,37 @@ $(document).ready(function() { : printSequenceChooser($folder->getDocuments('s')); if($orderby != 's') echo "
".getMLText('order_by_sequence_off'); ?> + + + : + + + + + > + : + + + + + + + + isAdmin()) { ?> : @@ -231,12 +273,14 @@ $(document).ready(function() { $attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_document, SeedDMS_Core_AttributeDefinition::objtype_all)); if($attrdefs) { foreach($attrdefs as $attrdef) { - $arr = $this->callHook('editDocumentAttribute', null, $attrdef); + $arr = $this->callHook('addDocumentAttribute', null, $attrdef); if(is_array($arr)) { - echo ""; - echo "".$arr[0].":"; - echo "".$arr[1].""; - echo ""; + if($arr) { + echo ""; + echo "".$arr[0].":"; + echo "".$arr[1].""; + echo ""; + } } else { ?> @@ -247,26 +291,16 @@ $(document).ready(function() { } } } - if($presetexpiration) { - if(!($expts = strtotime($presetexpiration))) - $expts = time(); - } else { - $expts = time(); + $arrs = $this->callHook('addDocumentAttributes', $folder); + if(is_array($arrs)) { + foreach($arrs as $arr) { + echo ""; + echo "".$arr[0].":"; + echo "".$arr[1].""; + echo ""; + } } ?> - - : - - - - -   - - - - contentSubHeading(getMLText("version_info")); ?> @@ -279,20 +313,16 @@ $(document).ready(function() { : - printFineUploaderHtml(); else { $this->printFileChooser('userfile[]', false); + if($enablemultiupload) { ?> @@ -312,7 +342,7 @@ $(document).ready(function() { $attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_documentcontent, SeedDMS_Core_AttributeDefinition::objtype_all)); if($attrdefs) { foreach($attrdefs as $attrdef) { - $arr = $this->callHook('editDocumentAttribute', null, $attrdef); + $arr = $this->callHook('addDocumentContentAttribute', null, $attrdef); if(is_array($arr)) { echo ""; echo "".$arr[0].":"; @@ -328,6 +358,17 @@ $(document).ready(function() { } } } + + $arrs = $this->callHook('addDocumentContentAttributes', $folder); + if(is_array($arrs)) { + foreach($arrs as $arr) { + echo ""; + echo "".$arr[0].":"; + echo "".$arr[1].""; + echo ""; + } + } + if($workflowmode == 'advanced') { ?> diff --git a/views/bootstrap/class.AddFile.php b/views/bootstrap/class.AddFile.php index 063daaf60..fc6298f14 100644 --- a/views/bootstrap/class.AddFile.php +++ b/views/bootstrap/class.AddFile.php @@ -146,7 +146,6 @@ $(document).ready( function() {
-
@@ -158,28 +157,39 @@ $(document).ready( function() { ?>
- - +
+ +
+
-
- -
+
- -
- - -
- "> +getAccessMode($user) >= M_READWRITE) { + print "
"; + print "
"; + print ""; + print "
"; + } +?> +
+ +
">
- contentContainerEnd(); diff --git a/views/bootstrap/class.AddSubFolder.php b/views/bootstrap/class.AddSubFolder.php index 105a1145c..05c7fb959 100644 --- a/views/bootstrap/class.AddSubFolder.php +++ b/views/bootstrap/class.AddSubFolder.php @@ -126,12 +126,22 @@ $(document).ready( function() { $attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_folder, SeedDMS_Core_AttributeDefinition::objtype_all)); if($attrdefs) { foreach($attrdefs as $attrdef) { + $arr = $this->callHook('addFolderAttribute', null, $attrdef); + if(is_array($arr)) { + if($arr) { + echo "
"; + echo " "; + echo "
".$arr[1]."
"; + echo "
"; + } + } else { ?>
printAttributeEditField($attrdef, '') ?>
diff --git a/views/bootstrap/class.AdminTools.php b/views/bootstrap/class.AdminTools.php index cbf2f2033..3117a204c 100644 --- a/views/bootstrap/class.AdminTools.php +++ b/views/bootstrap/class.AdminTools.php @@ -31,6 +31,14 @@ require_once("class.Bootstrap.php"); */ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { + static function wrapRow($content) { /* {{{ */ + return '
'.$content.'
'; + } /* }}} */ + + static function rowButton($link, $icon, $label) { /* {{{ */ + return '
'.getMLText($label).'
'; + } /* }}} */ + function show() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; @@ -45,9 +53,11 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { $this->contentContainerStart(); ?>
+ callHook('beforeRows'); ?>


+ callHook('endOfRow', 1); ?>

@@ -55,11 +65,13 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { if ($logfileenable) echo "
".getMLText("log_management")."
"; ?> + callHook('endOfRow', 2); ?>



+ callHook('endOfRow', 3); ?>
params['workflowmode'] == 'advanced') { @@ -68,6 +80,7 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style {


+ callHook('endOfRow', 4); ?>



+ callHook('endOfRow', 5); ?>



+ callHook('endOfRow', 6); ?>



+ callHook('endOfRow', 7); ?>
+ callHook('afterRows'); ?> contentContainerEnd(); diff --git a/views/bootstrap/class.AttributeMgr.php b/views/bootstrap/class.AttributeMgr.php index 51b877993..5b2454730 100644 --- a/views/bootstrap/class.AttributeMgr.php +++ b/views/bootstrap/class.AttributeMgr.php @@ -90,8 +90,8 @@ $(document).ready( function() { $content .= ""; /* Check if value is in value set */ if($selattrdef->getValueSet()) { - foreach($values as $v) { - if(!in_array($value, $selattrdef->getValueSetAsArray())) + foreach($value as $v) { + if(!in_array($v, $selattrdef->getValueSetAsArray())) $content .= getMLText("attribute_value_not_in_valueset"); } } diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index ca0e03af2..d8ed544b1 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -64,6 +64,12 @@ class SeedDMS_Bootstrap_Style extends SeedDMS_View_Common { header($csp . ": " . $csp_rules); } } + $hookObjs = $this->getHookObjects('SeedDMS_View_Bootstrap'); + foreach($hookObjs as $hookObj) { + if (method_exists($hookObj, 'startPage')) { + $hookObj->startPage($this); + } + } echo "\n"; echo "\n\n"; echo "\n"; @@ -81,7 +87,8 @@ class SeedDMS_Bootstrap_Style extends SeedDMS_View_Common { echo ''."\n"; if($this->extraheader['css']) echo $this->extraheader['css']; -// echo ''."\n"; + if(method_exists($this, 'css')) + echo ''."\n"; echo ''."\n"; if($this->extraheader['js']) @@ -113,6 +120,11 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $this->params['session']->clearSplashMsg(); echo "
".$flashmsg['msg']."
\n"; } + foreach($hookObjs as $hookObj) { + if (method_exists($hookObj, 'startBody')) { + $hookObj->startBody($this); + } + } } /* }}} */ function htmlAddHeader($head, $type='js') { /* {{{ */ @@ -132,7 +144,13 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo ''."\n"; echo ''."\n"; echo ''."\n"; + parse_str($_SERVER['QUERY_STRING'], $tmp); + $tmp['action'] = 'webrootjs'; + echo ''."\n"; echo ''."\n"; + if(isset($this->params['user']) && $this->params['user']) { + $this->addFooterJS('checkTasks();'); + } if($this->footerjs) { $jscode = "$(document).ready(function () {\n"; foreach($this->footerjs as $script) { @@ -146,7 +164,6 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if(is_dir($this->params['cachedir'].'/js')) { file_put_contents($this->params['cachedir'].'/js/'.$hashjs.'.js', $jscode); } - parse_str($_SERVER['QUERY_STRING'], $tmp); $tmp['action'] = 'footerjs'; $tmp['hash'] = $hashjs; echo ''."\n"; @@ -159,6 +176,12 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo "\n\n"; } /* }}} */ + function webrootjs() { /* {{{ */ + header('Content-Type: application/javascript'); + echo "var seeddms_absbaseprefix=\"".$this->params['absbaseprefix']."\";\n"; + echo "var seeddms_webroot=\"".$this->params['settings']->_httpRoot."\";\n"; + } /* }}} */ + function footerjs() { /* {{{ */ header('Content-Type: application/javascript'); if(file_exists($this->params['cachedir'].'/js/'.$_GET['hash'].'.js')) { @@ -226,45 +249,6 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo "\n"; } /* }}} */ - /** - * Returns the html needed for the clipboard list in the menu - * - * This function renders the clipboard in a way suitable to be - * used as a menu - * - * @param array $clipboard clipboard containing two arrays for both - * documents and folders. - * @return string html code - */ - function menuClipboard($clipboard) { /* {{{ */ - if ($this->params['user']->isGuest() || (count($clipboard['docs']) + count($clipboard['folders'])) == 0) { - return ''; - } - $content = ''; - $content .= " \n"; - return $content; - } /* }}} */ - function globalNavigation($folder=null) { /* {{{ */ $dms = $this->params['dms']; echo "
\n"; @@ -332,9 +316,25 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo " \n"; echo " \n"; + if($this->params['enablemenutasks']) { + echo "
"; + echo "
    \n"; + echo "
  • \n"; +// echo $this->menuTasks(array('review'=>array(), 'approval'=>array(), 'receipt'=>array(), 'revision'=>array())); + echo "
  • \n"; + echo "
\n"; + echo "
"; + //$this->addFooterJS('checkTasks();'); + } + + if($this->params['enablesessionlist']) { + echo "
"; + echo "
"; + echo "
"; + } if($this->params['enableclipboard']) { echo "
"; - echo $this->menuClipboard($this->params['session']->getClipboard()); + echo "
"; echo "
"; } @@ -886,14 +886,34 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } } /* }}} */ - function printFileChooser($varname='userfile', $multiple=false, $accept='') { /* {{{ */ -?> -
-
+ function getFileChooser($varname='userfile', $multiple=false, $accept='') { /* {{{ */ + $id = preg_replace('/[^A-Za-z]/', '', $varname); + $html = ' +
+
- > + '.getMLText("browse").'… + +
+
+
+'; + return $html; + } /* }}} */ + + function printFileChooser($varname='userfile', $multiple=false, $accept='') { /* {{{ */ + echo $this->getFileChooser($varname, $multiple, $accept); + return; + $id = preg_replace('/[^A-Za-z]/', '', $varname); +?> +
+
+
+ + + >
@@ -1098,7 +1118,7 @@ $(document).ready(function() { print "
\n"; print ""; print ""; - print "".getMLText("category")."…\n"; + print "".getMLText("category")."…\n"; print "
\n"; ?>