From db678e08da0c66a7c06b8d1d8a3f2ab57c914487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Neugebauer?= Date: Tue, 24 Oct 2017 11:10:41 +0200 Subject: [PATCH 001/296] =?UTF-8?q?Einf=C3=BCgen=20DocBlock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SeedDMS_Core/Core/inc.ClassAccess.php | 50 +++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassAccess.php b/SeedDMS_Core/Core/inc.ClassAccess.php index 560358451..3d355e21e 100644 --- a/SeedDMS_Core/Core/inc.ClassAccess.php +++ b/SeedDMS_Core/Core/inc.ClassAccess.php @@ -24,22 +24,47 @@ * @version Release: @package_version@ */ class SeedDMS_Core_UserAccess { /* {{{ */ + + /** + * @var SeedDMS_Core_User + */ var $_user; + + /** + * @var + */ var $_mode; + /** + * SeedDMS_Core_UserAccess constructor. + * @param $user + * @param $mode + */ function __construct($user, $mode) { $this->_user = $user; $this->_mode = $mode; } + /** + * @return int + */ function getUserID() { return $this->_user->getID(); } + /** + * @return mixed + */ function getMode() { return $this->_mode; } + /** + * @return bool + */ function isAdmin() { return ($this->_mode == SeedDMS_Core_User::role_admin); } + /** + * @return SeedDMS_Core_User + */ function getUser() { return $this->_user; } @@ -57,20 +82,41 @@ class SeedDMS_Core_UserAccess { /* {{{ */ * @version Release: @package_version@ */ class SeedDMS_Core_GroupAccess { /* {{{ */ + + /** + * @var SeedDMS_Core_Group + */ var $_group; + + /** + * @var + */ var $_mode; + /** + * SeedDMS_Core_GroupAccess constructor. + * @param $group + * @param $mode + */ function __construct($group, $mode) { $this->_group = $group; $this->_mode = $mode; } + /** + * @return int + */ function getGroupID() { return $this->_group->getID(); } + /** + * @return mixed + */ function getMode() { return $this->_mode; } + /** + * @return SeedDMS_Core_Group + */ function getGroup() { return $this->_group; } -} /* }}} */ -?> +} /* }}} */ \ No newline at end of file From b34b936b2479c535d18edda182fa67df0d30496c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Neugebauer?= Date: Tue, 24 Oct 2017 11:53:31 +0200 Subject: [PATCH 002/296] =?UTF-8?q?Einf=C3=BCgen=20DocBlock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SeedDMS_Core/Core/inc.ClassDMS.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 26a196243..626e3431e 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -74,7 +74,7 @@ require_once("inc.ClassAttribute.php"); */ class SeedDMS_Core_DMS { /** - * @var object $db reference to database object. This must be an instance + * @var SeedDMS_Core_DMS $db reference to database object. This must be an instance * of {@link SeedDMS_Core_DatabaseAccess}. * @access protected */ @@ -88,7 +88,7 @@ class SeedDMS_Core_DMS { protected $classnames; /** - * @var object $user reference to currently logged in user. This must be + * @var SeedDMS_Core_User $user reference to currently logged in user. This must be * an instance of {@link SeedDMS_Core_User}. This variable is currently not * used. It is set by {@link setUser}. * @access private @@ -214,7 +214,7 @@ class SeedDMS_Core_DMS { * The result of the function can be 0 which happens if the first element * of an indexed array matches. * - * @param object $object1 object to look for (needle) + * @param object $object object to look for (needle) * @param array $list list of objects (haystack) * @return boolean/integer index in array if object was found, otherwise false */ From 2ab5db0c6ddb99616f50cf08d14039e95b919978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Neugebauer?= Date: Tue, 24 Oct 2017 12:12:38 +0200 Subject: [PATCH 003/296] inc.ClassObject.php --- SeedDMS_Core/Core/inc.ClassDMS.php | 6 +- SeedDMS_Core/Core/inc.ClassDocument.php | 181 +++++++++++++++++++++--- SeedDMS_Core/Core/inc.ClassObject.php | 49 ++++--- 3 files changed, 193 insertions(+), 43 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 626e3431e..71097e64d 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -294,7 +294,7 @@ class SeedDMS_Core_DMS { * given user. A link is only accessible, if it is publically visible, * owned by the user, or the accessing user is an administrator. * - * @param array $links list of objects of type SeedDMS_Core_DocumentLink + * @param SeedDMS_Core_DocumentLink[] $links list of objects of type SeedDMS_Core_DocumentLink * @param object $user user for which access is being checked * @param string $access set if source or target of link shall be checked * for sufficient access rights. Set to 'source' if the source document @@ -1691,7 +1691,7 @@ class SeedDMS_Core_DMS { * This function retrieves a user from the database by its id. * * @param integer $id internal id of user - * @return object instance of {@link SeedDMS_Core_User} or false + * @return SeedDMS_Core_User|boolean instance of {@link SeedDMS_Core_User} or false */ function getUser($id) { /* {{{ */ $classname = $this->classnames['user']; @@ -2095,7 +2095,7 @@ class SeedDMS_Core_DMS { * its id. * * @param integer $id internal id of attribute defintion - * @return object instance of {@link SeedDMS_Core_AttributeDefinition} or false + * @return bool|SeedDMS_Core_AttributeDefinition or false */ function getAttributeDefinition($id) { /* {{{ */ if (!is_numeric($id)) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 3359ab1a8..90758cf97 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -4552,7 +4552,7 @@ class SeedDMS_Core_DocumentLink { /* {{{ */ protected $_id; /** - * @var object reference to document this link belongs to + * @var SeedDMS_Core_Document reference to document this link belongs to */ protected $_document; @@ -4571,6 +4571,14 @@ class SeedDMS_Core_DocumentLink { /* {{{ */ */ protected $_public; + /** + * SeedDMS_Core_DocumentLink constructor. + * @param $id + * @param $document + * @param $target + * @param $userID + * @param $public + */ function __construct($id, $document, $target, $userID, $public) { $this->_id = $id; $this->_document = $document; @@ -4579,35 +4587,52 @@ class SeedDMS_Core_DocumentLink { /* {{{ */ $this->_public = $public; } + /** + * @return int + */ function getID() { return $this->_id; } + /** + * @return SeedDMS_Core_Document + */ function getDocument() { return $this->_document; } + /** + * @return object + */ function getTarget() { return $this->_target; } + /** + * @return bool|SeedDMS_Core_User + */ function getUser() { if (!isset($this->_user)) $this->_user = $this->_document->_dms->getUser($this->_userID); return $this->_user; } + /** + * @return int + */ function isPublic() { return $this->_public; } - /** - * Returns the access mode similar to a document - * - * There is no real access mode for document links, so this is just - * another way to add more access restrictions than the default restrictions. - * It is only called for public document links, not accessed by the owner - * or the administrator. - * - * @param object $u user - * @return integer either M_NONE or M_READ - */ + /** + * Returns the access mode similar to a document + * + * There is no real access mode for document links, so this is just + * another way to add more access restrictions than the default restrictions. + * It is only called for public document links, not accessed by the owner + * or the administrator. + * + * @param SeedDMS_Core_User $u user + * @param $source + * @param $target + * @return int either M_NONE or M_READ + */ function getAccessMode($u, $source, $target) { /* {{{ */ $dms = $this->_document->_dms; @@ -4649,7 +4674,7 @@ class SeedDMS_Core_DocumentFile { /* {{{ */ protected $_id; /** - * @var object reference to document this file belongs to + * @var SeedDMS_Core_Document reference to document this file belongs to */ protected $_document; @@ -4706,6 +4731,21 @@ class SeedDMS_Core_DocumentFile { /* {{{ */ */ protected $_name; + /** + * SeedDMS_Core_DocumentFile constructor. + * @param $id + * @param $document + * @param $userID + * @param $comment + * @param $date + * @param $dir + * @param $fileType + * @param $mimeType + * @param $orgFileName + * @param $name + * @param $version + * @param $public + */ function __construct($id, $document, $userID, $comment, $date, $dir, $fileType, $mimeType, $orgFileName,$name,$version,$public) { $this->_id = $id; $this->_document = $document; @@ -4721,29 +4761,80 @@ class SeedDMS_Core_DocumentFile { /* {{{ */ $this->_public = $public; } + /** + * @return int + */ function getID() { return $this->_id; } + + /** + * @return SeedDMS_Core_Document + */ function getDocument() { return $this->_document; } + + /** + * @return int + */ function getUserID() { return $this->_userID; } + + /** + * @return string + */ function getComment() { return $this->_comment; } + + /** + * @return string + */ function getDate() { return $this->_date; } + + /** + * @return string + */ function getDir() { return $this->_dir; } + + /** + * @return string + */ function getFileType() { return $this->_fileType; } + + /** + * @return string + */ function getMimeType() { return $this->_mimeType; } + + /** + * @return string + */ function getOriginalFileName() { return $this->_orgFileName; } + + /** + * @return string + */ function getName() { return $this->_name; } + /** + * @return bool|SeedDMS_Core_User + */ function getUser() { if (!isset($this->_user)) $this->_user = $this->_document->_dms->getUser($this->_userID); return $this->_user; } + /** + * @return string + */ function getPath() { return $this->_document->getDir() . "f" .$this->_id . $this->_fileType; } + /** + * @return int + */ function getVersion() { return $this->_version; } + /** + * @return int + */ function isPublic() { return $this->_public; } /** @@ -4794,18 +4885,45 @@ class SeedDMS_Core_DocumentFile { /* {{{ */ */ class SeedDMS_Core_AddContentResultSet { /* {{{ */ + /** + * @var null + */ protected $_indReviewers; + + /** + * @var null + */ protected $_grpReviewers; + + /** + * @var null + */ protected $_indApprovers; + + /** + * @var null + */ protected $_grpApprovers; + + /** + * @var + */ protected $_content; + + /** + * @var null + */ protected $_status; /** - * @var object back reference to document management system + * @var SeedDMS_Core_DMS back reference to document management system */ protected $_dms; + /** + * SeedDMS_Core_AddContentResultSet constructor. + * @param $content + */ function __construct($content) { /* {{{ */ $this->_content = $content; $this->_indReviewers = null; @@ -4816,7 +4934,7 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */ $this->_dms = null; } /* }}} */ - /* + /** * Set dms this object belongs to. * * Each object needs a reference to the dms it belongs to. It will be @@ -4824,12 +4942,18 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */ * The dms has a references to the currently logged in user * and the database connection. * - * @param object $dms reference to dms + * @param SeedDMS_Core_DMS $dms reference to dms */ function setDMS($dms) { /* {{{ */ $this->_dms = $dms; } /* }}} */ + /** + * @param $reviewer + * @param $type + * @param $status + * @return bool + */ function addReviewer($reviewer, $type, $status) { /* {{{ */ $dms = $this->_dms; @@ -4857,6 +4981,12 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */ return true; } /* }}} */ + /** + * @param $approver + * @param $type + * @param $status + * @return bool + */ function addApprover($approver, $type, $status) { /* {{{ */ $dms = $this->_dms; @@ -4884,6 +5014,10 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */ return true; } /* }}} */ + /** + * @param $status + * @return bool + */ function setStatus($status) { /* {{{ */ if (!is_integer($status)) { return false; @@ -4895,14 +5029,24 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */ return true; } /* }}} */ + /** + * @return null + */ function getStatus() { /* {{{ */ return $this->_status; } /* }}} */ + /** + * @return mixed + */ function getContent() { /* {{{ */ return $this->_content; } /* }}} */ + /** + * @param $type + * @return array|bool|null + */ function getReviewers($type) { /* {{{ */ if (strcasecmp($type, "i") && strcasecmp($type, "g")) { return false; @@ -4915,6 +5059,10 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */ } } /* }}} */ + /** + * @param $type + * @return array|bool|null + */ function getApprovers($type) { /* {{{ */ if (strcasecmp($type, "i") && strcasecmp($type, "g")) { return false; @@ -4927,4 +5075,3 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */ } } /* }}} */ } /* }}} */ -?> diff --git a/SeedDMS_Core/Core/inc.ClassObject.php b/SeedDMS_Core/Core/inc.ClassObject.php index 4a9df2a30..3fbe48cf8 100644 --- a/SeedDMS_Core/Core/inc.ClassObject.php +++ b/SeedDMS_Core/Core/inc.ClassObject.php @@ -34,7 +34,7 @@ class SeedDMS_Core_Object { /* {{{ */ protected $_attributes; /** - * @var object back reference to document management system + * @var SeedDMS_Core_DMS back reference to document management system */ public $_dms; @@ -67,8 +67,8 @@ class SeedDMS_Core_Object { /* {{{ */ /** * Returns all attributes set for the object * - * @return array list of objects of class SeedDMS_Core_Attribute - */ + * @return array|bool + */ function getAttributes() { /* {{{ */ if (!$this->_attributes) { $db = $this->_dms->getDB(); @@ -102,12 +102,13 @@ class SeedDMS_Core_Object { /* {{{ */ } /* }}} */ - /** - * Returns an attribute of the object for the given attribute definition - * - * @return array|string value of attritbute or false. The value is an array - * if the attribute is defined as multi value - */ + /** + * Returns an attribute of the object for the given attribute definition + * + * @param SeedDMS_Core_AttributeDefinition $attrdef + * @return array|string value of attritbute or false. The value is an array + * if the attribute is defined as multi value + */ function getAttribute($attrdef) { /* {{{ */ if (!$this->_attributes) { $this->getAttributes(); @@ -124,6 +125,7 @@ class SeedDMS_Core_Object { /* {{{ */ /** * Returns an attribute value of the object for the given attribute definition * + * @param SeedDMS_Core_AttributeDefinition $attrdef * @return array|string value of attritbute or false. The value is an array * if the attribute is defined as multi value */ @@ -154,16 +156,17 @@ class SeedDMS_Core_Object { /* {{{ */ } /* }}} */ - /** - * Returns an attribute value of the object for the given attribute definition - * - * This is a short cut for getAttribute($attrdef)->getValueAsArray() but - * first checks if the object has an attribute for the given attribute - * definition. - * - * @return array value of attritbute or false. The value is always an array - * even if the attribute is not defined as multi value - */ + /** + * Returns an attribute value of the object for the given attribute definition + * + * This is a short cut for getAttribute($attrdef)->getValueAsArray() but + * first checks if the object has an attribute for the given attribute + * definition. + * + * @param SeedDMS_Core_AttributeDefinition $attrdef + * @return array|bool + * even if the attribute is not defined as multi value + */ function getAttributeValueAsArray($attrdef) { /* {{{ */ if (!$this->_attributes) { $this->getAttributes(); @@ -183,6 +186,7 @@ class SeedDMS_Core_Object { /* {{{ */ * first checks if the object has an attribute for the given attribute * definition. * + * @param SeedDMS_Core_AttributeDefinition $attrdef * @return string value of attritbute or false. The value is always a string * even if the attribute is defined as multi value */ @@ -201,8 +205,8 @@ class SeedDMS_Core_Object { /* {{{ */ /** * Set an attribute of the object for the given attribute definition * - * @param object $attrdef definition of attribute - * @param array|sting $value value of attribute, for multiple values this + * @param SeedDMS_Core_AttributeDefinition $attrdef definition of attribute + * @param array|string $value value of attribute, for multiple values this * must be an array * @return boolean true if operation was successful, otherwise false */ @@ -254,7 +258,7 @@ class SeedDMS_Core_Object { /* {{{ */ /** * Remove an attribute of the object for the given attribute definition - * + * @param SeedDMS_Core_AttributeDefinition $attrdef * @return boolean true if operation was successful, otherwise false */ function removeAttribute($attrdef) { /* {{{ */ @@ -285,4 +289,3 @@ class SeedDMS_Core_Object { /* {{{ */ return true; } /* }}} */ } /* }}} */ -?> From 61382afc7b4f0efafbf68e29936b77842a39ee57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Neugebauer?= Date: Tue, 24 Oct 2017 12:44:22 +0200 Subject: [PATCH 004/296] inc.ClassAttribute.php --- SeedDMS_Core/Core/inc.AccessUtils.php | 4 +- SeedDMS_Core/Core/inc.ClassAttribute.php | 153 ++++++++++++----------- 2 files changed, 81 insertions(+), 76 deletions(-) diff --git a/SeedDMS_Core/Core/inc.AccessUtils.php b/SeedDMS_Core/Core/inc.AccessUtils.php index 823f3f7b7..ccb087db7 100644 --- a/SeedDMS_Core/Core/inc.AccessUtils.php +++ b/SeedDMS_Core/Core/inc.AccessUtils.php @@ -85,6 +85,4 @@ define("N_DELETE_VERSION", 5); /** * Notify when version of document was deleted */ -define("N_ADD_DOCUMENT", 6); - -?> +define("N_ADD_DOCUMENT", 6); \ No newline at end of file diff --git a/SeedDMS_Core/Core/inc.ClassAttribute.php b/SeedDMS_Core/Core/inc.ClassAttribute.php index 58bb5b027..ddacf055a 100644 --- a/SeedDMS_Core/Core/inc.ClassAttribute.php +++ b/SeedDMS_Core/Core/inc.ClassAttribute.php @@ -36,7 +36,7 @@ class SeedDMS_Core_Attribute { /* {{{ */ protected $_id; /** - * @var object SeedDMS_Core_Object folder, document or document content + * @var SeedDMS_Core_Folder|SeedDMS_Core_Document|SeedDMS_Core_DocumentContent SeedDMS_Core_Object folder, document or document content * this attribute belongs to * * @access protected @@ -44,7 +44,7 @@ class SeedDMS_Core_Attribute { /* {{{ */ protected $_obj; /** - * @var object SeedDMS_Core_AttributeDefinition definition of this attribute + * @var SeedDMS_Core_AttributeDefinition definition of this attribute * * @access protected */ @@ -65,20 +65,19 @@ class SeedDMS_Core_Attribute { /* {{{ */ protected $_validation_error; /** - * @var object SeedDMS_Core_DMS reference to the dms instance this attribute belongs to + * @var SeedDMS_Core_DMS reference to the dms instance this attribute belongs to * * @access protected */ protected $_dms; - /** - * Constructor - * - * @param integer $id internal id of attribute - * @param SeedDMS_Core_Object $obj object this attribute is attached to - * @param SeedDMS_Core_AttributeDefinition $attrdef reference to the attribute definition - * @param string $value value of the attribute - */ + /** + * SeedDMS_Core_Attribute constructor. + * @param $id + * @param $obj + * @param $attrdef + * @param $value + */ function __construct($id, $obj, $attrdef, $value) { /* {{{ */ $this->_id = $id; $this->_obj = $obj; @@ -242,10 +241,11 @@ class SeedDMS_Core_Attribute { /* {{{ */ * If the validation fails the validation error will be set which * can be requested by SeedDMS_Core_Attribute::getValidationError() * - * @return boolean true if validation succeds, otherwise false + * @return boolean true if validation succeeds, otherwise false */ function validate() { /* {{{ */ - $attrdef = $this->_attrdef(); + /** @var SeedDMS_Core_AttributeDefinition $attrdef */ + $attrdef = $this->_attrdef(); /** @todo check this out, this method is not existing */ $result = $attrdef->validate($this->_value); $this->_validation_error = $attrdef->getValidationError(); return $result; @@ -373,12 +373,17 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ protected $_validation_error; /** - * @var object SeedDMS_Core_DMS reference to the dms instance this attribute definition belongs to + * @var SeedDMS_Core_DMS reference to the dms instance this attribute definition belongs to * * @access protected */ protected $_dms; + /** + * @var string + */ + protected $_separator; + /* * Possible skalar data types of an attribute */ @@ -398,20 +403,21 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ const objtype_document = '2'; const objtype_documentcontent = '3'; - /** - * Constructor - * - * @param integer $id internal id of attribute definition - * @param string $name name of attribute - * @param integer $objtype type of object for which this attribute definition - * may be used. - * @param integer $type skalar type of attribute - * @param boolean $multiple set to true if multiple values are allowed - * @param integer $minvalues minimum number of values - * @param integer $maxvalues maximum number of values - * @param string $valueset separated list of allowed values, the first char - * is taken as the separator - */ + /** + * Constructor + * + * @param integer $id internal id of attribute definition + * @param string $name name of attribute + * @param integer $objtype type of object for which this attribute definition + * may be used. + * @param integer $type skalar type of attribute + * @param boolean $multiple set to true if multiple values are allowed + * @param integer $minvalues minimum number of values + * @param integer $maxvalues maximum number of values + * @param string $valueset separated list of allowed values, the first char + * is taken as the separator + * @param $regex + */ function __construct($id, $name, $objtype, $type, $multiple, $minvalues, $maxvalues, $valueset, $regex) { /* {{{ */ $this->_id = $id; $this->_name = $name; @@ -472,14 +478,15 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ */ function getObjType() { return $this->_objtype; } - /** - * Set object type of attribute definition - * - * This can be one of objtype_all, - * objtype_folder, objtype_document, or objtype_documentcontent. - * - * @param integer $objtype type - */ + /** + * Set object type of attribute definition + * + * This can be one of objtype_all, + * objtype_folder, objtype_document, or objtype_documentcontent. + * + * @param integer $objtype type + * @return bool + */ function setObjType($objtype) { /* {{{ */ $db = $this->_dms->getDB(); @@ -502,14 +509,15 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ */ function getType() { return $this->_type; } - /** - * Set type of attribute definition - * - * This can be one of type_int, type_float, type_string, type_boolean, - * type_url, type_email. - * - * @param integer $type type - */ + /** + * Set type of attribute definition + * + * This can be one of type_int, type_float, type_string, type_boolean, + * type_url, type_email. + * + * @param integer $type type + * @return bool + */ function setType($type) { /* {{{ */ $db = $this->_dms->getDB(); @@ -529,12 +537,13 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ */ function getMultipleValues() { return $this->_multiple; } - /** - * Set if attribute definition allows multi values for attribute - * - * @param boolean $mv true if attribute may have multiple values, otherwise - * false - */ + /** + * Set if attribute definition allows multi values for attribute + * + * @param boolean $mv true if attribute may have multiple values, otherwise + * false + * @return bool + */ function setMultipleValues($mv) { /* {{{ */ $db = $this->_dms->getDB(); @@ -633,13 +642,14 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ return array(); } /* }}} */ - /** - * Get the n'th value of a value set - * - * @param interger $index - * @return string n'th value of value set or false if the index is - * out of range or the value set has less than 2 chars - */ + /** + * Get the n'th value of a value set + * + * @param $ind + * @return string n'th value of value set or false if the index is + * out of range or the value set has less than 2 chars + * @internal param int $index + */ function getValueSetValue($ind) { /* {{{ */ if(strlen($this->_valueset) > 1) { $tmp = explode($this->_valueset[0], substr($this->_valueset, 1)); @@ -745,17 +755,16 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ return true; } /* }}} */ - /** - * Parse a given value according to attribute definition - * - * The return value is always an array, even if the attribute is single - * value attribute. - * - * @return array list of single values - */ + /** + * Parse a given value according to attribute definition + * + * The return value is always an array, even if the attribute is single + * value attribute. + * + * @param $value + * @return array|bool + */ function parseValue($value) { /* {{{ */ - $db = $this->_dms->getDB(); - if($this->getMultipleValues()) { /* If the value doesn't start with the separator used in the value set, * then assume that the value was not saved with a leading separator. @@ -771,7 +780,6 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ } else { return array($value); } - return true; } /* }}} */ /** @@ -779,8 +787,8 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ * attribute definition is used * * @param integer $limit return not more the n objects of each type - * @return boolean true if attribute definition is used, otherwise false - */ + * @return array|bool + */ function getStatistics($limit=0) { /* {{{ */ $db = $this->_dms->getDB(); @@ -995,8 +1003,8 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ if(!$success) $this->_validation_error = 3; break; - case self::type_boolean: - foreach($values as $value) { + case self::type_boolean: /** @todo: Same case in LINE 966 */ + foreach($values as $value) { $success &= preg_match('/^[01]$/', $value); } break; @@ -1041,4 +1049,3 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ function getValidationError() { return $this->_validation_error; } } /* }}} */ -?> From e1fc45b69a4cd6bd61a34339d2c99f08bfb199b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Neugebauer?= Date: Tue, 24 Oct 2017 13:36:07 +0200 Subject: [PATCH 005/296] inc.ClassDMS.php --- SeedDMS_Core/Core/inc.ClassDMS.php | 591 ++++++++++++++++------------- 1 file changed, 328 insertions(+), 263 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 71097e64d..127d542ee 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -181,8 +181,13 @@ class SeedDMS_Core_DMS { */ public $callbacks; + /** + * @var SeedDMS_Core_DMS + */ + public $_dms; - /** + + /** * Checks if two objects are equal by comparing their IDs * * The regular php check done by '==' compares all attributes of @@ -341,15 +346,15 @@ class SeedDMS_Core_DMS { return $tmp; } /* }}} */ - /** - * Create a new instance of the dms - * - * @param object $db object of class {@link SeedDMS_Core_DatabaseAccess} - * to access the underlying database - * @param string $contentDir path in filesystem containing the data store - * all document contents is stored - * @return object instance of {@link SeedDMS_Core_DMS} - */ + /** @noinspection PhpUndefinedClassInspection */ + /** + * Create a new instance of the dms + * + * @param SeedDMS_Core_DatabaseAccess $db object of class {@link SeedDMS_Core_DatabaseAccess} + * to access the underlying database + * @param string $contentDir path in filesystem containing the data store + * all document contents is stored + */ function __construct($db, $contentDir) { /* {{{ */ $this->db = $db; if(substr($contentDir, -1) == '/') @@ -377,11 +382,11 @@ class SeedDMS_Core_DMS { /** * Return class name of instantiated objects * - * This method returns the class name of those objects being instatiated + * This method returns the class name of those objects being instantiated * by the dms. Each class has an internal place holder, which must be * passed to function. * - * @param string placeholder (can be one of 'folder', 'document', + * @param string $objectname placeholder (can be one of 'folder', 'document', * 'documentcontent', 'user', 'group' * * @return string/boolean name of class or false if placeholder is invalid @@ -401,9 +406,9 @@ class SeedDMS_Core_DMS { * inherited from one of the available classes) implementing new * features. The method should be called in the postInitDMS hook. * - * @param string placeholder (can be one of 'folder', 'document', + * @param string $objectname placeholder (can be one of 'folder', 'document', * 'documentcontent', 'user', 'group' - * @param string name of class + * @param string $classname name of class * * @return string/boolean name of old class or false if not set */ @@ -431,8 +436,8 @@ class SeedDMS_Core_DMS { /** * Return the database version * - * @return array array with elements major, minor, subminor, date - */ + * @return array|bool + */ function getDBVersion() { /* {{{ */ $tbllist = $this->db->TableList(); $tbllist = explode(',',strtolower(join(',',$tbllist))); @@ -478,7 +483,7 @@ class SeedDMS_Core_DMS { * This function must be called right after creating an instance of * {@link SeedDMS_Core_DMS} * - * @param interger $id id of root folder + * @param integer $id id of root folder */ function setRootFolderID($id) { /* {{{ */ $this->rootFolderID = $id; @@ -504,7 +509,7 @@ class SeedDMS_Core_DMS { * This function must be called right after creating an instance of * {@link SeedDMS_Core_DMS} * - * @param interger $id id of root folder + * @param integer $id id of root folder */ function setMaxDirID($id) { /* {{{ */ $this->maxDirID = $id; @@ -513,7 +518,7 @@ class SeedDMS_Core_DMS { /** * Get root folder * - * @return object/boolean return the object of the root folder or false if + * @return SeedDMS_Core_Folder|boolean return the object of the root folder or false if * the root folder id was not set before with {@link setRootFolderID}. */ function getRootFolder() { /* {{{ */ @@ -569,7 +574,7 @@ class SeedDMS_Core_DMS { * This function retrieves a document from the database by its id. * * @param integer $id internal id of document - * @return object instance of {@link SeedDMS_Core_Document} or false + * @return SeedDMS_Core_Document instance of {@link SeedDMS_Core_Document} or false */ function getDocument($id) { /* {{{ */ $classname = $this->classnames['document']; @@ -596,13 +601,14 @@ class SeedDMS_Core_DMS { return $user->getDocumentsLocked(); } /* }}} */ - /** - * Returns all documents which already expired or will expire in the future - * - * @param string $date date in format YYYY-MM-DD or an integer with the number - * of days. A negative value will cover the days in the past. - * @return array list of documents - */ + /** + * Returns all documents which already expired or will expire in the future + * + * @param string $date date in format YYYY-MM-DD or an integer with the number + * of days. A negative value will cover the days in the past. + * @param SeedDMS_Core_User $user + * @return bool|SeedDMS_Core_Document[] + */ function getDocumentsExpired($date, $user=null) { /* {{{ */ $db = $this->getDB(); @@ -649,8 +655,8 @@ class SeedDMS_Core_DMS { if (is_bool($resArr) && !$resArr) return false; + /** @var SeedDMS_Core_Document[] $documents */ $documents = array(); - $ts = mktime(0, 0, 0) + 86400; foreach ($resArr as $row) { $document = $this->getDocument($row["id"]); if($updatestatus) @@ -668,7 +674,7 @@ class SeedDMS_Core_DMS { * * @param string $name * @param object $folder - * @return object/boolean found document or false + * @return SeedDMS_Core_Document|boolean found document or false */ function getDocumentByName($name, $folder=null) { /* {{{ */ if (!$name) return false; @@ -689,6 +695,7 @@ class SeedDMS_Core_DMS { return false; $row = $resArr[0]; + /** @var SeedDMS_Core_Document $document */ $document = new $this->classnames['document']($row["id"], $row["name"], $row["comment"], $row["date"], $row["expires"], $row["owner"], $row["folder"], $row["inheritAccess"], $row["defaultAccess"], $row["lockUser"], $row["keywords"], $row["sequence"]); $document->setDMS($this); return $document; @@ -703,7 +710,7 @@ class SeedDMS_Core_DMS { * * @param string $name * @param object $folder - * @return object/boolean found document or false + * @return SeedDMS_Core_Document|boolean found document or false */ function getDocumentByOriginalFilename($name, $folder=null) { /* {{{ */ if (!$name) return false; @@ -726,6 +733,7 @@ class SeedDMS_Core_DMS { return false; $row = $resArr[0]; + /** @var SeedDMS_Core_Document $document */ $document = new $this->classnames['document']($row["id"], $row["name"], $row["comment"], $row["date"], $row["expires"], $row["owner"], $row["folder"], $row["inheritAccess"], $row["defaultAccess"], $row["lockUser"], $row["keywords"], $row["sequence"]); $document->setDMS($this); return $document; @@ -737,7 +745,7 @@ class SeedDMS_Core_DMS { * This function retrieves a document content from the database by its id. * * @param integer $id internal id of document content - * @return object instance of {@link SeedDMS_Core_DocumentContent} or false + * @return bool|SeedDMS_Core_Document or false */ function getDocumentContent($id) { /* {{{ */ if (!is_numeric($id)) return false; @@ -755,52 +763,52 @@ 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 - */ + /** + * 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 SeedDMS_Core_User $param1 user + * @param bool $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|bool + */ 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 @@ -999,8 +1007,9 @@ class SeedDMS_Core_DMS { $orderdir = 'DESC'; else $orderdir = 'ASC'; - $queryStr .= "AND `tblDocuments`.`owner` = '".$user->getID()."' ". - "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.", ".S_IN_REVISION.") "; + /** @noinspection PhpUndefinedConstantInspection */ + $queryStr .= "AND `tblDocuments`.`owner` = '".$user->getID()."' ". + "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.", ".S_IN_REVISION.") "; /** @todo S_IN_REVISION is not defined */ if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; else if ($orderby=='s') $queryStr .= "ORDER BY `status`"; @@ -1127,7 +1136,7 @@ class SeedDMS_Core_DMS { return mktime($hour, $min, $sec, $month, $day, $year); } /* }}} */ - /* + /** * Search the database for documents * * Note: the creation date will be used to check againts the @@ -1137,31 +1146,31 @@ class SeedDMS_Core_DMS { * meanѕ that updateѕ of a document will only result in a searchable * modification if a new version is uploaded. * - * @param query string seach query with space separated words - * @param limit integer number of items in result set - * @param offset integer index of first item in result set - * @param logicalmode string either AND or OR - * @param searchin array() list of fields to search in + * @param string $query seach query with space separated words + * @param integer $limit number of items in result set + * @param integer $offset index of first item in result set + * @param string $logicalmode either AND or OR + * @param array $searchin list of fields to search in * 1 = keywords, 2=name, 3=comment, 4=attributes - * @param startFolder object search in the folder only (null for root folder) - * @param owner object search for documents owned by this user - * @param status array list of status - * @param creationstartdate array search for documents created after this date - * @param creationenddate array search for documents created before this date - * @param modificationstartdate array search for documents modified after this date - * @param modificationenddate array search for documents modified before this date - * @param categories array list of categories the documents must have assigned - * @param attributes array list of attributes. The key of this array is the + * @param SeedDMS_Core_Folder|null $startFolder search in the folder only (null for root folder) + * @param SeedDMS_Core_User $owner search for documents owned by this user + * @param array $status list of status + * @param array $creationstartdate search for documents created after this date + * @param array $creationenddate search for documents created before this date + * @param array $modificationstartdate search for documents modified after this date + * @param array $modificationenddate search for documents modified before this date + * @param array $categories list of categories the documents must have assigned + * @param array $attributes list of attributes. The key of this array is the * attribute definition id. The value of the array is the value of the * attribute. If the attribute may have multiple values it must be an array. - * @param mode int decide whether to search for documents/folders + * @param integer $mode decide whether to search for documents/folders * 0x1 = documents only * 0x2 = folders only * 0x3 = both - * @param expirationstartdate array search for documents expiring after this date - * @param expirationenddate array search for documents expiring before this date - * @return array containing the elements total and docs - */ + * @param array $expirationstartdate search for documents expiring after this date + * @param array $expirationenddate search for documents expiring before this date + * @return array|bool + */ function search($query, $limit=0, $offset=0, $logicalmode='AND', $searchin=array(), $startFolder=null, $owner=null, $status = array(), $creationstartdate=array(), $creationenddate=array(), $modificationstartdate=array(), $modificationenddate=array(), $categories=array(), $attributes=array(), $mode=0x3, $expirationstartdate=array(), $expirationenddate=array()) { /* {{{ */ // Split the search string into constituent keywords. $tkeys=array(); @@ -1243,7 +1252,8 @@ class SeedDMS_Core_DMS { if ($creationenddate) { $stopdate = SeedDMS_Core_DMS::makeTimeStamp($creationenddate['hour'], $creationstartdate['minute'], $creationstartdate['second'], $creationenddate["year"], $creationenddate["month"], $creationenddate["day"]); if ($stopdate) { - if($startdate) + /** @noinspection PhpUndefinedVariableInspection */ + if($startdate) $searchCreateDate .= " AND "; $searchCreateDate .= "`tblFolders`.`date` <= ".$stopdate; } @@ -1304,7 +1314,8 @@ class SeedDMS_Core_DMS { foreach ($resArr as $folderArr) { $folders[] = $this->getFolder($folderArr['id']); } - $folderresult = array('totalFolders'=>$totalFolders, 'folders'=>$folders); + /** @noinspection PhpUndefinedVariableInspection */ + $folderresult = array('totalFolders'=>$totalFolders, 'folders'=>$folders); } } else { $folderresult = array('totalFolders'=>0, 'folders'=>array()); @@ -1381,7 +1392,8 @@ class SeedDMS_Core_DMS { } elseif($attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_documentcontent) { if($attrdef->getValueSet()) { if($attrdef->getMultipleValues()) { - $searchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentContentAttributes` WHERE `tblDocumentContentAttributes`.`attrdef`=".$attrdefid." AND (`tblDocumentContentAttributes`.`value` like '%".$valueset[0].implode("%' OR `tblDocumentContentAttributes`.`value` like '%".$valueset[0], $attribute)."%') AND `tblDocumentContentAttributes`.`document` = `tblDocumentContent`.`id`)"; + /** @noinspection PhpUndefinedVariableInspection */ + $searchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentContentAttributes` WHERE `tblDocumentContentAttributes`.`attrdef`=".$attrdefid." AND (`tblDocumentContentAttributes`.`value` like '%".$valueset[0].implode("%' OR `tblDocumentContentAttributes`.`value` like '%".$valueset[0], $attribute)."%') AND `tblDocumentContentAttributes`.`document` = `tblDocumentContent`.`id`)"; } else { $searchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentContentAttributes` WHERE `tblDocumentContentAttributes`.`attrdef`=".$attrdefid." AND `tblDocumentContentAttributes`.`value`='".$attribute."' AND `tblDocumentContentAttributes`.content = `tblDocumentContent`.id)"; } @@ -1539,7 +1551,8 @@ class SeedDMS_Core_DMS { foreach ($resArr as $docArr) { $docs[] = $this->getDocument($docArr['id']); } - $docresult = array('totalDocs'=>$totalDocs, 'docs'=>$docs); + /** @noinspection PhpUndefinedVariableInspection */ + $docresult = array('totalDocs'=>$totalDocs, 'docs'=>$docs); } } else { $docresult = array('totalDocs'=>0, 'docs'=>array()); @@ -1566,7 +1579,7 @@ class SeedDMS_Core_DMS { * This function retrieves a folder from the database by its id. * * @param integer $id internal id of folder - * @return object instance of SeedDMS_Core_Folder or false + * @return SeedDMS_Core_Folder instance of SeedDMS_Core_Folder or false */ function getFolder($id) { /* {{{ */ $classname = $this->classnames['folder']; @@ -1582,8 +1595,8 @@ class SeedDMS_Core_DMS { * only within this parent folder. It will not be done recursively. * * @param string $name name of the folder - * @param object $folder parent folder - * @return object/boolean found folder or false + * @param SeedDMS_Core_Folder $folder parent folder + * @return SeedDMS_Core_Folder|boolean found folder or false */ function getFolderByName($name, $folder=null) { /* {{{ */ if (!$name) return false; @@ -1601,6 +1614,7 @@ class SeedDMS_Core_DMS { return false; $resArr = $resArr[0]; + /** @var SeedDMS_Core_Folder $folder */ $folder = new $this->classnames['folder']($resArr["id"], $resArr["name"], $resArr["parent"], $resArr["comment"], $resArr["date"], $resArr["owner"], $resArr["inheritAccess"], $resArr["defaultAccess"], $resArr["sequence"]); $folder->setDMS($this); return $folder; @@ -1611,8 +1625,8 @@ class SeedDMS_Core_DMS { * * This function checks all folders in the database. * - * @return array list of errors - */ + * @return array|bool + */ function checkFolders() { /* {{{ */ $queryStr = "SELECT * FROM `tblFolders`"; $resArr = $this->db->getResultArray($queryStr); @@ -1645,8 +1659,8 @@ class SeedDMS_Core_DMS { * * This function checks all documents in the database. * - * @return array list of errors - */ + * @return array|bool + */ function checkDocuments() { /* {{{ */ $queryStr = "SELECT * FROM `tblFolders`"; $resArr = $this->db->getResultArray($queryStr); @@ -1728,30 +1742,37 @@ class SeedDMS_Core_DMS { return $classname::getInstance($email, $this, 'email'); } /* }}} */ - /** - * Return list of all users - * - * @return array of instances of {@link SeedDMS_Core_User} or false - */ + /** + * Return list of all users + * + * @param string $orderby + * @return array of instances of SeedDMS_Core_User or false + * or false + */ function getAllUsers($orderby = '') { /* {{{ */ $classname = $this->classnames['user']; return $classname::getAllInstances($orderby, $this); } /* }}} */ - /** - * Add a new user - * - * @param string $login login name - * @param string $pwd password of new user - * @param string $email Email of new user - * @param string $language language of new user - * @param string $comment comment of new user - * @param integer $role role of new user (can be 0=normal, 1=admin, 2=guest) - * @param integer $isHidden hide user in all lists, if this is set login - * is still allowed - * @param integer $isDisabled disable user and prevent login - * @return object of {@link SeedDMS_Core_User} - */ + /** + * Add a new user + * + * @param string $login login name + * @param string $pwd password of new user + * @param $fullName + * @param string $email Email of new user + * @param string $language language of new user + * @param $theme + * @param string $comment comment of new user + * @param int|string $role role of new user (can be 0=normal, 1=admin, 2=guest) + * @param integer $isHidden hide user in all lists, if this is set login + * is still allowed + * @param integer $isDisabled disable user and prevent login + * @param string $pwdexpiration + * @param int $quota + * @param null $homefolder + * @return bool|SeedDMS_Core_User + */ function addUser($login, $pwd, $fullName, $email, $language, $theme, $comment, $role='0', $isHidden=0, $isDisabled=0, $pwdexpiration='', $quota=0, $homefolder=null) { /* {{{ */ $db = $this->db; if (is_object($this->getUserByLogin($login))) { @@ -1776,7 +1797,8 @@ class SeedDMS_Core_DMS { /* Check if 'onPostAddUser' callback is set */ if(isset($this->_dms->callbacks['onPostAddUser'])) { foreach($this->_dms->callbacks['onPostUser'] as $callback) { - if(!call_user_func($callback[0], $callback[1], $user)) { + /** @noinspection PhpStatementHasEmptyBodyInspection */ + if(!call_user_func($callback[0], $callback[1], $user)) { } } } @@ -1788,7 +1810,7 @@ class SeedDMS_Core_DMS { * Get a group by its id * * @param integer $id id of group - * @return object/boolean group or false if no group was found + * @return SeedDMS_Core_Group|boolean group or false if no group was found */ function getGroup($id) { /* {{{ */ $classname = $this->classnames['group']; @@ -1799,7 +1821,7 @@ class SeedDMS_Core_DMS { * Get a group by its name * * @param string $name name of group - * @return object/boolean group or false if no group was found + * @return SeedDMS_Core_Group|boolean group or false if no group was found */ function getGroupByName($name) { /* {{{ */ $classname = $this->classnames['group']; @@ -1809,7 +1831,7 @@ class SeedDMS_Core_DMS { /** * Get a list of all groups * - * @return array array of instances of {@link SeedDMS_Core_Group} + * @return SeedDMS_Core_Group[] array of instances of {@link SeedDMS_Core_Group} */ function getAllGroups() { /* {{{ */ $classname = $this->classnames['group']; @@ -1821,7 +1843,7 @@ class SeedDMS_Core_DMS { * * @param string $name name of group * @param string $comment comment of group - * @return object/boolean instance of {@link SeedDMS_Core_Group} or false in + * @return SeedDMS_Core_Group|boolean instance of {@link SeedDMS_Core_Group} or false in * case of an error. */ function addGroup($name, $comment) { /* {{{ */ @@ -1838,7 +1860,8 @@ class SeedDMS_Core_DMS { /* Check if 'onPostAddGroup' callback is set */ if(isset($this->_dms->callbacks['onPostAddGroup'])) { foreach($this->_dms->callbacks['onPostAddGroup'] as $callback) { - if(!call_user_func($callback[0], $callback[1], $group)) { + /** @noinspection PhpStatementHasEmptyBodyInspection */ + if(!call_user_func($callback[0], $callback[1], $group)) { } } } @@ -1892,9 +1915,11 @@ class SeedDMS_Core_DMS { return $categories; } /* }}} */ - /** - * This function should be replaced by getAllKeywordCategories() - */ + /** + * This function should be replaced by getAllKeywordCategories() + * @param $userID + * @return SeedDMS_Core_KeywordCategory[]|bool + */ function getAllUserKeywordCategories($userID) { /* {{{ */ $queryStr = "SELECT * FROM `tblKeywordCategories`"; if ($userID != -1) @@ -1927,7 +1952,8 @@ class SeedDMS_Core_DMS { /* Check if 'onPostAddKeywordCategory' callback is set */ if(isset($this->_dms->callbacks['onPostAddKeywordCategory'])) { foreach($this->_dms->callbacks['onPostAddKeywordCategory'] as $callback) { - if(!call_user_func($callback[0], $callback[1], $category)) { + /** @noinspection PhpStatementHasEmptyBodyInspection */ + if(!call_user_func($callback[0], $callback[1], $category)) { } } } @@ -1973,7 +1999,7 @@ class SeedDMS_Core_DMS { * The name of a category is by default unique. * * @param string $name human readable name of category - * @return object instance of {@link SeedDMS_Core_DocumentCategory} + * @return SeedDMS_Core_DocumentCategory|boolean instance of {@link SeedDMS_Core_DocumentCategory} */ function getDocumentCategoryByName($name) { /* {{{ */ if (!$name) return false; @@ -2003,7 +2029,8 @@ class SeedDMS_Core_DMS { /* Check if 'onPostAddDocumentCategory' callback is set */ if(isset($this->_dms->callbacks['onPostAddDocumentCategory'])) { foreach($this->_dms->callbacks['onPostAddDocumentCategory'] as $callback) { - if(!call_user_func($callback[0], $callback[1], $category)) { + /** @noinspection PhpStatementHasEmptyBodyInspection */ + if(!call_user_func($callback[0], $callback[1], $category)) { } } } @@ -2037,13 +2064,14 @@ class SeedDMS_Core_DMS { return $user->getNotifications($type); } /* }}} */ - /** - * Create a token to request a new password. - * This function will not delete the password but just creates an entry - * in tblUserRequestPassword indicating a password request. - * - * @return string hash value of false in case of an error - */ + /** + * Create a token to request a new password. + * This function will not delete the password but just creates an entry + * in tblUserRequestPassword indicating a password request. + * + * @param SeedDMS_Core_User $user + * @return string|boolean hash value of false in case of an error + */ function createPasswordRequest($user) { /* {{{ */ $hash = md5(uniqid(time())); $queryStr = "INSERT INTO `tblUserPasswordRequest` (`userID`, `hash`, `date`) VALUES (" . $user->getId() . ", " . $this->db->qstr($hash) .", ".$this->db->getCurrentDatetime().")"; @@ -2053,13 +2081,14 @@ class SeedDMS_Core_DMS { } /* }}} */ - /** - * Check if hash for a password request is valid. - * This function searches a previously create password request and - * returns the user. - * - * @param string $hash - */ + /** + * Check if hash for a password request is valid. + * This function searches a previously create password request and + * returns the user. + * + * @param string $hash + * @return bool|SeedDMS_Core_User + */ function checkPasswordRequest($hash) { /* {{{ */ /* Get the password request from the database */ $queryStr = "SELECT * FROM `tblUserPasswordRequest` where `hash`=".$this->db->qstr($hash); @@ -2075,11 +2104,12 @@ class SeedDMS_Core_DMS { } /* }}} */ - /** - * Delete a password request - * - * @param string $hash - */ + /** + * Delete a password request + * + * @param string $hash + * @return bool + */ function deletePasswordRequest($hash) { /* {{{ */ /* Delete the request, so nobody can use it a second time */ $queryStr = "DELETE FROM `tblUserPasswordRequest` WHERE `hash`=".$this->db->qstr($hash); @@ -2120,7 +2150,7 @@ class SeedDMS_Core_DMS { * This function retrieves an attribute def. from the database by its name. * * @param string $name internal name of attribute def. - * @return object instance of {@link SeedDMS_Core_AttributeDefinition} or false + * @return SeedDMS_Core_AttributeDefinition|boolean instance of {@link SeedDMS_Core_AttributeDefinition} or false */ function getAttributeDefinitionByName($name) { /* {{{ */ if (!$name) return false; @@ -2138,12 +2168,13 @@ class SeedDMS_Core_DMS { return $attrdef; } /* }}} */ - /** - * Return list of all attributes definitions - * - * @param integer $objtype select those attributes defined for an object type - * @return array of instances of {@link SeedDMS_Core_AttributeDefinition} or false - */ + /** + * Return list of all attributes definitions + * + * @param integer $objtype select those attributes defined for an object type + * @return bool|SeedDMS_Core_AttributeDefinition[] of instances of SeedDMS_Core_AttributeDefinition or false + * or false + */ function getAllAttributeDefinitions($objtype=0) { /* {{{ */ $queryStr = "SELECT * FROM `tblAttributeDefinitions`"; if($objtype) { @@ -2158,6 +2189,7 @@ class SeedDMS_Core_DMS { if (is_bool($resArr) && $resArr == false) return false; + /** @var SeedDMS_Core_AttributeDefinition[] $attrdefs */ $attrdefs = array(); for ($i = 0; $i < count($resArr); $i++) { @@ -2169,17 +2201,19 @@ class SeedDMS_Core_DMS { return $attrdefs; } /* }}} */ - /** - * Add a new attribute definition - * - * @param string $name name of attribute - * @param string $type type of attribute - * @param boolean $multiple set to 1 if attribute has multiple attributes - * @param integer $minvalues minimum number of values - * @param integer $maxvalues maximum number of values if multiple is set - * @param string $valueset list of allowed values (csv format) - * @return object of {@link SeedDMS_Core_User} - */ + /** + * Add a new attribute definition + * + * @param string $name name of attribute + * @param $objtype + * @param string $type type of attribute + * @param bool|int $multiple set to 1 if attribute has multiple attributes + * @param integer $minvalues minimum number of values + * @param integer $maxvalues maximum number of values if multiple is set + * @param string $valueset list of allowed values (csv format) + * @param string $regex + * @return bool|SeedDMS_Core_User + */ function addAttributeDefinition($name, $objtype, $type, $multiple=0, $minvalues=0, $maxvalues=1, $valueset='', $regex='') { /* {{{ */ if (is_object($this->getAttributeDefinitionByName($name))) { return false; @@ -2203,7 +2237,7 @@ class SeedDMS_Core_DMS { /** * Return list of all workflows * - * @return array of instances of {@link SeedDMS_Core_Workflow} or false + * @return SeedDMS_Core_Workflow[]|bool of instances of {@link SeedDMS_Core_Workflow} or false */ function getAllWorkflows() { /* {{{ */ $queryStr = "SELECT * FROM `tblWorkflows` ORDER BY `name`"; @@ -2222,9 +2256,11 @@ class SeedDMS_Core_DMS { $wkfstates[$ressArr[$i]["id"]] = new SeedDMS_Core_Workflow_State($ressArr[$i]["id"], $ressArr[$i]["name"], $ressArr[$i]["maxtime"], $ressArr[$i]["precondfunc"], $ressArr[$i]["documentstatus"]); } + /** @var SeedDMS_Core_Workflow[] $workflows */ $workflows = array(); for ($i = 0; $i < count($resArr); $i++) { - $workflow = new SeedDMS_Core_Workflow($resArr[$i]["id"], $resArr[$i]["name"], $wkfstates[$resArr[$i]["initstate"]]); + /** @noinspection PhpUndefinedVariableInspection */ + $workflow = new SeedDMS_Core_Workflow($resArr[$i]["id"], $resArr[$i]["name"], $wkfstates[$resArr[$i]["initstate"]]); $workflow->setDMS($this); $workflows[$i] = $workflow; } @@ -2236,7 +2272,7 @@ class SeedDMS_Core_DMS { * Return workflow by its Id * * @param integer $id internal id of workflow - * @return object of instances of {@link SeedDMS_Core_Workflow} or false + * @return SeedDMS_Core_Workflow|bool of instances of {@link SeedDMS_Core_Workflow} or false */ function getWorkflow($id) { /* {{{ */ $queryStr = "SELECT * FROM `tblWorkflows` WHERE `id`=".intval($id); @@ -2260,7 +2296,7 @@ class SeedDMS_Core_DMS { * Return workflow by its name * * @param string $name name of workflow - * @return object of instances of {@link SeedDMS_Core_Workflow} or false + * @return SeedDMS_Core_Workflow|bool of instances of {@link SeedDMS_Core_Workflow} or false */ function getWorkflowByName($name) { /* {{{ */ if (!$name) return false; @@ -2282,12 +2318,13 @@ class SeedDMS_Core_DMS { return $workflow; } /* }}} */ - /** - * Add a new workflow - * - * @param string $name name of workflow - * @param string $initstate initial state of workflow - */ + /** + * Add a new workflow + * + * @param string $name name of workflow + * @param SeedDMS_Core_Workflow_State $initstate initial state of workflow + * @return bool|SeedDMS_Core_Workflow + */ function addWorkflow($name, $initstate) { /* {{{ */ $db = $this->db; if (is_object($this->getWorkflowByName($name))) { @@ -2307,7 +2344,7 @@ class SeedDMS_Core_DMS { * This function retrieves a workflow state from the database by its id. * * @param integer $id internal id of workflow state - * @return object instance of {@link SeedDMS_Core_Workflow_State} or false + * @return bool|SeedDMS_Core_Workflow_State or false */ function getWorkflowState($id) { /* {{{ */ if (!is_numeric($id)) @@ -2330,7 +2367,7 @@ class SeedDMS_Core_DMS { * Return workflow state by its name * * @param string $name name of workflow state - * @return object of instances of {@link SeedDMS_Core_Workflow_State} or false + * @return bool|SeedDMS_Core_Workflow_State or false */ function getWorkflowStateByName($name) { /* {{{ */ if (!$name) return false; @@ -2355,7 +2392,7 @@ class SeedDMS_Core_DMS { /** * Return list of all workflow states * - * @return array of instances of {@link SeedDMS_Core_Workflow_State} or false + * @return SeedDMS_Core_Workflow_State[]|bool of instances of {@link SeedDMS_Core_Workflow_State} or false */ function getAllWorkflowStates() { /* {{{ */ $queryStr = "SELECT * FROM `tblWorkflowStates` ORDER BY `name`"; @@ -2379,8 +2416,8 @@ class SeedDMS_Core_DMS { * * @param string $name name of workflow state * @param integer $docstatus document status when this state is reached - * @return object instance of new workflow state - */ + * @return bool|SeedDMS_Core_Workflow_State + */ function addWorkflowState($name, $docstatus) { /* {{{ */ $db = $this->db; if (is_object($this->getWorkflowStateByName($name))) { @@ -2400,7 +2437,7 @@ class SeedDMS_Core_DMS { * This function retrieves a workflow action from the database by its id. * * @param integer $id internal id of workflow action - * @return object instance of {@link SeedDMS_Core_Workflow_Action} or false + * @return SeedDMS_Core_Workflow_Action|bool instance of {@link SeedDMS_Core_Workflow_Action} or false */ function getWorkflowAction($id) { /* {{{ */ if (!is_numeric($id)) @@ -2425,7 +2462,7 @@ class SeedDMS_Core_DMS { * This function retrieves a workflow action from the database by its name. * * @param string $name name of workflow action - * @return object instance of {@link SeedDMS_Core_Workflow_Action} or false + * @return SeedDMS_Core_Workflow_Action|bool instance of {@link SeedDMS_Core_Workflow_Action} or false */ function getWorkflowActionByName($name) { /* {{{ */ if (!$name) return false; @@ -2446,7 +2483,7 @@ class SeedDMS_Core_DMS { /** * Return list of workflow action * - * @return array list of instances of {@link SeedDMS_Core_Workflow_Action} or false + * @return SeedDMS_Core_Workflow_Action[]|bool list of instances of {@link SeedDMS_Core_Workflow_Action} or false */ function getAllWorkflowActions() { /* {{{ */ $queryStr = "SELECT * FROM `tblWorkflowActions`"; @@ -2455,6 +2492,7 @@ class SeedDMS_Core_DMS { if (is_bool($resArr) && $resArr == false) return false; + /** @var SeedDMS_Core_Workflow_Action[] $wkfactions */ $wkfactions = array(); for ($i = 0; $i < count($resArr); $i++) { $action = new SeedDMS_Core_Workflow_Action($resArr[$i]["id"], $resArr[$i]["name"]); @@ -2469,8 +2507,8 @@ class SeedDMS_Core_DMS { * Add new workflow action * * @param string $name name of workflow action - * @return object instance new workflow action - */ + * @return SeedDMS_Core_Workflow_Action|bool + */ function addWorkflowAction($name) { /* {{{ */ $db = $this->db; if (is_object($this->getWorkflowActionByName($name))) { @@ -2490,7 +2528,7 @@ class SeedDMS_Core_DMS { * This function retrieves a workflow transition from the database by its id. * * @param integer $id internal id of workflow transition - * @return object instance of {@link SeedDMS_Core_Workflow_Transition} or false + * @return SeedDMS_Core_Workflow_Transition|bool instance of {@link SeedDMS_Core_Workflow_Transition} or false */ function getWorkflowTransition($id) { /* {{{ */ if (!is_numeric($id)) @@ -2509,15 +2547,17 @@ class SeedDMS_Core_DMS { return $transition; } /* }}} */ - /** + /** * Returns document content which is not linked to a document + * + * This method is for finding straying document content without + * a parent document. In normal operation this should not happen + * but little checks for database consistency and possible errors + * in the application may have left over document content though + * the document is gone already. * - * This method is for finding straying document content without - * a parent document. In normal operation this should not happen - * but little checks for database consistency and possible errors - * in the application may have left over document content though - * the document is gone already. - */ + * @return array|bool + */ function getUnlinkedDocumentContent() { /* {{{ */ $queryStr = "SELECT * FROM `tblDocumentContent` WHERE `document` NOT IN (SELECT id FROM `tblDocuments`)"; $resArr = $this->db->getResultArray($queryStr); @@ -2526,6 +2566,7 @@ class SeedDMS_Core_DMS { $versions = array(); foreach($resArr as $row) { + /** @var SeedDMS_Core_Document $document */ $document = new $this->classnames['document']($row['document'], '', '', '', '', '', '', '', '', '', '', ''); $document->setDMS($this); $version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum']); @@ -2535,21 +2576,25 @@ class SeedDMS_Core_DMS { } /* }}} */ - /** + /** * Returns document content which has no file size set + * + * This method is for finding document content without a file size + * set in the database. The file size of a document content was introduced + * in version 4.0.0 of SeedDMS for implementation of user quotas. * - * This method is for finding document content without a file size - * set in the database. The file size of a document content was introduced - * in version 4.0.0 of SeedDMS for implementation of user quotas. - */ + * @return SeedDMS_Core_Document[]|bool + */ function getNoFileSizeDocumentContent() { /* {{{ */ $queryStr = "SELECT * FROM `tblDocumentContent` WHERE `fileSize` = 0 OR `fileSize` is null"; $resArr = $this->db->getResultArray($queryStr); if ($resArr === false) return false; + /** @var SeedDMS_Core_Document[] $versions */ $versions = array(); foreach($resArr as $row) { + /** @var SeedDMS_Core_Document $document */ $document = new $this->classnames['document']($row['document'], '', '', '', '', '', '', '', '', '', '', ''); $document->setDMS($this); $version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum'], $row['fileSize'], $row['checksum']); @@ -2559,21 +2604,24 @@ class SeedDMS_Core_DMS { } /* }}} */ - /** - * Returns document content which has no checksum set - * - * This method is for finding document content without a checksum - * set in the database. The checksum of a document content was introduced - * in version 4.0.0 of SeedDMS for finding duplicates. - */ + /** + * Returns document content which has no checksum set + * + * This method is for finding document content without a checksum + * set in the database. The checksum of a document content was introduced + * in version 4.0.0 of SeedDMS for finding duplicates. + * @return bool|SeedDMS_Core_Document[] + */ function getNoChecksumDocumentContent() { /* {{{ */ $queryStr = "SELECT * FROM `tblDocumentContent` WHERE `checksum` = '' OR `checksum` is null"; $resArr = $this->db->getResultArray($queryStr); if ($resArr === false) return false; + /** @var SeedDMS_Core_Document[] $versions */ $versions = array(); foreach($resArr as $row) { + /** @var SeedDMS_Core_Document $document */ $document = new $this->classnames['document']($row['document'], '', '', '', '', '', '', '', '', '', '', ''); $document->setDMS($this); $version = new $this->classnames['documentcontent']($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum']); @@ -2583,19 +2631,21 @@ class SeedDMS_Core_DMS { } /* }}} */ - /** - * Returns document content which is duplicated - * - * This method is for finding document content which is available twice - * in the database. The checksum of a document content was introduced - * in version 4.0.0 of SeedDMS for finding duplicates. - */ + /** + * Returns document content which is duplicated + * + * This method is for finding document content which is available twice + * in the database. The checksum of a document content was introduced + * in version 4.0.0 of SeedDMS for finding duplicates. + * @return array|bool + */ 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` LIMIT 1000"; $resArr = $this->db->getResultArray($queryStr); if (!$resArr) return false; + /** @var SeedDMS_Core_Document[] $versions */ $versions = array(); foreach($resArr as $row) { $document = $this->getDocument($row['document']); @@ -2610,13 +2660,17 @@ class SeedDMS_Core_DMS { } /* }}} */ - /** - * Returns a list of reviews, approvals which are not linked - * to a user, group anymore - * - * This method is for finding reviews or approvals whose user - * or group was deleted and not just removed from the process. - */ + /** + * Returns a list of reviews, approvals which are not linked + * to a user, group anymore + * + * This method is for finding reviews or approvals whose user + * or group was deleted and not just removed from the process. + * + * @param string $process + * @param string $usergroup + * @return array + */ function getProcessWithoutUserGroup($process, $usergroup) { /* {{{ */ switch($process) { case 'review': @@ -2626,7 +2680,8 @@ class SeedDMS_Core_DMS { $queryStr = "SELECT a.*, b.`name` FROM `tblDocumentApprovers`"; break; } - $queryStr .= " a LEFT JOIN `tblDocuments` b ON a.`documentID`=b.`id` where"; + /** @noinspection PhpUndefinedVariableInspection */ + $queryStr .= " a LEFT JOIN `tblDocuments` b ON a.`documentID`=b.`id` where"; switch($usergroup) { case 'user': $queryStr .= " a.`type`=0 and a.`required` not in (select `id` from `tblUsers`) ORDER by b.`id`"; @@ -2638,14 +2693,18 @@ class SeedDMS_Core_DMS { return $this->db->getResultArray($queryStr); } /* }}} */ - /** - * Removes all reviews, approvals which are not linked - * to a user, group anymore - * - * This method is for removing all reviews or approvals whose user - * or group was deleted and not just removed from the process. - * If the optional parameter $id is set, only this user/group id is removed. - */ + /** + * Removes all reviews, approvals which are not linked + * to a user, group anymore + * + * This method is for removing all reviews or approvals whose user + * or group was deleted and not just removed from the process. + * If the optional parameter $id is set, only this user/group id is removed. + * @param string $process + * @param string $usergroup + * @param int $id + * @return array + */ function removeProcessWithoutUserGroup($process, $usergroup, $id=0) { /* {{{ */ /* Entries of tblDocumentReviewLog or tblDocumentApproveLog are deleted * because of CASCADE ON @@ -2658,7 +2717,8 @@ class SeedDMS_Core_DMS { $queryStr = "DELETE FROM tblDocumentApprovers"; break; } - $queryStr .= " WHERE"; + /** @noinspection PhpUndefinedVariableInspection */ + $queryStr .= " WHERE"; switch($usergroup) { case 'user': $queryStr .= " type=0 AND"; @@ -2683,8 +2743,8 @@ class SeedDMS_Core_DMS { * documents or used space per user, recent activity, etc. * * @param string $type type of statistic - * @return array statistical data - */ + * @return array|bool + */ function getStatisticalData($type='') { /* {{{ */ switch($type) { case 'docsperuser': @@ -2709,7 +2769,8 @@ class SeedDMS_Core_DMS { return $resArr; case 'docsperstatus': - $queryStr = "select b.`status` as `key`, count(b.`status`) as total from (select a.id, max(b.version), max(c.`statusLogID`) as maxlog from `tblDocuments` a left join `tblDocumentStatus` b on a.id=b.`documentID` left join `tblDocumentStatusLog` c on b.`statusID`=c.`statusID` group by a.`id`, b.`version` order by a.`id`, b.`statusID`) a left join `tblDocumentStatusLog` b on a.`maxlog`=b.`statusLogID` group by b.`status`"; + /** @noinspection PhpUnusedLocalVariableInspection */ + $queryStr = "select b.`status` as `key`, count(b.`status`) as total from (select a.id, max(b.version), max(c.`statusLogID`) as maxlog from `tblDocuments` a left join `tblDocumentStatus` b on a.id=b.`documentID` left join `tblDocumentStatusLog` c on b.`statusID`=c.`statusID` group by a.`id`, b.`version` order by a.`id`, b.`statusID`) a left join `tblDocumentStatusLog` b on a.`maxlog`=b.`statusLogID` group by b.`status`"; $queryStr = "select b.`status` as `key`, count(b.`status`) as total from (select a.`id`, max(c.`statusLogID`) as maxlog from `tblDocuments` a left join `tblDocumentStatus` b on a.id=b.`documentID` left join `tblDocumentStatusLog` c on b.`statusID`=c.`statusID` group by a.`id` order by a.id) a left join `tblDocumentStatusLog` b on a.maxlog=b.`statusLogID` group by b.`status`"; $resArr = $this->db->getResultArray($queryStr); if (!$resArr) @@ -2751,23 +2812,27 @@ class SeedDMS_Core_DMS { } } /* }}} */ - /** - * Returns changes with a period of time - * - * This method returns a list of all changes happened in the database - * within a given period of time. It currently just checks for - * entries in the database tables tblDocumentContent, tblDocumentFiles, - * and tblDocumentStatusLog - * - * @param string $start start date, defaults to start of current day - * @param string $end end date, defaults to end of start day - * @return array list of changes - */ + /** + * Returns changes with a period of time + * + * This method returns a list of all changes happened in the database + * within a given period of time. It currently just checks for + * entries in the database tables tblDocumentContent, tblDocumentFiles, + * and tblDocumentStatusLog + * + * @param string $startts + * @param string $endts + * @return array|bool + * @internal param string $start start date, defaults to start of current day + * @internal param string $end end date, defaults to end of start day + */ function getTimeline($startts='', $endts='') { /* {{{ */ if(!$startts) $startts = mktime(0, 0, 0); if(!$endts) $endts = $startts+86400; + + /** @var SeedDMS_Core_Document[] $timeline */ $timeline = array(); $queryStr = "SELECT DISTINCT document FROM `tblDocumentContent` WHERE `date` > ".$startts." AND `date` < ".$endts." UNION SELECT DISTINCT document FROM `tblDocumentFiles` WHERE `date` > ".$startts." AND `date` < ".$endts; @@ -2808,11 +2873,12 @@ class SeedDMS_Core_DMS { $this->callbacks[$name][] = array($func, $params); } /* }}} */ - /** - * Create an sql dump of the complete database - * - * @param string $filename name of dump file - */ + /** + * Create an sql dump of the complete database + * + * @param string $filename name of dump file + * @return bool + */ function createDump($filename) { /* {{{ */ $h = fopen($filename, "w"); if(!$h) @@ -2843,4 +2909,3 @@ class SeedDMS_Core_DMS { } /* }}} */ } -?> From ab73fe529894b19a393524af97a911db848c32d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Neugebauer?= Date: Tue, 24 Oct 2017 14:00:56 +0200 Subject: [PATCH 006/296] inc.ClassDMS.php --- SeedDMS_Core/Core/inc.ClassDMS.php | 4 +- SeedDMS_Core/Core/inc.ClassDocument.php | 237 ++++++++++++++---------- SeedDMS_Core/Core/inc.ClassFolder.php | 4 +- SeedDMS_Core/Core/inc.ClassObject.php | 10 +- 4 files changed, 152 insertions(+), 103 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 127d542ee..704255ce6 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -74,7 +74,7 @@ require_once("inc.ClassAttribute.php"); */ class SeedDMS_Core_DMS { /** - * @var SeedDMS_Core_DMS $db reference to database object. This must be an instance + * @var SeedDMS_Core_DatabaseAccess $db reference to database object. This must be an instance * of {@link SeedDMS_Core_DatabaseAccess}. * @access protected */ @@ -427,7 +427,7 @@ class SeedDMS_Core_DMS { * This method returns the database object as it was set by the first * parameter of the constructor. * - * @return object database + * @return SeedDMS_Core_DatabaseAccess database */ function getDB() { /* {{{ */ return $this->db; diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 90758cf97..017ed1571 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -176,7 +176,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ protected $_keywords; /** - * @var array list of categories + * @var SeedDMS_Core_DocumentCategory[] list of categories */ protected $_categories; @@ -195,7 +195,15 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ */ protected $_content; - function __construct($id, $name, $comment, $date, $expires, $ownerID, $folderID, $inheritAccess, $defaultAccess, $locked, $keywords, $sequence) { /* {{{ */ + /** + * @var SeedDMS_Core_Folder + */ + protected $_folder; + + /** @var SeedDMS_Core_UserAccess[] */ + protected $_accessList; + + function __construct($id, $name, $comment, $date, $expires, $ownerID, $folderID, $inheritAccess, $defaultAccess, $locked, $keywords, $sequence) { /* {{{ */ parent::__construct($id); $this->_name = $name; $this->_comment = $comment; @@ -214,14 +222,15 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $this->_content = null; } /* }}} */ - /** - * Return an array of database fields which used for searching - * a term entered in the database search form - * - * @param array $searchin integer list of search scopes (2=name, 3=comment, - * 4=attributes) - * @return array list of database fields - */ + /** + * Return an array of database fields which used for searching + * a term entered in the database search form + * + * @param SeedDMS_Core_DMS $dms + * @param array $searchin integer list of search scopes (2=name, 3=comment, + * 4=attributes) + * @return array list of database fields + */ public static function getSearchFields($dms, $searchin) { /* {{{ */ $db = $dms->getDB(); @@ -247,6 +256,11 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $searchFields; } /* }}} */ + /** + * @param integer $id + * @param SeedDMS_Core_DMS $dms + * @return bool|SeedDMS_Core_Document + */ public static function getInstance($id, $dms) { /* {{{ */ $db = $dms->getDB(); @@ -271,12 +285,13 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ } $classname = $dms->getClassname('document'); + /** @var SeedDMS_Core_Document $document */ $document = new $classname($resArr["id"], $resArr["name"], $resArr["comment"], $resArr["date"], $resArr["expires"], $resArr["owner"], $resArr["folder"], $resArr["inheritAccess"], $resArr["defaultAccess"], $lock, $resArr["keywords"], $resArr["sequence"]); $document->setDMS($dms); return $document; } /* }}} */ - /* + /** * Return the directory of the document in the file system relativ * to the contentDir * @@ -291,18 +306,19 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ } } /* }}} */ - /* + /** * Return the name of the document * * @return string name of document */ function getName() { return $this->_name; } - /* - * Set the name of the document - * - * @param $newName string new name of document - */ + /** + * Set the name of the document + * + * @param $newName string new name of document + * @return bool + */ function setName($newName) { /* {{{ */ $db = $this->_dms->getDB(); @@ -314,18 +330,19 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return true; } /* }}} */ - /* + /** * Return the comment of the document * * @return string comment of document */ function getComment() { return $this->_comment; } - /* - * Set the comment of the document - * - * @param $newComment string new comment of document - */ + /** + * Set the comment of the document + * + * @param $newComment string new comment of document + * @return bool + */ function setComment($newComment) { /* {{{ */ $db = $this->_dms->getDB(); @@ -337,8 +354,15 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return true; } /* }}} */ + /** + * @return string + */ function getKeywords() { return $this->_keywords; } + /** + * @param string $newKeywords + * @return bool + */ function setKeywords($newKeywords) { /* {{{ */ $db = $this->_dms->getDB(); @@ -353,8 +377,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Retrieve a list of all categories this document belongs to * - * @return array list of category objects - */ + * @return bool|SeedDMS_Core_DocumentCategory[] + */ function getCategories() { /* {{{ */ $db = $this->_dms->getDB(); @@ -373,13 +397,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $this->_categories; } /* }}} */ - /** - * Set a list of categories for the document - * This function will delete currently assigned categories and sets new - * categories. - * - * @param array $newCategories list of category objects - */ + /** + * Set a list of categories for the document + * This function will delete currently assigned categories and sets new + * categories. + * + * @param SeedDMS_Core_DocumentCategory[] $newCategories list of category objects + * @return bool + */ function setCategories($newCategories) { /* {{{ */ $db = $this->_dms->getDB(); @@ -439,7 +464,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Return the parent folder of the document * - * @return object parent folder + * @return SeedDMS_Core_Folder parent folder */ function getFolder() { /* {{{ */ if (!isset($this->_folder)) @@ -453,7 +478,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * This function basically moves a document from a folder to another * folder. * - * @param object $newFolder + * @param SeedDMS_Core_Folder $newFolder * @return boolean false in case of an error, otherwise true */ function setFolder($newFolder) { /* {{{ */ @@ -463,12 +488,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ if (!$db->getResult($queryStr)) return false; $this->_folderID = $newFolder->getID(); - $this->_folder = $newFolder; + /** @noinspection PhpUndefinedFieldInspection */ + $this->_folder = $newFolder; // Make sure that the folder search path is also updated. $path = $newFolder->getPath(); $flist = ""; - foreach ($path as $f) { + /** @var SeedDMS_Core_Folder[] $path */ + foreach ($path as $f) { $flist .= ":".$f->getID(); } if (strlen($flist)>1) { @@ -484,7 +511,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Return owner of document * - * @return object owner of document as an instance of {@link SeedDMS_Core_User} + * @return SeedDMS_Core_User owner of document as an instance of {@link SeedDMS_Core_User} */ function getOwner() { /* {{{ */ if (!isset($this->_owner)) @@ -495,7 +522,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Set owner of a document * - * @param object $newOwner new owner + * @param SeedDMS_Core_User $newOwner new owner * @return boolean true if successful otherwise false */ function setOwner($newOwner) { /* {{{ */ @@ -506,10 +533,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return false; $this->_ownerID = $newOwner->getID(); - $this->_owner = $newOwner; + /** @noinspection PhpUndefinedFieldInspection */ + $this->_owner = $newOwner; return true; } /* }}} */ + /** + * @return bool|int + */ function getDefaultAccess() { /* {{{ */ if ($this->inheritsAccess()) { $res = $this->getFolder(); @@ -519,15 +550,16 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $this->_defaultAccess; } /* }}} */ - /** - * Set default access mode - * - * This method sets the default access mode and also removes all notifiers which - * will not have read access anymore. - * - * @param integer $mode access mode - * @param boolean $noclean set to true if notifier list shall not be clean up - */ + /** + * Set default access mode + * + * This method sets the default access mode and also removes all notifiers which + * will not have read access anymore. + * + * @param integer $mode access mode + * @param boolean $noclean set to true if notifier list shall not be clean up + * @return bool + */ function setDefaultAccess($mode, $noclean="false") { /* {{{ */ $db = $this->_dms->getDB(); @@ -543,6 +575,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return true; } /* }}} */ + /** + * @return bool + */ function inheritsAccess() { return $this->_inheritAccess; } /** @@ -598,11 +633,12 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $this->_expires; } /* }}} */ - /** - * Set expiration date as unix timestamp - * - * @param integer unix timestamp of expiration date - */ + /** + * Set expiration date as unix timestamp + * + * @param integer $expires unix timestamp of expiration date + * @return bool + */ function setExpires($expires) { /* {{{ */ $db = $this->_dms->getDB(); @@ -670,7 +706,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Lock or unlock document * - * @param $falseOrUser user object for locking or false for unlocking + * @param SeedDMS_Core_User|bool $falseOrUser user object for locking or false for unlocking * @return boolean true if operation was successful otherwise false */ function setLocked($falseOrUser) { /* {{{ */ @@ -698,7 +734,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Get the user currently locking the document * - * @return object user have a lock + * @return SeedDMS_Core_User|bool user have a lock */ function getLockingUser() { /* {{{ */ if (!$this->isLocked()) @@ -709,8 +745,15 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $this->_lockingUser; } /* }}} */ + /** + * @return int + */ function getSequence() { return $this->_sequence; } + /** + * @param $seq + * @return bool + */ function setSequence($seq) { /* {{{ */ $db = $this->_dms->getDB(); @@ -743,24 +786,24 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return true; } /* }}} */ - /** - * Returns a list of access privileges - * - * If the document inherits the access privileges from the parent folder - * those will be returned. - * $mode and $op can be set to restrict the list of returned access - * privileges. If $mode is set to M_ANY no restriction will apply - * regardless of the value of $op. The returned array contains a list - * of {@link SeedDMS_Core_UserAccess} and - * {@link SeedDMS_Core_GroupAccess} objects. Even if the document - * has no access list the returned array contains the two elements - * 'users' and 'groups' which are than empty. The methode returns false - * if the function fails. - * - * @param integer $mode access mode (defaults to M_ANY) - * @param integer $op operation (defaults to O_EQ) - * @return array multi dimensional array or false in case of an error - */ + /** + * Returns a list of access privileges + * + * If the document inherits the access privileges from the parent folder + * those will be returned. + * $mode and $op can be set to restrict the list of returned access + * privileges. If $mode is set to M_ANY no restriction will apply + * regardless of the value of $op. The returned array contains a list + * of {@link SeedDMS_Core_UserAccess} and + * {@link SeedDMS_Core_GroupAccess} objects. Even if the document + * has no access list the returned array contains the two elements + * 'users' and 'groups' which are than empty. The methode returns false + * if the function fails. + * + * @param int $mode access mode (defaults to M_ANY) + * @param int|string $op operation (defaults to O_EQ) + * @return bool|SeedDMS_Core_UserAccess[] + */ function getAccessList($mode = M_ANY, $op = O_EQ) { /* {{{ */ $db = $this->_dms->getDB(); @@ -796,16 +839,17 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $this->_accessList[$mode]; } /* }}} */ - /** - * Add access right to folder - * This function may change in the future. Instead of passing the a flag - * and a user/group id a user or group object will be expected. - * - * @param integer $mode access mode - * @param integer $userOrGroupID id of user or group - * @param integer $isUser set to 1 if $userOrGroupID is the id of a - * user - */ + /** + * Add access right to folder + * This function may change in the future. Instead of passing the a flag + * and a user/group id a user or group object will be expected. + * + * @param integer $mode access mode + * @param integer $userOrGroupID id of user or group + * @param integer $isUser set to 1 if $userOrGroupID is the id of a + * user + * @return bool + */ function addAccess($mode, $userOrGroupID, $isUser) { /* {{{ */ $db = $this->_dms->getDB(); @@ -826,16 +870,17 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return true; } /* }}} */ - /** - * Change access right of document - * This function may change in the future. Instead of passing the a flag - * and a user/group id a user or group object will be expected. - * - * @param integer $newMode access mode - * @param integer $userOrGroupID id of user or group - * @param integer $isUser set to 1 if $userOrGroupID is the id of a - * user - */ + /** + * Change access right of document + * This function may change in the future. Instead of passing the a flag + * and a user/group id a user or group object will be expected. + * + * @param integer $newMode access mode + * @param integer $userOrGroupID id of user or group + * @param integer $isUser set to 1 if $userOrGroupID is the id of a + * user + * @return bool + */ function changeAccess($newMode, $userOrGroupID, $isUser) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1182,10 +1227,10 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * is allowed to remove a notification. This must be checked by the calling * application. * - * @param $userOrGroupID id of user or group - * @param $isUser boolean true if a user is passed in $userOrGroupID, false + * @param integer $userOrGroupID id of user or group + * @param boolean $isUser boolean true if a user is passed in $userOrGroupID, false * if a group is passed in $userOrGroupID - * @param $type type of notification (0 will delete all) Not used yet! + * @param integer $type type of notification (0 will delete all) Not used yet! * @return integer 0 if operation was succesful * -1 if the userid/groupid is invalid * -3 if the user/group is already subscribed diff --git a/SeedDMS_Core/Core/inc.ClassFolder.php b/SeedDMS_Core/Core/inc.ClassFolder.php index 9d2dee1cc..e2c7e2bf8 100644 --- a/SeedDMS_Core/Core/inc.ClassFolder.php +++ b/SeedDMS_Core/Core/inc.ClassFolder.php @@ -552,8 +552,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * Returns an array of all parents, grand parent, etc. up to root folder. * The folder itself is the last element of the array. * - * @return array Array of parents - */ + * @return array|bool + */ function getPath() { /* {{{ */ if (!isset($this->_parentID) || ($this->_parentID == "") || ($this->_parentID == 0) || ($this->_id == $this->_dms->rootFolderID)) { return array($this); diff --git a/SeedDMS_Core/Core/inc.ClassObject.php b/SeedDMS_Core/Core/inc.ClassObject.php index 3fbe48cf8..e53d2416c 100644 --- a/SeedDMS_Core/Core/inc.ClassObject.php +++ b/SeedDMS_Core/Core/inc.ClassObject.php @@ -38,12 +38,16 @@ class SeedDMS_Core_Object { /* {{{ */ */ public $_dms; + /** + * SeedDMS_Core_Object constructor. + * @param $id + */ function __construct($id) { /* {{{ */ $this->_id = $id; $this->_dms = null; } /* }}} */ - /* + /** * Set dms this object belongs to. * * Each object needs a reference to the dms it belongs to. It will be @@ -51,13 +55,13 @@ class SeedDMS_Core_Object { /* {{{ */ * The dms has a references to the currently logged in user * and the database connection. * - * @param object $dms reference to dms + * @param SeedDMS_Core_DMS $dms reference to dms */ function setDMS($dms) { /* {{{ */ $this->_dms = $dms; } /* }}} */ - /* + /** * Return the internal id of the document * * @return integer id of document From 3f2e24f80d6f3c1dea3e887797e4ecfdcb0d4c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Neugebauer?= Date: Sat, 28 Oct 2017 14:28:12 +0200 Subject: [PATCH 007/296] inc.ClassFolder.php --- SeedDMS_Core/Core/inc.ClassDMS.php | 2 +- SeedDMS_Core/Core/inc.ClassDocument.php | 89 +++-- SeedDMS_Core/Core/inc.ClassFolder.php | 465 ++++++++++++++---------- 3 files changed, 332 insertions(+), 224 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 704255ce6..f683eb086 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -561,7 +561,7 @@ class SeedDMS_Core_DMS { * If user authentication was done externally, this function can * be used to tell the dms who is currently logged in. * - * @return object $user + * @return SeedDMS_Core_User $user * */ function getLoggedInUser() { /* {{{ */ diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 017ed1571..37ec40bdb 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -186,7 +186,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ protected $_sequence; /** - * @var object temp. storage for latestcontent + * @var SeedDMS_Core_DocumentContent temp. storage for latestcontent */ protected $_latestContent; @@ -200,7 +200,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ */ protected $_folder; - /** @var SeedDMS_Core_UserAccess[] */ + /** @var array of SeedDMS_Core_UserAccess and SeedDMS_Core_GroupAccess */ protected $_accessList; function __construct($id, $name, $comment, $date, $expires, $ownerID, $folderID, $inheritAccess, $defaultAccess, $locked, $keywords, $sequence) { /* {{{ */ @@ -557,7 +557,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * will not have read access anymore. * * @param integer $mode access mode - * @param boolean $noclean set to true if notifier list shall not be clean up + * @param bool|string $noclean set to true if notifier list shall not be clean up * @return bool */ function setDefaultAccess($mode, $noclean="false") { /* {{{ */ @@ -802,7 +802,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * * @param int $mode access mode (defaults to M_ANY) * @param int|string $op operation (defaults to O_EQ) - * @return bool|SeedDMS_Core_UserAccess[] + * @return bool|array */ function getAccessList($mode = M_ANY, $op = O_EQ) { /* {{{ */ $db = $this->_dms->getDB(); @@ -970,7 +970,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $accessList = $this->getAccessList(); if (!$accessList) return false; - foreach ($accessList["users"] as $userAccess) { + /** @var SeedDMS_Core_UserAccess $userAccess */ + foreach ($accessList["users"] as $userAccess) { if ($userAccess->getUserID() == $user->getID()) { $mode = $userAccess->getMode(); if ($user->isGuest()) { @@ -983,7 +984,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /* Get the highest right defined by a group */ if($accessList['groups']) { $mode = 0; - foreach ($accessList["groups"] as $groupAccess) { + /** @var SeedDMS_Core_GroupAccess $groupAccess */ + foreach ($accessList["groups"] as $groupAccess) { if ($user->isMemberOfGroup($groupAccess->getGroup())) { if ($groupAccess->getMode() > $mode) $mode = $groupAccess->getMode(); @@ -1014,7 +1016,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * The function takes inherited access rights into account. * For a list of possible access rights see @file inc.AccessUtils.php * - * @param $group object instance of class SeedDMS_Core_Group + * @param SeedDMS_Core_Group $group object instance of class SeedDMS_Core_Group * @return integer access mode */ function getGroupAccessMode($group) { /* {{{ */ @@ -1026,7 +1028,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ if (!$accessList) return false; - foreach ($accessList["groups"] as $groupAccess) { + /** @var SeedDMS_Core_GroupAccess $groupAccess */ + foreach ($accessList["groups"] as $groupAccess) { if ($groupAccess->getGroupID() == $group->getID()) { $foundInACL = true; if ($groupAccess->getMode() > $highestPrivileged) @@ -1043,7 +1046,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $this->getDefaultAccess(); } /* }}} */ - /** + /** * Returns a list of all notifications * * The returned list has two elements called 'users' and 'groups'. Each one @@ -1051,8 +1054,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * SeedDMS_Core_Group. * * @param integer $type type of notification (not yet used) - * @return array list of notifications - */ + * @return array|bool + */ function getNotifyList($type=0) { /* {{{ */ if (empty($this->_notifyList)) { $db = $this->_dms->getDB(); @@ -1092,7 +1095,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /* Make a copy of both notifier lists because removeNotify will empty * $this->_notifyList and the second foreach will not work anymore. */ + /** @var SeedDMS_Core_User[] $nusers */ $nusers = $this->_notifyList["users"]; + /** @var SeedDMS_Core_Group[] $ngroups */ $ngroups = $this->_notifyList["groups"]; foreach ($nusers as $u) { if ($this->getAccessMode($u) < M_READ) { @@ -1172,7 +1177,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ // that the current group has not been explicitly excluded. $acl = $this->getAccessList(M_NONE, O_EQ); $found = false; - foreach ($acl["groups"] as $group) { + /** @var SeedDMS_Core_GroupAccess $group */ + foreach ($acl["groups"] as $group) { if ($group->getGroupID() == $userOrGroupID) { $found = true; break; @@ -1190,7 +1196,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return -4; } $found = false; - foreach ($acl["groups"] as $group) { + /** @var SeedDMS_Core_GroupAccess $group */ + foreach ($acl["groups"] as $group) { if ($group->getGroupID() == $userOrGroupID) { $found = true; break; @@ -1240,6 +1247,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $db = $this->_dms->getDB(); /* Verify that user / group exists. */ + /** @var SeedDMS_Core_Group|SeedDMS_Core_User $obj */ $obj = ($isUser ? $this->_dms->getUser($userOrGroupID) : $this->_dms->getGroup($userOrGroupID)); if (!is_object($obj)) { return -1; @@ -1315,8 +1323,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * @param array $attributes list of version attributes. The element key * must be the id of the attribute definition. * @param object $workflow - * @return bool/array false in case of an error or a result set - */ + * @return bool|SeedDMS_Core_AddContentResultSet + */ function addContent($comment, $user, $tmpFile, $orgFileName, $fileType, $mimeType, $reviewers=array(), $approvers=array(), $version=0, $attributes=array(), $workflow=null) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1365,7 +1373,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $this->_content = null; $this->_latestContent = null; - $content = $this->getLatestContent($contentID); + $content = $this->getLatestContent($contentID); /** @todo: Parameter not defined in Funktion */ $docResultSet = new SeedDMS_Core_AddContentResultSet($content); $docResultSet->setDMS($this->_dms); @@ -1402,7 +1410,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ // and submit comments, if appropriate. Reviewers can also recommend that // a document be rejected. $pendingReview=false; - $reviewRes = array(); + /** @noinspection PhpUnusedLocalVariableInspection */ + $reviewRes = array(); /** @todo unused variable */ foreach (array("i", "g") as $i){ if (isset($reviewers[$i])) { foreach ($reviewers[$i] as $reviewerID) { @@ -1420,7 +1429,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ // Add approvers to the database. Approvers must also review the document // and make a recommendation on its release as an approved version. $pendingApproval=false; - $approveRes = array(); + /** @noinspection PhpUnusedLocalVariableInspection */ + $approveRes = array(); /** @todo unused variable */ foreach (array("i", "g") as $i){ if (isset($approvers[$i])) { foreach ($approvers[$i] as $approverID) { @@ -1458,7 +1468,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return false; } - $docResultSet->setStatus($status,$comment,$user); + /** @noinspection PhpMethodParametersCountMismatchInspection */ + $docResultSet->setStatus($status,$comment,$user); /** @todo parameter count wrong */ $db->commitTransaction(); return $docResultSet; @@ -1496,7 +1507,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ if ((int) $version<1) { $queryStr = "SELECT MAX(`version`) as m from `tblDocumentContent` where `document` = ".$this->_id; $resArr = $db->getResultArray($queryStr); - if (is_bool($resArr) && !$res) + if (is_bool($resArr) && !$res) /** @todo undefined variable */ return false; $version = $resArr[0]['m']; @@ -1551,21 +1562,22 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * out. Access rights based on the document status are calculated for the * currently logged in user. * - * @return array list of objects of class SeedDMS_Core_DocumentContent - */ + * @return bool|SeedDMS_Core_DocumentContent[] + */ function getContent() { /* {{{ */ $db = $this->_dms->getDB(); if (!isset($this->_content)) { $queryStr = "SELECT * FROM `tblDocumentContent` WHERE `document` = ".$this->_id." ORDER BY `version`"; $resArr = $db->getResultArray($queryStr); - if (is_bool($resArr) && !$res) + if (is_bool($resArr) && !$res) /** @todo undefined variable */ return false; $this->_content = array(); $classname = $this->_dms->getClassname('documentcontent'); $user = $this->_dms->getLoggedInUser(); foreach ($resArr as $row) { + /** @var SeedDMS_Core_DocumentContent $content */ $content = new $classname($row["id"], $this, $row["version"], $row["comment"], $row["date"], $row["createdBy"], $row["dir"], $row["orgFileName"], $row["fileType"], $row["mimeType"], $row['fileSize'], $row['checksum']); if($user) { if($content->getAccessMode($user) >= M_READ) @@ -1587,7 +1599,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * currently logged in user. * * @param integer $version version number of content element - * @return object/boolean object of class {@link SeedDMS_Core_DocumentContent} + * @return SeedDMS_Core_DocumentContent|boolean object of class {@link SeedDMS_Core_DocumentContent} * or false */ function getContentByVersion($version) { /* {{{ */ @@ -1604,13 +1616,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "SELECT * FROM `tblDocumentContent` WHERE `document` = ".$this->_id." AND `version` = " . (int) $version; $resArr = $db->getResultArray($queryStr); - if (is_bool($resArr) && !$res) + if (is_bool($resArr) && !$res) /** @todo undefined variable */ return false; if (count($resArr) != 1) return false; $resArr = $resArr[0]; $classname = $this->_dms->getClassname('documentcontent'); + /** @var SeedDMS_Core_DocumentContent $content */ if($content = new $classname($resArr["id"], $this, $resArr["version"], $resArr["comment"], $resArr["date"], $resArr["createdBy"], $resArr["dir"], $resArr["orgFileName"], $resArr["fileType"], $resArr["mimeType"], $resArr['fileSize'], $resArr['checksum'])) { $user = $this->_dms->getLoggedInUser(); /* A user with write access on the document may always see the version */ @@ -1623,6 +1636,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ } } /* }}} */ + /** + * @return bool|null|SeedDMS_Core_DocumentContent + */ function __getLatestContent() { /* {{{ */ if (!$this->_latestContent) { $db = $this->_dms->getDB(); @@ -1651,20 +1667,21 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * Access rights based on the document status are calculated for the * currently logged in user. * - * @return object object of class {@link SeedDMS_Core_DocumentContent} + * @return bool|SeedDMS_Core_DocumentContent object of class {@link SeedDMS_Core_DocumentContent} */ function getLatestContent() { /* {{{ */ if (!$this->_latestContent) { $db = $this->_dms->getDB(); $queryStr = "SELECT * FROM `tblDocumentContent` WHERE `document` = ".$this->_id." ORDER BY `version` DESC"; $resArr = $db->getResultArray($queryStr); - if (is_bool($resArr) && !$res) + if (is_bool($resArr) && !$res) /** @todo: $res not defined */ return false; $classname = $this->_dms->getClassname('documentcontent'); $user = $this->_dms->getLoggedInUser(); foreach ($resArr as $row) { if (!$this->_latestContent) { + /** @var SeedDMS_Core_DocumentContent $content */ $content = new $classname($row["id"], $this, $row["version"], $row["comment"], $row["date"], $row["createdBy"], $row["dir"], $row["orgFileName"], $row["fileType"], $row["mimeType"], $row['fileSize'], $row['checksum']); if($user) { /* If the user may even write the document, then also allow to see all content. @@ -1686,7 +1703,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Remove version of document * - * @param interger $version version number of content + * @param SeedDMS_Core_DocumentContent $version version number of content * @return boolean true if successful, otherwise false */ private function _removeContent($version) { /* {{{ */ @@ -1813,11 +1830,12 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return true; } /* }}} */ - /** - * Call callback onPreRemoveDocument before deleting content - * - * @param integer $version version number of content - */ + /** + * Call callback onPreRemoveDocument before deleting content + * + * @param SeedDMS_Core_DocumentContent $version version number of content + * @return bool|mixed + */ function removeContent($version) { /* {{{ */ /* Check if 'onPreRemoveDocument' callback is set */ if(isset($this->_dms->callbacks['onPreRemoveContent'])) { @@ -1847,7 +1865,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * Return a certain document link * * @param integer $linkID id of link - * @return object instance of SeedDMS_Core_DocumentLink or false in case of + * @return SeedDMS_Core_DocumentLink|bool of SeedDMS_Core_DocumentLink or false in case of * an error. */ function getDocumentLink($linkID) { /* {{{ */ @@ -1866,7 +1884,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $link = new SeedDMS_Core_DocumentLink($resArr["id"], $document, $target, $resArr["userID"], $resArr["public"]); $user = $this->_dms->getLoggedInUser(); if($link->getAccessMode($user, $document, $target) >= M_READ) - return $file; + /** @noinspection PhpUndefinedVariableInspection */ + return $file; /** @todo variable not defined */ return null; } /* }}} */ diff --git a/SeedDMS_Core/Core/inc.ClassFolder.php b/SeedDMS_Core/Core/inc.ClassFolder.php index e2c7e2bf8..ffb348642 100644 --- a/SeedDMS_Core/Core/inc.ClassFolder.php +++ b/SeedDMS_Core/Core/inc.ClassFolder.php @@ -73,6 +73,48 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { */ protected $_sequence; + /** + * @var + */ + protected $_date; + + /** + * @var SeedDMS_Core_Folder + */ + protected $_parent; + + /** + * @var SeedDMS_Core_User + */ + protected $_owner; + + /** + * @var SeedDMS_Core_Folder[] + */ + protected $_subFolders; + + /** + * @var SeedDMS_Core_Document[] + */ + protected $_documents; + + /** + * @var SeedDMS_Core_UserAccess[]|SeedDMS_Core_GroupAccess[] + */ + protected $_accessList; + + /** + * SeedDMS_Core_Folder constructor. + * @param $id + * @param $name + * @param $parentID + * @param $comment + * @param $date + * @param $ownerID + * @param $inheritAccess + * @param $defaultAccess + * @param $sequence + */ function __construct($id, $name, $parentID, $comment, $date, $ownerID, $inheritAccess, $defaultAccess, $sequence) { /* {{{ */ parent::__construct($id); $this->_id = $id; @@ -87,14 +129,15 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $this->_notifyList = array(); } /* }}} */ - /** - * Return an array of database fields which used for searching - * a term entered in the database search form - * - * @param array $searchin integer list of search scopes (2=name, 3=comment, - * 4=attributes) - * @return array list of database fields - */ + /** + * Return an array of database fields which used for searching + * a term entered in the database search form + * + * @param SeedDMS_Core_DMS $dms + * @param array $searchin integer list of search scopes (2=name, 3=comment, + * 4=attributes) + * @return array list of database fields + */ public static function getSearchFields($dms, $searchin) { /* {{{ */ $db = $dms->getDB(); @@ -125,6 +168,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return $sql; } /* }}} */ + /** + * @param $id + * @param SeedDMS_Core_DMS $dms + * @return bool|SeedDMS_Core_Folder + */ public static function getInstance($id, $dms) { /* {{{ */ $db = $dms->getDB(); @@ -137,23 +185,25 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $resArr = $resArr[0]; $classname = $dms->getClassname('folder'); + /** @var SeedDMS_Core_Folder $folder */ $folder = new $classname($resArr["id"], $resArr["name"], $resArr["parent"], $resArr["comment"], $resArr["date"], $resArr["owner"], $resArr["inheritAccess"], $resArr["defaultAccess"], $resArr["sequence"]); $folder->setDMS($dms); return $folder; } /* }}} */ - /* + /** * Get the name of the folder. * * @return string name of folder */ public function getName() { return $this->_name; } - /* - * Set the name of the folder. - * - * @param string $newName set a new name of the folder - */ + /** + * Set the name of the folder. + * + * @param string $newName set a new name of the folder + * @return bool + */ public function setName($newName) { /* {{{ */ $db = $this->_dms->getDB(); @@ -166,8 +216,15 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return true; } /* }}} */ + /** + * @return string + */ public function getComment() { return $this->_comment; } + /** + * @param $newComment + * @return bool + */ public function setComment($newComment) { /* {{{ */ $db = $this->_dms->getDB(); @@ -215,8 +272,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { /** * Returns the parent * - * @return object parent folder or false if there is no parent folder - */ + * @return bool|SeedDMS_Core_Folder + */ public function getParent() { /* {{{ */ if ($this->_id == $this->_dms->rootFolderID || empty($this->_parentID)) { return false; @@ -228,15 +285,15 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return $this->_parent; } /* }}} */ - /** - * Check if the folder is subfolder - * - * This function checks if the passed folder is a subfolder of the current - * folder. - * - * @param object $subFolder potential sub folder - * @return boolean true if passes folder is a subfolder - */ + /** + * Check if the folder is subfolder + * + * This function checks if the passed folder is a subfolder of the current + * folder. + * + * @param SeedDMS_Core_Folder $subfolder + * @return bool true if passes folder is a subfolder + */ function isSubFolder($subfolder) { /* {{{ */ $target_path = $subfolder->getPath(); foreach($target_path as $next_folder) { @@ -252,7 +309,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * This function moves a folder from one parent folder into another parent * folder. It will fail if the root folder is moved. * - * @param object $newParent new parent folder + * @param SeedDMS_Core_Folder $newParent new parent folder * @return boolean true if operation was successful otherwise false */ public function setParent($newParent) { /* {{{ */ @@ -306,7 +363,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { foreach ($resArr as $row) { $newPath = preg_replace("/^.*:".$this->_id.":(.*$)/", $pathPrefix."\\1", $row["folderList"]); $queryStr="UPDATE `tblDocuments` SET `folderList` = '".$newPath."' WHERE `tblDocuments`.`id` = '".$row["id"]."'"; - $res = $db->getResult($queryStr); + /** @noinspection PhpUnusedLocalVariableInspection */ + $res = $db->getResult($queryStr); } /* Update path in folderList for all documents */ @@ -318,7 +376,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { foreach ($resArr as $row) { $newPath = preg_replace("/^.*:".$this->_id.":(.*$)/", $pathPrefix."\\1", $row["folderList"]); $queryStr="UPDATE `tblFolders` SET `folderList` = '".$newPath."' WHERE `tblFolders`.`id` = '".$row["id"]."'"; - $res = $db->getResult($queryStr); + /** @noinspection PhpUnusedLocalVariableInspection */ + $res = $db->getResult($queryStr); } return true; @@ -338,7 +397,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { /** * Set the owner * - * @param object new owner of the folder + * @param SeedDMS_Core_User $newOwner of the folder * @return boolean true if successful otherwise false */ function setOwner($newOwner) { /* {{{ */ @@ -353,6 +412,9 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return true; } /* }}} */ + /** + * @return bool|int + */ function getDefaultAccess() { /* {{{ */ if ($this->inheritsAccess()) { $res = $this->getParent(); @@ -363,15 +425,16 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return $this->_defaultAccess; } /* }}} */ - /** - * Set default access mode - * - * This method sets the default access mode and also removes all notifiers which - * will not have read access anymore. - * - * @param integer $mode access mode - * @param boolean $noclean set to true if notifier list shall not be clean up - */ + /** + * Set default access mode + * + * This method sets the default access mode and also removes all notifiers which + * will not have read access anymore. + * + * @param integer $mode access mode + * @param boolean $noclean set to true if notifier list shall not be clean up + * @return bool + */ function setDefaultAccess($mode, $noclean=false) { /* {{{ */ $db = $this->_dms->getDB(); @@ -443,7 +506,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { function hasSubFolders() { /* {{{ */ $db = $this->_dms->getDB(); if (isset($this->_subFolders)) { - return count($this->subFolders); + /** @noinspection PhpUndefinedFieldInspection */ + return count($this->subFolders); /** @todo not $this->_subFolders? */ } $queryStr = "SELECT count(*) as c FROM `tblFolders` WHERE `parent` = " . $this->_id; $resArr = $db->getResultArray($queryStr); @@ -462,8 +526,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * @param string $orderby if set to 'n' the list is ordered by name, otherwise * it will be ordered by sequence * @param string $dir direction of sorting (asc or desc) - * @return array list of folder objects or false in case of an error - */ + * @return SeedDMS_Core_Folder[]|bool + */ function getSubFolders($orderby="", $dir="asc") { /* {{{ */ $db = $this->_dms->getDB(); @@ -497,8 +561,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * @param integer $sequence position of folder in list of sub folders. * @param array $attributes list of document attributes. The element key * must be the id of the attribute definition. - * @return object object of type SeedDMS_Core_Folder or false in case of - * an error. + * @return bool|SeedDMS_Core_Folder + * an error. */ function addSubFolder($name, $comment, $owner, $sequence, $attributes=array()) { /* {{{ */ $db = $this->_dms->getDB(); @@ -540,7 +604,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { /* Check if 'onPostAddSubFolder' callback is set */ if(isset($this->_dms->callbacks['onPostAddSubFolder'])) { foreach($this->_dms->callbacks['onPostAddSubFolder'] as $callback) { - if(!call_user_func($callback[0], $callback[1], $newFolder)) { + /** @noinspection PhpStatementHasEmptyBodyInspection */ + if(!call_user_func($callback[0], $callback[1], $newFolder)) { } } } @@ -618,7 +683,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { function hasDocuments() { /* {{{ */ $db = $this->_dms->getDB(); if (isset($this->_documents)) { - return count($this->documents); + /** @noinspection PhpUndefinedFieldInspection */ + return count($this->documents); /** @todo not $this->_documents? */ } $queryStr = "SELECT count(*) as c FROM `tblDocuments` WHERE `folder` = " . $this->_id; $resArr = $db->getResultArray($queryStr); @@ -628,16 +694,18 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return $resArr[0]['c']; } /* }}} */ - /** - * Check if folder has document with given name - * - * @return boolean true if document exists, false if not or in case - * of an error - */ + /** + * Check if folder has document with given name + * + * @param string $name + * @return bool true if document exists, false if not or in case + * of an error + */ function hasDocumentByName($name) { /* {{{ */ $db = $this->_dms->getDB(); if (isset($this->_documents)) { - return count($this->documents); + /** @noinspection PhpUndefinedFieldInspection */ /** @todo not $this->_documents? */ + return count($this->documents); } $queryStr = "SELECT count(*) as c FROM `tblDocuments` WHERE `folder` = " . $this->_id . " AND `name` = ".$db->qstr($name); $resArr = $db->getResultArray($queryStr); @@ -656,8 +724,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * @param string $orderby if set to 'n' the list is ordered by name, otherwise * it will be ordered by sequence * @param string $dir direction of sorting (asc or desc) - * @return array list of documents or false in case of an error - */ + * @return SeedDMS_Core_Document[]|bool + */ function getDocuments($orderby="", $dir="asc") { /* {{{ */ $db = $this->_dms->getDB(); @@ -682,29 +750,30 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return $this->_documents; } /* }}} */ - /** - * Count all documents and subfolders of the folder - * - * This function also counts documents and folders of subfolders, so - * basically it works like recursively counting children. - * - * This function checks for access rights up the given limit. If more - * documents or folders are found, the returned value will be the number - * of objects available and the precise flag in the return array will be - * set to false. This number should not be revelead to the - * user, because it allows to gain information about the existens of - * objects without access right. - * Setting the parameter $limit to 0 will turn off access right checking - * which is reasonable if the $user is an administrator. - * - * @param string $orderby if set to 'n' the list is ordered by name, otherwise - * it will be ordered by sequence - * @param integer $limit maximum number of folders and documents that will - * be precisly counted by taken the access rights into account - * @return array array with four elements 'document_count', 'folder_count' - * 'document_precise', 'folder_precise' holding - * the counted number and a flag if the number is precise. - */ + /** + * Count all documents and subfolders of the folder + * + * This function also counts documents and folders of subfolders, so + * basically it works like recursively counting children. + * + * This function checks for access rights up the given limit. If more + * documents or folders are found, the returned value will be the number + * of objects available and the precise flag in the return array will be + * set to false. This number should not be revelead to the + * user, because it allows to gain information about the existens of + * objects without access right. + * Setting the parameter $limit to 0 will turn off access right checking + * which is reasonable if the $user is an administrator. + * + * @param SeedDMS_Core_User $user + * @param integer $limit maximum number of folders and documents that will + * be precisly counted by taken the access rights into account + * @return array|bool with four elements 'document_count', 'folder_count' + * 'document_precise', 'folder_precise' holding + * the counted number and a flag if the number is precise. + * @internal param string $orderby if set to 'n' the list is ordered by name, otherwise + * it will be ordered by sequence + */ function countChildren($user, $limit=10000) { /* {{{ */ $db = $this->_dms->getDB(); @@ -771,38 +840,38 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { } /* }}} */ // $comment will be used for both document and version leaving empty the version_comment - /** - * Add a new document to the folder - * This function will add a new document and its content from a given file. - * It does not check for access rights on the folder. The new documents - * default access right is read only and the access right is inherited. - * - * @param string $name name of new document - * @param string $comment comment of new document - * @param integer $expires expiration date as a unix timestamp or 0 for no - * expiration date - * @param object $owner owner of the new document - * @param string $keywords keywords of new document - * @param array $categories list of category ids - * @param string $tmpFile the path of the file containing the content - * @param string $orgFileName the original file name - * @param string $fileType usually the extension of the filename - * @param string $mimeType mime type of the content - * @param float $sequence position of new document within the folder - * @param array $reviewers list of users who must review this document - * @param array $approvers list of users who must approve this document - * @param string $reqversion version number of the content - * @param string $version_comment comment of the content. If left empty - * the $comment will be used. - * @param array $attributes list of document attributes. The element key - * must be the id of the attribute definition. - * @param array $version_attributes list of document version attributes. - * The element key must be the id of the attribute definition. - * @param object $workflow - * @return array/boolean false in case of error, otherwise an array - * containing two elements. The first one is the new document, the - * second one is the result set returned when inserting the content. - */ + /** + * Add a new document to the folder + * This function will add a new document and its content from a given file. + * It does not check for access rights on the folder. The new documents + * default access right is read only and the access right is inherited. + * + * @param string $name name of new document + * @param string $comment comment of new document + * @param integer $expires expiration date as a unix timestamp or 0 for no + * expiration date + * @param object $owner owner of the new document + * @param SeedDMS_Core_User $keywords keywords of new document + * @param array $categories list of category ids + * @param string $tmpFile the path of the file containing the content + * @param string $orgFileName the original file name + * @param string $fileType usually the extension of the filename + * @param string $mimeType mime type of the content + * @param float $sequence position of new document within the folder + * @param array $reviewers list of users who must review this document + * @param array $approvers list of users who must approve this document + * @param int|string $reqversion version number of the content + * @param string $version_comment comment of the content. If left empty + * the $comment will be used. + * @param array $attributes list of document attributes. The element key + * must be the id of the attribute definition. + * @param array $version_attributes list of document version attributes. + * The element key must be the id of the attribute definition. + * @param SeedDMS_Core_Workflow $workflow + * @return array|bool false in case of error, otherwise an array + * containing two elements. The first one is the new document, the + * second one is the result set returned when inserting the content. + */ function addDocument($name, $comment, $expires, $owner, $keywords, $categories, $tmpFile, $orgFileName, $fileType, $mimeType, $sequence, $reviewers=array(), $approvers=array(),$reqversion=0,$version_comment="", $attributes=array(), $version_attributes=array(), $workflow=null) { /* {{{ */ $db = $this->_dms->getDB(); @@ -859,7 +928,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { /* Check if 'onPostAddDocument' callback is set */ if(isset($this->_dms->callbacks['onPostAddDocument'])) { foreach($this->_dms->callbacks['onPostAddDocument'] as $callback) { - if(!call_user_func($callback[0], $callback[1], $document)) { + /** @noinspection PhpStatementHasEmptyBodyInspection */ + if(!call_user_func($callback[0], $callback[1], $document)) { } } } @@ -923,7 +993,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { /* Check if 'onPostRemoveFolder' callback is set */ if(isset($this->_dms->callbacks['onPostRemoveFolder'])) { foreach($this->_dms->callbacks['onPostRemoveFolder'] as $callback) { - if(!call_user_func($callback[0], $callback[1], $this->_id)) { + /** @noinspection PhpStatementHasEmptyBodyInspection */ + if(!call_user_func($callback[0], $callback[1], $this->_id)) { } } } @@ -939,7 +1010,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * @return boolean true on success, false in case of an error */ function remove() { /* {{{ */ - $db = $this->_dms->getDB(); + /** @noinspection PhpUnusedLocalVariableInspection */ + $db = $this->_dms->getDB(); // Do not delete the root folder. if ($this->_id == $this->_dms->rootFolderID || !isset($this->_parentID) || ($this->_parentID == null) || ($this->_parentID == "") || ($this->_parentID == 0)) { @@ -969,24 +1041,24 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return $this->removeFromDatabase(); } /* }}} */ - /** - * Returns a list of access privileges - * - * If the folder inherits the access privileges from the parent folder - * those will be returned. - * $mode and $op can be set to restrict the list of returned access - * privileges. If $mode is set to M_ANY no restriction will apply - * regardless of the value of $op. The returned array contains a list - * of {@link SeedDMS_Core_UserAccess} and - * {@link SeedDMS_Core_GroupAccess} objects. Even if the document - * has no access list the returned array contains the two elements - * 'users' and 'groups' which are than empty. The methode returns false - * if the function fails. - * - * @param integer $mode access mode (defaults to M_ANY) - * @param integer $op operation (defaults to O_EQ) - * @return array multi dimensional array - */ + /** + * Returns a list of access privileges + * + * If the folder inherits the access privileges from the parent folder + * those will be returned. + * $mode and $op can be set to restrict the list of returned access + * privileges. If $mode is set to M_ANY no restriction will apply + * regardless of the value of $op. The returned array contains a list + * of {@link SeedDMS_Core_UserAccess} and + * {@link SeedDMS_Core_GroupAccess} objects. Even if the document + * has no access list the returned array contains the two elements + * 'users' and 'groups' which are than empty. The methode returns false + * if the function fails. + * + * @param int $mode access mode (defaults to M_ANY) + * @param int|string $op operation (defaults to O_EQ) + * @return bool|SeedDMS_Core_GroupAccess|SeedDMS_Core_UserAccess + */ function getAccessList($mode = M_ANY, $op = O_EQ) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1043,16 +1115,17 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return true; } /* }}} */ - /** - * Add access right to folder - * This function may change in the future. Instead of passing the a flag - * and a user/group id a user or group object will be expected. - * - * @param integer $mode access mode - * @param integer $userOrGroupID id of user or group - * @param integer $isUser set to 1 if $userOrGroupID is the id of a - * user - */ + /** + * Add access right to folder + * This function may change in the future. Instead of passing the a flag + * and a user/group id a user or group object will be expected. + * + * @param integer $mode access mode + * @param integer $userOrGroupID id of user or group + * @param integer $isUser set to 1 if $userOrGroupID is the id of a + * user + * @return bool + */ function addAccess($mode, $userOrGroupID, $isUser) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1073,16 +1146,17 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return true; } /* }}} */ - /** - * Change access right of folder - * This function may change in the future. Instead of passing the a flag - * and a user/group id a user or group object will be expected. - * - * @param integer $newMode access mode - * @param integer $userOrGroupID id of user or group - * @param integer $isUser set to 1 if $userOrGroupID is the id of a - * user - */ + /** + * Change access right of folder + * This function may change in the future. Instead of passing the a flag + * and a user/group id a user or group object will be expected. + * + * @param integer $newMode access mode + * @param integer $userOrGroupID id of user or group + * @param integer $isUser set to 1 if $userOrGroupID is the id of a + * user + * @return bool + */ function changeAccess($newMode, $userOrGroupID, $isUser) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1102,6 +1176,11 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return true; } /* }}} */ + /** + * @param $userOrGroupID + * @param $isUser + * @return bool + */ function removeAccess($userOrGroupID, $isUser) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1158,7 +1237,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $accessList = $this->getAccessList(); if (!$accessList) return false; - foreach ($accessList["users"] as $userAccess) { + /** @var SeedDMS_Core_UserAccess $userAccess */ + foreach ($accessList["users"] as $userAccess) { if ($userAccess->getUserID() == $user->getID()) { $mode = $userAccess->getMode(); if ($user->isGuest()) { @@ -1171,7 +1251,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { /* Get the highest right defined by a group */ if($accessList['groups']) { $mode = 0; - foreach ($accessList["groups"] as $groupAccess) { + /** @var SeedDMS_Core_GroupAccess $groupAccess */ + foreach ($accessList["groups"] as $groupAccess) { if ($user->isMemberOfGroup($groupAccess->getGroup())) { if ($groupAccess->getMode() > $mode) $mode = $groupAccess->getMode(); @@ -1198,7 +1279,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { * applied to get the access mode is the same as describe at * {@link getAccessMode} * - * @param object $group group for which access shall be checked + * @param SeedDMS_Core_Group $group group for which access shall be checked * @return integer access mode */ function getGroupAccessMode($group) { /* {{{ */ @@ -1208,7 +1289,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { if (!$accessList) return false; - foreach ($accessList["groups"] as $groupAccess) { + /** @var SeedDMS_Core_GroupAccess $groupAccess */ + foreach ($accessList["groups"] as $groupAccess) { if ($groupAccess->getGroupID() == $group->getID()) { $foundInACL = true; if ($groupAccess->getMode() > $highestPrivileged) @@ -1224,13 +1306,14 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return $this->getDefaultAccess(); } /* }}} */ - /** + /** @noinspection PhpUnusedParameterInspection */ + /** * Get a list of all notification * This function returns all users and groups that have registerd a * notification for the folder * * @param integer $type type of notification (not yet used) - * @return array array with a the elements 'users' and 'groups' which + * @return SeedDMS_Core_User[]|SeedDMS_Core_Group[]|bool array with a the elements 'users' and 'groups' which * contain a list of users and groups. */ function getNotifyList($type=0) { /* {{{ */ @@ -1272,6 +1355,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { /* Make a copy of both notifier lists because removeNotify will empty * $this->_notifyList and the second foreach will not work anymore. */ + /** @var SeedDMS_Core_User[] $nusers */ $nusers = $this->_notifyList["users"]; $ngroups = $this->_notifyList["groups"]; foreach ($nusers as $u) { @@ -1279,6 +1363,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $this->removeNotify($u->getID(), true); } } + + /** @var SeedDMS_Core_Group[] $ngroups */ foreach ($ngroups as $g) { if ($this->getGroupAccessMode($g) < M_READ) { $this->removeNotify($g->getID(), false); @@ -1286,7 +1372,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { } } /* }}} */ - /* + /** * Add a user/group to the notification list * This function does not check if the currently logged in user * is allowed to add a notification. This must be checked by the calling @@ -1307,6 +1393,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { $userOrGroup = ($isUser) ? "`userID`" : "`groupID`"; /* Verify that user / group exists */ + /** @var SeedDMS_Core_User|SeedDMS_Core_Group $obj */ $obj = ($isUser ? $this->_dms->getUser($userOrGroupID) : $this->_dms->getGroup($userOrGroupID)); if (!is_object($obj)) { return -1; @@ -1356,7 +1443,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { // that the current group has not been explicitly excluded. $acl = $this->getAccessList(M_NONE, O_EQ); $found = false; - foreach ($acl["groups"] as $group) { + /** @var SeedDMS_Core_GroupAccess $group */ + foreach ($acl["groups"] as $group) { if ($group->getGroupID() == $userOrGroupID) { $found = true; break; @@ -1374,7 +1462,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return -4; } $found = false; - foreach ($acl["groups"] as $group) { + /** @var SeedDMS_Core_GroupAccess $group */ + foreach ($acl["groups"] as $group) { if ($group->getGroupID() == $userOrGroupID) { $found = true; break; @@ -1407,21 +1496,21 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return 0; } /* }}} */ - /* - * Removes notify for a user or group to folder - * This function does not check if the currently logged in user - * is allowed to remove a notification. This must be checked by the calling - * application. - * - * @param integer $userOrGroupID - * @param boolean $isUser true if $userOrGroupID is a user id otherwise false - * @param $type type of notification (0 will delete all) Not used yet! - * @return integer error code - * -1: Invalid User/Group ID. - * -3: User is not subscribed. - * -4: Database / internal error. - * 0: Update successful. - */ + /** + * Removes notify for a user or group to folder + * This function does not check if the currently logged in user + * is allowed to remove a notification. This must be checked by the calling + * application. + * + * @param integer $userOrGroupID + * @param boolean $isUser true if $userOrGroupID is a user id otherwise false + * @param int $type type of notification (0 will delete all) Not used yet! + * @return int error code + * -1: Invalid User/Group ID. + * -3: User is not subscribed. + * -4: Database / internal error. + * 0: Update successful. + */ function removeNotify($userOrGroupID, $isUser, $type=0) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1494,17 +1583,16 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return $this->getReadAccessList(0, 0); } /* }}} */ - /** - * Returns a list of groups and users with read access on the folder - * The list will not include any guest users, - * administrators and the owner of the folder unless $listadmin resp. - * $listowner is set to true. - * - * @param boolean $listadmin if set to true any admin will be listed too - * @param boolean $listowner if set to true the owner will be listed too - * - * @return array list of users and groups - */ + /** + * Returns a list of groups and users with read access on the folder + * The list will not include any guest users, + * administrators and the owner of the folder unless $listadmin resp. + * $listowner is set to true. + * + * @param bool|int $listadmin if set to true any admin will be listed too + * @param bool|int $listowner if set to true the owner will be listed too + * @return array list of users and groups + */ function getReadAccessList($listadmin=0, $listowner=0) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1530,9 +1618,12 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { // to the folder. $tmpList = $this->getAccessList(M_NONE, O_LTEQ); } + /** @var SeedDMS_Core_GroupAccess $groupAccess */ foreach ($tmpList["groups"] as $groupAccess) { $groupIDs .= (strlen($groupIDs)==0 ? "" : ", ") . $groupAccess->getGroupID(); } + + /** @var SeedDMS_Core_UserAccess $userAccess */ foreach ($tmpList["users"] as $userAccess) { $user = $userAccess->getUser(); if (!$listadmin && $user->isAdmin()) continue; @@ -1671,6 +1762,4 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object { return true; } /* }}} */ -} - -?> +} \ No newline at end of file From fd5f341cb92eaece7cb60fa93e4d95e3265fb6bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Neugebauer?= Date: Wed, 8 Nov 2017 13:54:49 +0100 Subject: [PATCH 008/296] SeedDMS_Core --- SeedDMS_Core/Core.php | 2 - SeedDMS_Core/Core/inc.ClassGroup.php | 68 +++- SeedDMS_Core/Core/inc.ClassKeywords.php | 49 ++- SeedDMS_Core/Core/inc.ClassUser.php | 277 +++++++++++---- SeedDMS_Core/Core/inc.ClassWorkflow.php | 410 ++++++++++++++++------ SeedDMS_Core/Core/inc.DBAccess.php | 67 ++-- SeedDMS_Core/Core/inc.DBAccessPDO.php | 98 +++--- SeedDMS_Core/Core/inc.FileUtils.php | 113 ++++-- SeedDMS_Lucene/Lucene/IndexedDocument.php | 19 +- 9 files changed, 818 insertions(+), 285 deletions(-) diff --git a/SeedDMS_Core/Core.php b/SeedDMS_Core/Core.php index 667a8554c..5006e3777 100644 --- a/SeedDMS_Core/Core.php +++ b/SeedDMS_Core/Core.php @@ -90,5 +90,3 @@ require_once('Core/inc.AccessUtils.php'); * @uses SeedDMS_File */ require_once('Core/inc.FileUtils.php'); - -?> diff --git a/SeedDMS_Core/Core/inc.ClassGroup.php b/SeedDMS_Core/Core/inc.ClassGroup.php index 7f7ab18f9..ab0b71e2e 100644 --- a/SeedDMS_Core/Core/inc.ClassGroup.php +++ b/SeedDMS_Core/Core/inc.ClassGroup.php @@ -36,6 +36,11 @@ class SeedDMS_Core_Group { /* {{{ */ */ protected $_name; + /** + * @var SeedDMS_Core_User[] + */ + protected $_users; + /** * The comment of the user group * @@ -46,7 +51,7 @@ class SeedDMS_Core_Group { /* {{{ */ /** * Back reference to DMS this user group belongs to * - * @var object + * @var SeedDMS_Core_DMS */ protected $_dms; @@ -62,10 +67,10 @@ class SeedDMS_Core_Group { /* {{{ */ * * @param string|integer $id Id, name of group, depending * on the 3rd parameter. - * @param object $dms instance of dms + * @param SeedDMS_Core_DMS $dms instance of dms * @param string $by search by group name if set to 'name'. * Search by Id of group if left empty. - * @return object instance of class SeedDMS_Core_Group + * @return SeedDMS_Core_Group|false instance of class SeedDMS_Core_Group */ public static function getInstance($id, $dms, $by='') { /* {{{ */ $db = $dms->getDB(); @@ -91,6 +96,11 @@ class SeedDMS_Core_Group { /* {{{ */ return $group; } /* }}} */ + /** + * @param $orderby + * @param SeedDMS_Core_DMS $dms + * @return array|bool + */ public static function getAllInstances($orderby, $dms) { /* {{{ */ $db = $dms->getDB(); @@ -113,14 +123,27 @@ class SeedDMS_Core_Group { /* {{{ */ return $groups; } /* }}} */ + /** + * @param SeedDMS_Core_DMS $dms + */ function setDMS($dms) { /* {{{ */ $this->_dms = $dms; } /* }}} */ + /** + * @return int + */ function getID() { return $this->_id; } + /** + * @return string + */ function getName() { return $this->_name; } + /** + * @param $newName + * @return bool + */ function setName($newName) { /* {{{ */ $db = $this->_dms->getDB(); @@ -132,8 +155,15 @@ class SeedDMS_Core_Group { /* {{{ */ return true; } /* }}} */ + /** + * @return string + */ function getComment() { return $this->_comment; } + /** + * @param $newComment + * @return bool + */ function setComment($newComment) { /* {{{ */ $db = $this->_dms->getDB(); @@ -145,6 +175,9 @@ class SeedDMS_Core_Group { /* {{{ */ return true; } /* }}} */ + /** + * @return SeedDMS_Core_User[]|bool + */ function getUsers() { /* {{{ */ $db = $this->_dms->getDB(); @@ -159,7 +192,8 @@ class SeedDMS_Core_Group { /* {{{ */ $this->_users = array(); $classname = $this->_dms->getClassname('user'); - foreach ($resArr as $row) { + foreach ($resArr as $row) { + /** @var SeedDMS_Core_User $user */ $user = new $classname($row["id"], $row["login"], $row["pwd"], $row["fullName"], $row["email"], $row["language"], $row["theme"], $row["comment"], $row["role"], $row['hidden']); array_push($this->_users, $user); } @@ -167,6 +201,9 @@ class SeedDMS_Core_Group { /* {{{ */ return $this->_users; } /* }}} */ + /** + * @return SeedDMS_Core_User[]|bool + */ function getManagers() { /* {{{ */ $db = $this->_dms->getDB(); @@ -180,13 +217,19 @@ class SeedDMS_Core_Group { /* {{{ */ $managers = array(); $classname = $this->_dms->getClassname('user'); - foreach ($resArr as $row) { + foreach ($resArr as $row) { + /** @var SeedDMS_Core_User $user */ $user = new $classname($row["id"], $row["login"], $row["pwd"], $row["fullName"], $row["email"], $row["language"], $row["theme"], $row["comment"], $row["role"], $row['hidden']); array_push($managers, $user); } return $managers; } /* }}} */ + /** + * @param SeedDMS_Core_User $user + * @param bool $asManager + * @return bool + */ function addUser($user,$asManager=false) { /* {{{ */ $db = $this->_dms->getDB(); @@ -199,6 +242,10 @@ class SeedDMS_Core_Group { /* {{{ */ return true; } /* }}} */ + /** + * @param SeedDMS_Core_User $user + * @return bool + */ function removeUser($user) { /* {{{ */ $db = $this->_dms->getDB(); @@ -213,7 +260,7 @@ class SeedDMS_Core_Group { /* {{{ */ /** * Check if user is member of group * - * @param object $user user to be checked + * @param SeedDMS_Core_User $user user to be checked * @param boolean $asManager also check whether user is manager of group if * set to true, otherwise does not care about manager status * @return boolean true if user is member, otherwise false @@ -241,7 +288,7 @@ class SeedDMS_Core_Group { /* {{{ */ /** * Toggle manager status of user * - * @param object $user + * @param SeedDMS_Core_User $user * @return boolean true if operation was successful, otherwise false */ function toggleManager($user) { /* {{{ */ @@ -261,7 +308,7 @@ class SeedDMS_Core_Group { /* {{{ */ * This function deletes the user group and all it references, like access * control lists, notifications, as a child of other groups, etc. * - * @param object $user the user doing the removal (needed for entry in + * @param SeedDMS_Core_User $user the user doing the removal (needed for entry in * review log. * @return boolean true on success or false in case of an error */ @@ -405,7 +452,7 @@ class SeedDMS_Core_Group { /* {{{ */ * @param int $documentID optional document id for which to retrieve the * reviews * @param int $version optional version of the document - * @return array list of all workflows + * @return bool|array list of all workflows */ function getWorkflowStatus($documentID=null, $version=null) { /* {{{ */ $db = $this->_dms->getDB(); @@ -432,7 +479,7 @@ class SeedDMS_Core_Group { /* {{{ */ * Get all notifications of group * * @param integer $type type of item (T_DOCUMENT or T_FOLDER) - * @return array array of notifications + * @return SeedDMS_Core_Notification[]|bool array of notifications */ function getNotifications($type=0) { /* {{{ */ $db = $this->_dms->getDB(); @@ -457,4 +504,3 @@ class SeedDMS_Core_Group { /* {{{ */ } /* }}} */ } /* }}} */ -?> diff --git a/SeedDMS_Core/Core/inc.ClassKeywords.php b/SeedDMS_Core/Core/inc.ClassKeywords.php index 0d58457be..0981023d3 100644 --- a/SeedDMS_Core/Core/inc.ClassKeywords.php +++ b/SeedDMS_Core/Core/inc.ClassKeywords.php @@ -42,11 +42,17 @@ class SeedDMS_Core_KeywordCategory { protected $_name; /** - * @var object $_dms reference to dms this category belongs to + * @var SeedDMS_Core_DMS $_dms reference to dms this category belongs to * @access protected */ protected $_dms; + /** + * SeedDMS_Core_KeywordCategory constructor. + * @param $id + * @param $ownerID + * @param $name + */ function __construct($id, $ownerID, $name) { $this->_id = $id; $this->_name = $name; @@ -54,20 +60,36 @@ class SeedDMS_Core_KeywordCategory { $this->_dms = null; } + /** + * @param SeedDMS_Core_DMS $dms + */ function setDMS($dms) { $this->_dms = $dms; } + /** + * @return int + */ function getID() { return $this->_id; } + /** + * @return string + */ function getName() { return $this->_name; } + /** + * @return bool|SeedDMS_Core_User + */ function getOwner() { if (!isset($this->_owner)) $this->_owner = $this->_dms->getUser($this->_ownerID); return $this->_owner; } + /** + * @param $newName + * @return bool + */ function setName($newName) { $db = $this->_dms->getDB(); @@ -79,6 +101,10 @@ class SeedDMS_Core_KeywordCategory { return true; } + /** + * @param SeedDMS_Core_User $user + * @return bool + */ function setOwner($user) { $db = $this->_dms->getDB(); @@ -91,6 +117,9 @@ class SeedDMS_Core_KeywordCategory { return true; } + /** + * @return array + */ function getKeywordLists() { $db = $this->_dms->getDB(); @@ -98,6 +127,11 @@ class SeedDMS_Core_KeywordCategory { return $db->getResultArray($queryStr); } + /** + * @param $listID + * @param $keywords + * @return bool + */ function editKeywordList($listID, $keywords) { $db = $this->_dms->getDB(); @@ -105,6 +139,10 @@ class SeedDMS_Core_KeywordCategory { return $db->getResult($queryStr); } + /** + * @param $keywords + * @return bool + */ function addKeywordList($keywords) { $db = $this->_dms->getDB(); @@ -112,6 +150,10 @@ class SeedDMS_Core_KeywordCategory { return $db->getResult($queryStr); } + /** + * @param $listID + * @return bool + */ function removeKeywordList($listID) { $db = $this->_dms->getDB(); @@ -119,6 +161,9 @@ class SeedDMS_Core_KeywordCategory { return $db->getResult($queryStr); } + /** + * @return bool + */ function remove() { $db = $this->_dms->getDB(); @@ -139,5 +184,3 @@ class SeedDMS_Core_KeywordCategory { return true; } } - -?> diff --git a/SeedDMS_Core/Core/inc.ClassUser.php b/SeedDMS_Core/Core/inc.ClassUser.php index 25260c333..b1aa6aba9 100644 --- a/SeedDMS_Core/Core/inc.ClassUser.php +++ b/SeedDMS_Core/Core/inc.ClassUser.php @@ -117,23 +117,51 @@ class SeedDMS_Core_User { /* {{{ */ var $_loginFailures; /** - * @var object home folder + * @var SeedDMS_Core_Folder home folder * * @access protected */ var $_homeFolder; /** - * @var object reference to the dms instance this user belongs to + * @var SeedDMS_Core_DMS reference to the dms instance this user belongs to * * @access protected */ var $_dms; + /** + * @var int + */ + private $_quota; + + /** + * @var bool + */ + private $_hasImage; + const role_user = '0'; const role_admin = '1'; const role_guest = '2'; + /** + * SeedDMS_Core_User constructor. + * @param $id + * @param $login + * @param $pwd + * @param $fullName + * @param $email + * @param $language + * @param $theme + * @param $comment + * @param $role + * @param int $isHidden + * @param int $isDisabled + * @param string $pwdExpiration + * @param int $loginFailures + * @param int $quota + * @param null $homeFolder + */ 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; @@ -158,12 +186,12 @@ class SeedDMS_Core_User { /* {{{ */ * * @param string|integer $id Id, login name, or email of user, depending * on the 3rd parameter. - * @param object $dms instance of dms + * @param SeedDMS_Core_DMS $dms instance of dms * @param string $by search by [name|email]. If 'name' is passed, the method * will check for the 4th paramater and also filter by email. If this * parameter is left empty, the user will be search by its Id. * @param string $email optional email address if searching for name - * @return object instance of class SeedDMS_Core_User + * @return SeedDMS_Core_User|bool instance of class SeedDMS_Core_User */ public static function getInstance($id, $dms, $by='', $email='') { /* {{{ */ $db = $dms->getDB(); @@ -192,6 +220,11 @@ class SeedDMS_Core_User { /* {{{ */ return $user; } /* }}} */ + /** + * @param $orderby + * @param SeedDMS_Core_DMS $dms + * @return SeedDMS_Core_User[]|bool + */ public static function getAllInstances($orderby, $dms) { /* {{{ */ $db = $dms->getDB(); @@ -207,6 +240,7 @@ class SeedDMS_Core_User { /* {{{ */ $users = array(); for ($i = 0; $i < count($resArr); $i++) { + /** @var SeedDMS_Core_User $user */ $user = new self($resArr[$i]["id"], $resArr[$i]["login"], $resArr[$i]["pwd"], $resArr[$i]["fullName"], $resArr[$i]["email"], (isset($resArr[$i]["language"])?$resArr[$i]["language"]:NULL), (isset($resArr[$i]["theme"])?$resArr[$i]["theme"]:NULL), $resArr[$i]["comment"], $resArr[$i]["role"], $resArr[$i]["hidden"], $resArr[$i]["disabled"], $resArr[$i]["pwdExpiration"], $resArr[$i]["loginfailures"], $resArr[$i]["quota"], $resArr[$i]["homefolder"]); $user->setDMS($dms); $users[$i] = $user; @@ -215,14 +249,27 @@ class SeedDMS_Core_User { /* {{{ */ return $users; } /* }}} */ + /** + * @param SeedDMS_Core_DMS $dms + */ function setDMS($dms) { $this->_dms = $dms; } + /** + * @return int + */ function getID() { return $this->_id; } + /** + * @return string + */ function getLogin() { return $this->_login; } + /** + * @param $newLogin + * @return bool + */ function setLogin($newLogin) { /* {{{ */ $db = $this->_dms->getDB(); @@ -235,8 +282,15 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ + /** + * @return string + */ function getFullName() { return $this->_fullName; } + /** + * @param $newFullName + * @return bool + */ function setFullName($newFullName) { /* {{{ */ $db = $this->_dms->getDB(); @@ -249,8 +303,15 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ + /** + * @return string + */ function getPwd() { return $this->_pwd; } + /** + * @param $newPwd + * @return bool + */ function setPwd($newPwd) { /* {{{ */ $db = $this->_dms->getDB(); @@ -263,8 +324,15 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ + /** + * @return string + */ function getPwdExpiration() { return $this->_pwdExpiration; } + /** + * @param $newPwdExpiration + * @return bool + */ function setPwdExpiration($newPwdExpiration) { /* {{{ */ $db = $this->_dms->getDB(); @@ -283,8 +351,15 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ + /** + * @return string + */ function getEmail() { return $this->_email; } + /** + * @param $newEmail + * @return bool + */ function setEmail($newEmail) { /* {{{ */ $db = $this->_dms->getDB(); @@ -297,9 +372,16 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function getLanguage() { return $this->_language; } + /** + * @return string + */ + function getLanguage() { return $this->_language; } - function setLanguage($newLanguage) { /* {{{ */ + /** + * @param $newLanguage + * @return bool + */ + function setLanguage($newLanguage) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblUsers` SET `language` =".$db->qstr($newLanguage)." WHERE `id` = " . $this->_id; @@ -311,9 +393,16 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function getTheme() { return $this->_theme; } + /** + * @return string + */ + function getTheme() { return $this->_theme; } - function setTheme($newTheme) { /* {{{ */ + /** + * @param string $newTheme + * @return bool + */ + function setTheme($newTheme) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblUsers` SET `theme` =".$db->qstr($newTheme)." WHERE `id` = " . $this->_id; @@ -325,9 +414,16 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function getComment() { return $this->_comment; } + /** + * @return string + */ + function getComment() { return $this->_comment; } - function setComment($newComment) { /* {{{ */ + /** + * @param $newComment + * @return bool + */ + function setComment($newComment) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblUsers` SET `comment` =".$db->qstr($newComment)." WHERE `id` = " . $this->_id; @@ -339,9 +435,16 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function getRole() { return $this->_role; } + /** + * @return string + */ + function getRole() { return $this->_role; } - function setRole($newrole) { /* {{{ */ + /** + * @param $newrole + * @return bool + */ + function setRole($newrole) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblUsers` SET `role` = " . $newrole . " WHERE `id` = " . $this->_id; @@ -352,9 +455,15 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function isAdmin() { return ($this->_role == SeedDMS_Core_User::role_admin); } + /** + * @return bool + */ + function isAdmin() { return ($this->_role == SeedDMS_Core_User::role_admin); } - function setAdmin($isAdmin) { /* {{{ */ + /** + * @return bool + */ + function setAdmin() { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblUsers` SET `role` = " . SeedDMS_Core_User::role_admin . " WHERE `id` = " . $this->_id; @@ -365,9 +474,15 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function isGuest() { return ($this->_role == SeedDMS_Core_User::role_guest); } + /** + * @return bool + */ + function isGuest() { return ($this->_role == SeedDMS_Core_User::role_guest); } - function setGuest($isGuest) { /* {{{ */ + /** + * @return bool + */ + function setGuest() { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblUsers` SET `role` = " . SeedDMS_Core_User::role_guest . " WHERE `id` = " . $this->_id; @@ -378,9 +493,16 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function isHidden() { return $this->_isHidden; } + /** + * @return bool|int + */ + function isHidden() { return $this->_isHidden; } - function setHidden($isHidden) { /* {{{ */ + /** + * @param $isHidden + * @return bool + */ + function setHidden($isHidden) { /* {{{ */ $db = $this->_dms->getDB(); $isHidden = ($isHidden) ? "1" : "0"; @@ -392,9 +514,16 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function isDisabled() { return $this->_isDisabled; } + /** + * @return bool|int + */ + function isDisabled() { return $this->_isDisabled; } - function setDisabled($isDisabled) { /* {{{ */ + /** + * @param $isDisabled + * @return bool + */ + function setDisabled($isDisabled) { /* {{{ */ $db = $this->_dms->getDB(); $isDisabled = ($isDisabled) ? "1" : "0"; @@ -406,7 +535,10 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function addLoginFailure() { /* {{{ */ + /** + * @return bool|int + */ + function addLoginFailure() { /* {{{ */ $db = $this->_dms->getDB(); $this->_loginFailures++; @@ -417,7 +549,10 @@ class SeedDMS_Core_User { /* {{{ */ return $this->_loginFailures; } /* }}} */ - function clearLoginFailures() { /* {{{ */ + /** + * @return bool + */ + function clearLoginFailures() { /* {{{ */ $db = $this->_dms->getDB(); $this->_loginFailures = 0; @@ -447,9 +582,16 @@ class SeedDMS_Core_User { /* {{{ */ return $resArr[0]['sum']; } /* }}} */ - function getQuota() { return $this->_quota; } + /** + * @return int + */ + function getQuota() { return $this->_quota; } - function setQuota($quota) { /* {{{ */ + /** + * @param $quota + * @return bool + */ + function setQuota($quota) { /* {{{ */ $db = $this->_dms->getDB(); $quota = intval($quota); @@ -461,9 +603,16 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - function getHomeFolder() { return $this->_homeFolder; } + /** + * @return null|SeedDMS_Core_Folder + */ + function getHomeFolder() { return $this->_homeFolder; } - function setHomeFolder($homefolder) { /* {{{ */ + /** + * @param $homefolder + * @return bool + */ + function setHomeFolder($homefolder) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblUsers` SET `homefolder` = " . ($homefolder ? (int) $homefolder : NULL) . " WHERE `id` = " . $this->_id; @@ -655,9 +804,9 @@ class SeedDMS_Core_User { /* {{{ */ * Do not remove folders and documents of the user, but assign them * to a different user. * - * @param object $user the user doing the removal (needed for entry in + * @param SeedDMS_Core_User $user the user doing the removal (needed for entry in * review and approve log). - * @param object $assignToUser the user who is new owner of folders and + * @param SeedDMS_Core_User $assignToUser the user who is new owner of folders and * documents which previously were owned by the delete user. * @return boolean true on success or false in case of an error */ @@ -670,8 +819,9 @@ class SeedDMS_Core_User { /* {{{ */ * anymore. */ if(!$assignToUser) - return; - $assignTo = $assignToUser->getID(); + return false; + /** @noinspection PhpUnusedLocalVariableInspection */ + $assignTo = $assignToUser->getID(); $db->startTransaction(); @@ -827,7 +977,7 @@ class SeedDMS_Core_User { /* {{{ */ * This function uses {@link SeedDMS_Group::addUser} but checks before if * the user is already a member of the group. * - * @param object $group group to be the member of + * @param SeedDMS_Core_Group $group group to be the member of * @return boolean true on success or false in case of an error or the user * is already a member of the group */ @@ -847,7 +997,7 @@ class SeedDMS_Core_User { /* {{{ */ * This function uses {@link SeedDMS_Group::removeUser} but checks before if * the user is a member of the group at all. * - * @param object $group group to leave + * @param SeedDMS_Core_Group $group group to leave * @return boolean true on success or false in case of an error or the user * is not a member of the group */ @@ -865,7 +1015,7 @@ class SeedDMS_Core_User { /* {{{ */ /** * Get all groups the user is a member of * - * @return array list of groups + * @return SeedDMS_Core_Group[]|bool list of groups */ function getGroups() { /* {{{ */ $db = $this->_dms->getDB(); @@ -882,6 +1032,7 @@ class SeedDMS_Core_User { /* {{{ */ $this->_groups = array(); $classname = $this->_dms->getClassname('group'); foreach ($resArr as $row) { + /** @var SeedDMS_Core_Group $group */ $group = new $classname($row["id"], $row["name"], $row["comment"]); $group->setDMS($this->_dms); array_push($this->_groups, $group); @@ -893,7 +1044,7 @@ class SeedDMS_Core_User { /* {{{ */ /** * Checks if user is member of a given group * - * @param object $group + * @param SeedDMS_Core_Group $group * @return boolean true if user is member of the given group otherwise false */ function isMemberOfGroup($group) { /* {{{ */ @@ -924,7 +1075,7 @@ class SeedDMS_Core_User { /* {{{ */ /** * Get the image from the users profile * - * @return array image data + * @return array|bool image data */ function getImage() { /* {{{ */ $db = $this->_dms->getDB(); @@ -939,7 +1090,12 @@ class SeedDMS_Core_User { /* {{{ */ return $resArr; } /* }}} */ - function setImage($tmpfile, $mimeType) { /* {{{ */ + /** + * @param $tmpfile + * @param $mimeType + * @return bool + */ + function setImage($tmpfile, $mimeType) { /* {{{ */ $db = $this->_dms->getDB(); $fp = fopen($tmpfile, "rb"); @@ -958,12 +1114,10 @@ class SeedDMS_Core_User { /* {{{ */ return true; } /* }}} */ - /** - * Returns all documents of a given user - * - * @param object $user - * @return array list of documents - */ + /** + * Returns all documents of a given user + * @return SeedDMS_Core_Document[]|bool list of documents + */ function getDocuments() { /* {{{ */ $db = $this->_dms->getDB(); @@ -979,6 +1133,7 @@ class SeedDMS_Core_User { /* {{{ */ $documents = array(); $classname = $this->_dms->getClassname('document'); foreach ($resArr as $row) { + /** @var SeedDMS_Core_Document $document */ $document = new $classname($row["id"], $row["name"], $row["comment"], $row["date"], $row["expires"], $row["owner"], $row["folder"], $row["inheritAccess"], $row["defaultAccess"], $row["lockUser"], $row["keywords"], $row["sequence"]); $document->setDMS($this->_dms); $documents[] = $document; @@ -989,8 +1144,7 @@ class SeedDMS_Core_User { /* {{{ */ /** * Returns all documents locked by a given user * - * @param object $user - * @return array list of documents + * @return bool|SeedDMS_Core_Document[] list of documents */ function getDocumentsLocked() { /* {{{ */ $db = $this->_dms->getDB(); @@ -1007,6 +1161,7 @@ class SeedDMS_Core_User { /* {{{ */ $documents = array(); $classname = $this->_dms->getClassname('document'); foreach ($resArr as $row) { + /** @var SeedDMS_Core_Document $document */ $document = new $classname($row["id"], $row["name"], $row["comment"], $row["date"], $row["expires"], $row["owner"], $row["folder"], $row["inheritAccess"], $row["defaultAccess"], $row["lockUser"], $row["keywords"], $row["sequence"]); $document->setDMS($this->_dms); $documents[] = $document; @@ -1032,7 +1187,7 @@ class SeedDMS_Core_User { /* {{{ */ * @param int $documentID optional document id for which to retrieve the * reviews * @param int $version optional version of the document - * @return array list of all reviews + * @return array|bool list of all reviews */ function getReviewStatus($documentID=null, $version=null) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1125,7 +1280,7 @@ class SeedDMS_Core_User { /* {{{ */ * @param int $documentID optional document id for which to retrieve the * approvals * @param int $version optional version of the document - * @return array list of all approvals + * @return array|bool list of all approvals */ function getApprovalStatus($documentID=null, $version=null) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1195,7 +1350,7 @@ class SeedDMS_Core_User { /* {{{ */ * @param int $documentID optional document id for which to retrieve the * reviews * @param int $version optional version of the document - * @return array list of all workflows + * @return array|bool list of all workflows */ function getWorkflowStatus($documentID=null, $version=null) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1237,7 +1392,7 @@ class SeedDMS_Core_User { /* {{{ */ /** * Get a list of workflows this user is involved as in individual * - * @return array list of all workflows + * @return array|bool list of all workflows */ function getWorkflowsInvolved() { /* {{{ */ $db = $this->_dms->getDB(); @@ -1297,7 +1452,7 @@ class SeedDMS_Core_User { /* {{{ */ * This method is the reverse function of getMandatoryReviewers(). It returns * those user where the current user is a mandatory reviewer. * - * @return array list of users where this user is a mandatory reviewer. + * @return SeedDMS_Core_User[]|bool list of users where this user is a mandatory reviewer. */ function isMandatoryReviewerOf() { /* {{{ */ $db = $this->_dms->getDB(); @@ -1320,7 +1475,7 @@ class SeedDMS_Core_User { /* {{{ */ * This method is the reverse function of getMandatoryApprovers(). It returns * those user where the current user is a mandatory approver. * - * @return array list of users where this user is a mandatory approver. + * @return SeedDMS_Core_User[]|bool list of users where this user is a mandatory approver. */ function isMandatoryApproverOf() { /* {{{ */ $db = $this->_dms->getDB(); @@ -1344,7 +1499,7 @@ class SeedDMS_Core_User { /* {{{ */ * Whenever the user inserts a new document the mandatory workflow is * filled in as the workflow. * - * @return object workflow + * @return SeedDMS_Core_Workflow|bool workflow */ function getMandatoryWorkflow() { /* {{{ */ $db = $this->_dms->getDB(); @@ -1367,7 +1522,7 @@ class SeedDMS_Core_User { /* {{{ */ * Whenever the user inserts a new document the mandatory workflow is * filled in as the workflow. * - * @return object workflow + * @return SeedDMS_Core_Workflow[]|bool workflow */ function getMandatoryWorkflows() { /* {{{ */ $db = $this->_dms->getDB(); @@ -1418,6 +1573,7 @@ class SeedDMS_Core_User { /* {{{ */ if (is_bool($resArr) && !$resArr) return false; } + return false; } /* }}} */ /** @@ -1435,7 +1591,7 @@ class SeedDMS_Core_User { /* {{{ */ $queryStr = "SELECT * FROM `tblMandatoryApprovers` WHERE `userID` = " . $this->_id . " AND `approverGroupID` = " . (int) $id; $resArr = $db->getResultArray($queryStr); - if (count($resArr)!=0) return; + if (count($resArr)!=0) return true; $queryStr = "INSERT INTO `tblMandatoryApprovers` (`userID`, `approverGroupID`) VALUES (" . $this->_id . ", " . $id .")"; $resArr = $db->getResult($queryStr); @@ -1445,12 +1601,14 @@ class SeedDMS_Core_User { /* {{{ */ $queryStr = "SELECT * FROM `tblMandatoryApprovers` WHERE `userID` = " . $this->_id . " AND `approverUserID` = " . (int) $id; $resArr = $db->getResultArray($queryStr); - if (count($resArr)!=0) return; + if (count($resArr)!=0) return true; $queryStr = "INSERT INTO `tblMandatoryApprovers` (`userID`, `approverUserID`) VALUES (" . $this->_id . ", " . $id .")"; $resArr = $db->getResult($queryStr); if (is_bool($resArr) && !$resArr) return false; } + + return false; } /* }}} */ /** @@ -1465,18 +1623,20 @@ class SeedDMS_Core_User { /* {{{ */ $queryStr = "SELECT * FROM `tblWorkflowMandatoryWorkflow` WHERE `userid` = " . $this->_id . " AND `workflow` = " . (int) $workflow->getID(); $resArr = $db->getResultArray($queryStr); - if (count($resArr)!=0) return; + if (count($resArr)!=0) return true; $queryStr = "INSERT INTO `tblWorkflowMandatoryWorkflow` (`userid`, `workflow`) VALUES (" . $this->_id . ", " . $workflow->getID() .")"; $resArr = $db->getResult($queryStr); if (is_bool($resArr) && !$resArr) return false; + + return false; } /* }}} */ /** * Set a mandatory workflows * This function sets a list of mandatory workflows. * - * @param array $workflows list of workflow objects + * @param SeedDMS_Core_Workflow[] $workflows list of workflow objects * @return boolean true on success, otherwise false */ function setMandatoryWorkflows($workflows) { /* {{{ */ @@ -1543,7 +1703,7 @@ class SeedDMS_Core_User { /* {{{ */ * Get all notifications of user * * @param integer $type type of item (T_DOCUMENT or T_FOLDER) - * @return array array of notifications + * @return SeedDMS_Core_Notification[]|bool array of notifications */ function getNotifications($type=0) { /* {{{ */ $db = $this->_dms->getDB(); @@ -1570,7 +1730,7 @@ class SeedDMS_Core_User { /* {{{ */ /** * Return list of personal keyword categories * - * @return array/boolean list of categories or false in case of an error + * @return SeedDMS_Core_KeywordCategory[]|bool list of categories or false in case of an error */ function getKeywordCategories() { /* {{{ */ $db = $this->_dms->getDB(); @@ -1592,4 +1752,3 @@ class SeedDMS_Core_User { /* {{{ */ } /* }}} */ } /* }}} */ -?> diff --git a/SeedDMS_Core/Core/inc.ClassWorkflow.php b/SeedDMS_Core/Core/inc.ClassWorkflow.php index 474ae3c3c..3360f5d19 100644 --- a/SeedDMS_Core/Core/inc.ClassWorkflow.php +++ b/SeedDMS_Core/Core/inc.ClassWorkflow.php @@ -29,33 +29,39 @@ class SeedDMS_Core_Workflow { /* {{{ */ var $_id; /** - * @var name of the workflow + * @var string name of the workflow * * @access protected */ var $_name; /** - * @var initial state of the workflow + * @var SeedDMS_Core_Workflow_State initial state of the workflow * * @access protected */ var $_initstate; /** - * @var name of the workflow state + * @var SeedDMS_Core_Workflow_Transition[] name of the workflow state * * @access protected */ var $_transitions; /** - * @var object reference to the dms instance this attribute belongs to + * @var SeedDMS_Core_DMS reference to the dms instance this attribute belongs to * * @access protected */ var $_dms; + /** + * SeedDMS_Core_Workflow constructor. + * @param int $id + * @param string $name + * @param SeedDMS_Core_Workflow_State $initstate + */ function __construct($id, $name, $initstate) { /* {{{ */ $this->_id = $id; $this->_name = $name; @@ -64,15 +70,28 @@ class SeedDMS_Core_Workflow { /* {{{ */ $this->_dms = null; } /* }}} */ - function setDMS($dms) { /* {{{ */ + /** + * @param SeedDMS_Core_DMS $dms + */ + function setDMS($dms) { /* {{{ */ $this->_dms = $dms; } /* }}} */ - function getID() { return $this->_id; } + /** + * @return int + */ + function getID() { return $this->_id; } - function getName() { return $this->_name; } + /** + * @return string + */ + function getName() { return $this->_name; } - function setName($newName) { /* {{{ */ + /** + * @param $newName + * @return bool + */ + function setName($newName) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflows` SET `name` = ".$db->qstr($newName)." WHERE `id` = " . $this->_id; @@ -84,9 +103,16 @@ class SeedDMS_Core_Workflow { /* {{{ */ return true; } /* }}} */ - function getInitState() { return $this->_initstate; } + /** + * @return SeedDMS_Core_Workflow_State + */ + function getInitState() { return $this->_initstate; } - function setInitState($state) { /* {{{ */ + /** + * @param SeedDMS_Core_Workflow_State $state + * @return bool + */ + function setInitState($state) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflows` SET `initstate` = ".$state->getID()." WHERE `id` = " . $this->_id; @@ -98,7 +124,10 @@ class SeedDMS_Core_Workflow { /* {{{ */ return true; } /* }}} */ - function getTransitions() { /* {{{ */ + /** + * @return SeedDMS_Core_Workflow_Transition[]|bool + */ + function getTransitions() { /* {{{ */ $db = $this->_dms->getDB(); if($this->_transitions) @@ -121,8 +150,12 @@ class SeedDMS_Core_Workflow { /* {{{ */ return $this->_transitions; } /* }}} */ - function getStates() { /* {{{ */ - $db = $this->_dms->getDB(); + /** + * @return array + */ + function getStates() { /* {{{ */ + /** @noinspection PhpUnusedLocalVariableInspection */ + $db = $this->_dms->getDB(); if(!$this->_transitions) $this->getTransitions(); @@ -138,14 +171,15 @@ class SeedDMS_Core_Workflow { /* {{{ */ return $states; } /* }}} */ - /** - * Get the transition by its id - * - * @param integer $id id of transition - * @param object transition - */ + /** + * Get the transition by its id + * + * @param integer $id id of transition + * @return bool|SeedDMS_Core_Workflow_Transition + */ function getTransition($id) { /* {{{ */ - $db = $this->_dms->getDB(); + /** @noinspection PhpUnusedLocalVariableInspection */ + $db = $this->_dms->getDB(); if(!$this->_transitions) $this->getTransitions(); @@ -156,12 +190,12 @@ class SeedDMS_Core_Workflow { /* {{{ */ return false; } /* }}} */ - /** - * Get the transitions that can be triggered while being in the given state - * - * @param object $state current workflow state - * @param array list of transitions - */ + /** + * Get the transitions that can be triggered while being in the given state + * + * @param SeedDMS_Core_Workflow_State $state current workflow state + * @return SeedDMS_Core_Workflow_Transition[]|bool + */ function getNextTransitions($state) { /* {{{ */ $db = $this->_dms->getDB(); @@ -180,12 +214,12 @@ class SeedDMS_Core_Workflow { /* {{{ */ return $wkftransitions; } /* }}} */ - /** - * Get the transitions that lead to the given state - * - * @param object $state current workflow state - * @param array list of transitions - */ + /** + * Get the transitions that lead to the given state + * + * @param SeedDMS_Core_Workflow_State $state current workflow state + * @return SeedDMS_Core_Workflow_Transition[]|bool + */ function getPreviousTransitions($state) { /* {{{ */ $db = $this->_dms->getDB(); @@ -204,13 +238,13 @@ class SeedDMS_Core_Workflow { /* {{{ */ return $wkftransitions; } /* }}} */ - /** - * Get all transitions from one state into another state - * - * @param object $state state to start from - * @param object $nextstate state after transition - * @param array list of transitions - */ + /** + * Get all transitions from one state into another state + * + * @param SeedDMS_Core_Workflow_State $state state to start from + * @param SeedDMS_Core_Workflow_State $nextstate state after transition + * @return SeedDMS_Core_Workflow_Transition[]|bool + */ function getTransitionsByStates($state, $nextstate) { /* {{{ */ $db = $this->_dms->getDB(); @@ -233,7 +267,7 @@ class SeedDMS_Core_Workflow { /* {{{ */ * Remove a transition from a workflow * Deprecated! User SeedDMS_Core_Workflow_Transition::remove() instead. * - * @param object $transition + * @param SeedDMS_Core_Workflow_Transition $transition * @return boolean true if no error occured, otherwise false */ function removeTransition($transition) { /* {{{ */ @@ -243,12 +277,12 @@ class SeedDMS_Core_Workflow { /* {{{ */ /** * Add new transition to workflow * - * @param object $state - * @param object $action - * @param object $nextstate - * @param array $users - * @param array $groups - * @return object instance of new transition + * @param SeedDMS_Core_Workflow_State $state + * @param SeedDMS_Core_Workflow_Action $action + * @param SeedDMS_Core_Workflow_State $nextstate + * @param SeedDMS_Core_User[] $users + * @param SeedDMS_Core_Group[] $groups + * @return SeedDMS_Core_Workflow_Transition|bool instance of new transition */ function addTransition($state, $action, $nextstate, $users, $groups) { /* {{{ */ $db = $this->_dms->getDB(); @@ -301,7 +335,11 @@ class SeedDMS_Core_Workflow { /* {{{ */ return true; } /* }}} */ - private function penetrate($laststates) { + /** + * @param SeedDMS_Core_Workflow_State[] $laststates + * @return SeedDMS_Core_Workflow_State[]|bool + */ + private function penetrate($laststates) { $state = end($laststates); $transitions = $this->getNextTransitions($state); foreach($transitions as $transition) { @@ -323,7 +361,8 @@ class SeedDMS_Core_Workflow { /* {{{ */ * @return boolean list of states if workflow contains cycles, otherwise false */ function checkForCycles() { /* {{{ */ - $db = $this->_dms->getDB(); + /** @noinspection PhpUnusedLocalVariableInspection */ + $db = $this->_dms->getDB(); $initstate = $this->getInitState(); @@ -389,41 +428,49 @@ class SeedDMS_Core_Workflow_State { /* {{{ */ var $_id; /** - * @var name of the workflow state + * @var string name of the workflow state * * @access protected */ var $_name; /** - * @var maximum of seconds allowed in this state + * @var int maximum of seconds allowed in this state * * @access protected */ var $_maxtime; /** - * @var maximum of seconds allowed in this state + * @var int maximum of seconds allowed in this state * * @access protected */ var $_precondfunc; /** - * @var matching documentstatus when this state is reached + * @var int matching documentstatus when this state is reached * * @access protected */ var $_documentstatus; /** - * @var object reference to the dms instance this attribute belongs to + * @var SeedDMS_Core_DMS reference to the dms instance this attribute belongs to * * @access protected */ var $_dms; - function __construct($id, $name, $maxtime, $precondfunc, $documentstatus) { + /** + * SeedDMS_Core_Workflow_State constructor. + * @param $id + * @param $name + * @param $maxtime + * @param $precondfunc + * @param $documentstatus + */ + function __construct($id, $name, $maxtime, $precondfunc, $documentstatus) { $this->_id = $id; $this->_name = $name; $this->_maxtime = $maxtime; @@ -432,15 +479,28 @@ class SeedDMS_Core_Workflow_State { /* {{{ */ $this->_dms = null; } - function setDMS($dms) { + /** + * @param $dms + */ + function setDMS($dms) { $this->_dms = $dms; } - function getID() { return $this->_id; } + /** + * @return int + */ + function getID() { return $this->_id; } - function getName() { return $this->_name; } + /** + * @return string + */ + function getName() { return $this->_name; } - function setName($newName) { /* {{{ */ + /** + * @param string $newName + * @return bool + */ + function setName($newName) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowStates` SET `name` = ".$db->qstr($newName)." WHERE `id` = " . $this->_id; @@ -452,9 +512,16 @@ class SeedDMS_Core_Workflow_State { /* {{{ */ return true; } /* }}} */ - function getMaxTime() { return $this->_maxtime; } + /** + * @return int maximum + */ + function getMaxTime() { return $this->_maxtime; } - function setMaxTime($maxtime) { /* {{{ */ + /** + * @param $maxtime + * @return bool + */ + function setMaxTime($maxtime) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowStates` SET `maxtime` = ".intval($maxtime)." WHERE `id` = " . $this->_id; @@ -466,9 +533,16 @@ class SeedDMS_Core_Workflow_State { /* {{{ */ return true; } /* }}} */ - function getPreCondFunc() { return $this->_precondfunc; } + /** + * @return int maximum + */ + function getPreCondFunc() { return $this->_precondfunc; } - function setPreCondFunc($precondfunc) { /* {{{ */ + /** + * @param $precondfunc + * @return bool + */ + function setPreCondFunc($precondfunc) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowStates` SET `precondfunc` = ".$db->qstr($precondfunc)." WHERE id = " . $this->_id; @@ -476,7 +550,8 @@ class SeedDMS_Core_Workflow_State { /* {{{ */ if (!$res) return false; - $this->_maxtime = $maxtime; + /** @noinspection PhpUndefinedVariableInspection */ + $this->_maxtime = $maxtime; /* @todo fix me */ return true; } /* }}} */ @@ -490,7 +565,11 @@ class SeedDMS_Core_Workflow_State { /* {{{ */ */ function getDocumentStatus() { return $this->_documentstatus; } - function setDocumentStatus($docstatus) { /* {{{ */ + /** + * @param $docstatus + * @return bool + */ + function setDocumentStatus($docstatus) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowStates` SET `documentstatus` = ".intval($docstatus)." WHERE id = " . $this->_id; @@ -520,7 +599,7 @@ class SeedDMS_Core_Workflow_State { /* {{{ */ /** * Return workflow transitions the status is being used in * - * @return array/boolean array of workflow transitions or false in case of an error + * @return SeedDMS_Core_Workflow_Transition[]|boolean array of workflow transitions or false in case of an error */ function getTransitions() { /* {{{ */ $db = $this->_dms->getDB(); @@ -586,34 +665,52 @@ class SeedDMS_Core_Workflow_Action { /* {{{ */ var $_id; /** - * @var name of the workflow action + * @var string name of the workflow action * * @access protected */ var $_name; /** - * @var object reference to the dms instance this attribute belongs to + * @var SeedDMS_Core_DMS reference to the dms instance this attribute belongs to * * @access protected */ var $_dms; - function __construct($id, $name) { + /** + * SeedDMS_Core_Workflow_Action constructor. + * @param $id + * @param $name + */ + function __construct($id, $name) { $this->_id = $id; $this->_name = $name; $this->_dms = null; } - function setDMS($dms) { + /** + * @param $dms + */ + function setDMS($dms) { $this->_dms = $dms; } - function getID() { return $this->_id; } + /** + * @return int + */ + function getID() { return $this->_id; } - function getName() { return $this->_name; } + /** + * @return string name + */ + function getName() { return $this->_name; } - function setName($newName) { /* {{{ */ + /** + * @param $newName + * @return bool + */ + function setName($newName) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowActions` SET `name` = ".$db->qstr($newName)." WHERE `id` = " . $this->_id; @@ -643,7 +740,7 @@ class SeedDMS_Core_Workflow_Action { /* {{{ */ /** * Return workflow transitions the action is being used in * - * @return array/boolean array of workflow transitions or false in case of an error + * @return SeedDMS_Core_Workflow_Transition[]|boolean array of workflow transitions or false in case of an error */ function getTransitions() { /* {{{ */ $db = $this->_dms->getDB(); @@ -709,62 +806,71 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */ var $_id; /** - * @var workflow this transition belongs to + * @var SeedDMS_Core_Workflow workflow this transition belongs to * * @access protected */ var $_workflow; /** - * @var state of the workflow transition + * @var SeedDMS_Core_Workflow_State of the workflow transition * * @access protected */ var $_state; /** - * @var next state of the workflow transition + * @var SeedDMS_Core_Workflow_State next state of the workflow transition * * @access protected */ var $_nextstate; /** - * @var action of the workflow transition + * @var SeedDMS_Core_Workflow_Action of the workflow transition * * @access protected */ var $_action; /** - * @var maximum of seconds allowed until this transition must be triggered + * @var integer maximum of seconds allowed until this transition must be triggered * * @access protected */ var $_maxtime; /** - * @var list of users allowed to trigger this transaction + * @var SeedDMS_Core_User[] of users allowed to trigger this transaction * * @access protected */ var $_users; /** - * @var list of groups allowed to trigger this transaction + * @var SeedDMS_Core_Group[] of groups allowed to trigger this transaction * * @access protected */ var $_groups; /** - * @var object reference to the dms instance this attribute belongs to + * @var SeedDMS_Core_DMS reference to the dms instance this attribute belongs to * * @access protected */ var $_dms; - function __construct($id, $workflow, $state, $action, $nextstate, $maxtime) { + /** + * SeedDMS_Core_Workflow_Transition constructor. + * @param $id + * @param $workflow + * @param $state + * @param $action + * @param $nextstate + * @param $maxtime + */ + function __construct($id, $workflow, $state, $action, $nextstate, $maxtime) { $this->_id = $id; $this->_workflow = $workflow; $this->_state = $state; @@ -774,15 +880,28 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */ $this->_dms = null; } - function setDMS($dms) { + /** + * @param $dms + */ + function setDMS($dms) { $this->_dms = $dms; } - function getID() { return $this->_id; } + /** + * @return int + */ + function getID() { return $this->_id; } - function getWorkflow() { return $this->_workflow; } + /** + * @return SeedDMS_Core_Workflow + */ + function getWorkflow() { return $this->_workflow; } - function setWorkflow($newWorkflow) { /* {{{ */ + /** + * @param SeedDMS_Core_Workflow $newWorkflow + * @return bool + */ + function setWorkflow($newWorkflow) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowTransitions` SET `workflow` = ".$newWorkflow->getID()." WHERE `id` = " . $this->_id; @@ -794,9 +913,17 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */ return true; } /* }}} */ - function getState() { return $this->_state; } - function setState($newState) { /* {{{ */ + /** + * @return SeedDMS_Core_Workflow_State + */ + function getState() { return $this->_state; } + + /** + * @param SeedDMS_Core_Workflow_State $newState + * @return bool + */ + function setState($newState) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowTransitions` SET `state` = ".$newState->getID()." WHERE `id` = " . $this->_id; @@ -808,9 +935,16 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */ return true; } /* }}} */ - function getNextState() { return $this->_nextstate; } + /** + * @return SeedDMS_Core_Workflow_State + */ + function getNextState() { return $this->_nextstate; } - function setNextState($newNextState) { /* {{{ */ + /** + * @param SeedDMS_Core_Workflow_State $newNextState + * @return bool + */ + function setNextState($newNextState) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowTransitions` SET `nextstate` = ".$newNextState->getID()." WHERE `id` = " . $this->_id; @@ -822,9 +956,16 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */ return true; } /* }}} */ - function getAction() { return $this->_action; } + /** + * @return SeedDMS_Core_Workflow_Action + */ + function getAction() { return $this->_action; } - function setAction($newAction) { /* {{{ */ + /** + * @param SeedDMS_Core_Workflow_Action $newAction + * @return bool + */ + function setAction($newAction) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowTransitions` SET `action` = ".$newAction->getID()." WHERE `id` = " . $this->_id; @@ -836,9 +977,16 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */ return true; } /* }}} */ - function getMaxTime() { return $this->_maxtime; } + /** + * @return int + */ + function getMaxTime() { return $this->_maxtime; } - function setMaxTime($maxtime) { /* {{{ */ + /** + * @param $maxtime + * @return bool + */ + function setMaxTime($maxtime) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "UPDATE `tblWorkflowTransitions` SET `maxtime` = ".intval($maxtime)." WHERE `id` = " . $this->_id; @@ -853,7 +1001,7 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */ /** * Get all users allowed to trigger this transition * - * @return array list of users + * @return SeedDMS_Core_User[]|bool list of users */ function getUsers() { /* {{{ */ $db = $this->_dms->getDB(); @@ -881,7 +1029,7 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */ /** * Get all users allowed to trigger this transition * - * @return array list of users + * @return SeedDMS_Core_Group[]|bool list of users */ function getGroups() { /* {{{ */ $db = $this->_dms->getDB(); @@ -969,13 +1117,22 @@ class SeedDMS_Core_Workflow_Transition_User { /* {{{ */ */ var $_dms; - function __construct($id, $transition, $user) { + /** + * SeedDMS_Core_Workflow_Transition_User constructor. + * @param $id + * @param $transition + * @param $user + */ + function __construct($id, $transition, $user) { $this->_id = $id; $this->_transition = $transition; $this->_user = $user; } - function setDMS($dms) { /* {{{ */ + /** + * @param $dms + */ + function setDMS($dms) { /* {{{ */ $this->_dms = $dms; } /* }}} */ @@ -1043,14 +1200,24 @@ class SeedDMS_Core_Workflow_Transition_Group { /* {{{ */ */ var $_dms; - function __construct($id, $transition, $group, $numOfUsers) { /* {{{ */ + /** + * SeedDMS_Core_Workflow_Transition_Group constructor. + * @param $id + * @param $transition + * @param $group + * @param $numOfUsers + */ + function __construct($id, $transition, $group, $numOfUsers) { /* {{{ */ $this->_id = $id; $this->_transition = $transition; $this->_group = $group; $this->_numOfUsers = $numOfUsers; } /* }}} */ - function setDMS($dms) { /* {{{ */ + /** + * @param $dms + */ + function setDMS($dms) { /* {{{ */ $this->_dms = $dms; } /* }}} */ @@ -1156,7 +1323,18 @@ class SeedDMS_Core_Workflow_Log { /* {{{ */ */ var $_dms; - function __construct($id, $document, $version, $workflow, $user, $transition, $date, $comment) { + /** + * SeedDMS_Core_Workflow_Log constructor. + * @param $id + * @param $document + * @param $version + * @param $workflow + * @param $user + * @param $transition + * @param $date + * @param $comment + */ + function __construct($id, $document, $version, $workflow, $user, $transition, $date, $comment) { $this->_id = $id; $this->_document = $document; $this->_version = $version; @@ -1168,27 +1346,45 @@ class SeedDMS_Core_Workflow_Log { /* {{{ */ $this->_dms = null; } - function setDMS($dms) { /* {{{ */ + /** + * @param $dms + */ + function setDMS($dms) { /* {{{ */ $this->_dms = $dms; } /* }}} */ - function getTransition() { /* {{{ */ + /** + * @return object + */ + function getTransition() { /* {{{ */ return $this->_transition; } /* }}} */ - function getWorkflow() { /* {{{ */ + /** + * @return object + */ + function getWorkflow() { /* {{{ */ return $this->_workflow; } /* }}} */ - function getUser() { /* {{{ */ + /** + * @return object + */ + function getUser() { /* {{{ */ return $this->_user; } /* }}} */ - function getComment() { /* {{{ */ + /** + * @return string + */ + function getComment() { /* {{{ */ return $this->_comment; } /* }}} */ - function getDate() { /* {{{ */ + /** + * @return string + */ + function getDate() { /* {{{ */ return $this->_date; } /* }}} */ diff --git a/SeedDMS_Core/Core/inc.DBAccess.php b/SeedDMS_Core/Core/inc.DBAccess.php index 8ebbf9cf1..d0a394df6 100644 --- a/SeedDMS_Core/Core/inc.DBAccess.php +++ b/SeedDMS_Core/Core/inc.DBAccess.php @@ -16,6 +16,7 @@ * Include the adodb database abstraction */ require_once "adodb/adodb.inc.php"; +/** @noinspection PhpUndefinedClassInspection */ /** * Class to represent the database access for the document management @@ -54,19 +55,19 @@ class SeedDMS_Core_DatabaseAccess { */ function TableList() { return $this->_conn->MetaTables("TABLES"); - } + } - /** - * Constructor of SeedDMS_Core_DatabaseAccess - * - * Sets all database parameters but does not connect. - * - * @param string $driver the database type e.g. mysql, sqlite - * @param string $hostname host of database server - * @param string $user name of user having access to database - * @param string $passw password of user - * @param string $database name of database - */ + /** + * Constructor of SeedDMS_Core_DatabaseAccess + * + * Sets all database parameters but does not connect. + * + * @param string $driver the database type e.g. mysql, sqlite + * @param string $hostname host of database server + * @param string $user name of user having access to database + * @param string $passw password of user + * @param bool|string $database name of database + */ function __construct($driver, $hostname, $user, $passw, $database = false) { $this->_driver = $driver; $this->_hostname = $hostname; @@ -127,7 +128,7 @@ class SeedDMS_Core_DatabaseAccess { /** * Sanitize String used in database operations * - * @param string text + * @param string $text * @return string sanitized string */ function qstr($text) { /* {{{ */ @@ -141,10 +142,11 @@ class SeedDMS_Core_DatabaseAccess { * Call this function only with sql query which return data records. * * @param string $queryStr sql query - * @return array/boolean data if query could be executed otherwise false + * @return array|boolean data if query could be executed otherwise false */ function getResultArray($queryStr) { /* {{{ */ - $resArr = array(); + /** @noinspection PhpUnusedLocalVariableInspection */ + $resArr = array(); $res = $this->_conn->Execute($queryStr); if (!$res) { @@ -157,17 +159,17 @@ class SeedDMS_Core_DatabaseAccess { return $resArr; } /* }}} */ - /** - * Execute SQL query - * - * 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 - * @return boolean true if query could be executed otherwise false - */ - function getResult($queryStr, $silent=false) { /* {{{ */ + /** + * Execute SQL query + * + * Call this function only with sql query which do not return data records. + * + * @param string $queryStr sql query + * @return bool true if query could be executed otherwise false + * @internal param bool $silent not used anymore. This was used when this method + * still issued an error message + */ + function getResult($queryStr) { /* {{{ */ $res = $this->_conn->Execute($queryStr); if(!$res) { if($this->_debug) @@ -215,9 +217,12 @@ class SeedDMS_Core_DatabaseAccess { return $this->_conn->ErrorNo(); } /* }}} */ - /** - * Create various temporary tables to speed up and simplify sql queries - */ + /** + * Create various temporary tables to speed up and simplify sql queries + * @param $tableName + * @param bool $override + * @return bool + */ function createTemporaryTable($tableName, $override=false) { /* {{{ */ if (!strcasecmp($tableName, "ttreviewid")) { $queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttreviewid` (PRIMARY KEY (`reviewID`), INDEX (`maxLogID`)) ". @@ -309,6 +314,4 @@ class SeedDMS_Core_DatabaseAccess { } return false; } /* }}} */ -} - -?> +} \ No newline at end of file diff --git a/SeedDMS_Core/Core/inc.DBAccessPDO.php b/SeedDMS_Core/Core/inc.DBAccessPDO.php index 0e5260aae..0f7bca3a5 100644 --- a/SeedDMS_Core/Core/inc.DBAccessPDO.php +++ b/SeedDMS_Core/Core/inc.DBAccessPDO.php @@ -10,6 +10,7 @@ * @copyright Copyright (C) 2012 Uwe Steinmann * @version Release: @package_version@ */ +/** @noinspection PhpUndefinedClassInspection */ /** * Class to represent the database access for the document management @@ -107,7 +108,7 @@ class SeedDMS_Core_DatabaseAccess { * * This function is used to retrieve a list of database tables for backup * - * @return array list of table names + * @return string[]|bool list of table names */ function TableList() { /* {{{ */ switch($this->_driver) { @@ -130,17 +131,17 @@ class SeedDMS_Core_DatabaseAccess { return $res; } /* }}} */ - /** - * Constructor of SeedDMS_Core_DatabaseAccess - * - * Sets all database parameters but does not connect. - * - * @param string $driver the database type e.g. mysql, sqlite - * @param string $hostname host of database server - * @param string $user name of user having access to database - * @param string $passw password of user - * @param string $database name of database - */ + /** + * Constructor of SeedDMS_Core_DatabaseAccess + * + * Sets all database parameters but does not connect. + * + * @param string $driver the database type e.g. mysql, sqlite + * @param string $hostname host of database server + * @param string $user name of user having access to database + * @param string $passw password of user + * @param bool|string $database name of database + */ function __construct($driver, $hostname, $user, $passw, $database = false) { /* {{{ */ $this->_driver = $driver; $tmp = explode(":", $hostname); @@ -212,7 +213,8 @@ class SeedDMS_Core_DatabaseAccess { $dsn = $this->_driver.":".$this->_database; break; } - $this->_conn = new PDO($dsn, $this->_user, $this->_passw); + /** @noinspection PhpUndefinedVariableInspection */ + $this->_conn = new PDO($dsn, $this->_user, $this->_passw); if (!$this->_conn) return false; @@ -246,7 +248,7 @@ class SeedDMS_Core_DatabaseAccess { /** * Sanitize String used in database operations * - * @param string text + * @param string $text * @return string sanitized string */ function qstr($text) { /* {{{ */ @@ -256,21 +258,22 @@ class SeedDMS_Core_DatabaseAccess { /** * Replace back ticks by '"' * - * @param string text + * @param string $text * @return string sanitized string */ function rbt($text) { /* {{{ */ return str_replace('`', '"', $text); } /* }}} */ - /** - * Execute SQL query and return result - * - * Call this function only with sql query which return data records. - * - * @param string $queryStr sql query - * @return array/boolean data if query could be executed otherwise false - */ + /** + * Execute SQL query and return result + * + * Call this function only with sql query which return data records. + * + * @param string $queryStr sql query + * @param bool $retick + * @return array|bool data if query could be executed otherwise false + */ function getResultArray($queryStr, $retick=true) { /* {{{ */ $resArr = array(); @@ -341,11 +344,13 @@ class SeedDMS_Core_DatabaseAccess { $this->_intransaction--; } /* }}} */ - /** - * Return the id of the last instert record - * - * @return integer id used in last autoincrement - */ + /** + * Return the id of the last instert record + * + * @param string $tablename + * @param string $fieldname + * @return int id used in last autoincrement + */ function getInsertID($tablename='', $fieldname='id') { /* {{{ */ if($this->_driver == 'pgsql') return $this->_conn->lastInsertId('"'.$tablename.'_'.$fieldname.'_seq"'); @@ -362,9 +367,12 @@ class SeedDMS_Core_DatabaseAccess { return $this->_conn->errorCode(); } /* }}} */ - /** - * Create various temporary tables to speed up and simplify sql queries - */ + /** + * Create various temporary tables to speed up and simplify sql queries + * @param $tableName + * @param bool $override + * @return bool + */ function createTemporaryTable($tableName, $override=false) { /* {{{ */ if (!strcasecmp($tableName, "ttreviewid")) { switch($this->_driver) { @@ -533,13 +541,14 @@ class SeedDMS_Core_DatabaseAccess { return false; } /* }}} */ - /** - * Return sql statement for extracting the date part from a field - * containing a unix timestamp - * - * @param string $fieldname name of field containing the timestamp - * @return string sql code - */ + /** + * Return sql statement for extracting the date part from a field + * containing a unix timestamp + * + * @param string $fieldname name of field containing the timestamp + * @param string $format + * @return string sql code + */ function getDateExtract($fieldname, $format='%Y-%m-%d') { /* {{{ */ switch($this->_driver) { case 'mysql': @@ -603,11 +612,12 @@ class SeedDMS_Core_DatabaseAccess { return ''; } /* }}} */ - /** - * Return sql statement for returning the current timestamp - * - * @return string sql code - */ + /** + * Return sql statement for returning the current timestamp + * + * @param $field + * @return string sql code + */ function castToText($field) { /* {{{ */ switch($this->_driver) { case 'pgsql': @@ -617,5 +627,3 @@ class SeedDMS_Core_DatabaseAccess { return $field; } /* }}} */ } - -?> diff --git a/SeedDMS_Core/Core/inc.FileUtils.php b/SeedDMS_Core/Core/inc.FileUtils.php index b6228f531..2a322a0ae 100644 --- a/SeedDMS_Core/Core/inc.FileUtils.php +++ b/SeedDMS_Core/Core/inc.FileUtils.php @@ -25,25 +25,50 @@ * @version Release: @package_version@ */ class SeedDMS_Core_File { - static function renameFile($old, $new) { /* {{{ */ + /** + * @param $old + * @param $new + * @return bool + */ + static function renameFile($old, $new) { /* {{{ */ return @rename($old, $new); } /* }}} */ - static function removeFile($file) { /* {{{ */ + /** + * @param $file + * @return bool + */ + static function removeFile($file) { /* {{{ */ return @unlink($file); } /* }}} */ - static function copyFile($source, $target) { /* {{{ */ + /** + * @param $source + * @param $target + * @return bool + */ + static function copyFile($source, $target) { /* {{{ */ return @copy($source, $target); } /* }}} */ - static function moveFile($source, $target) { /* {{{ */ - if (!@copyFile($source, $target)) + /** + * @param $source + * @param $target + * @return bool + */ + static function moveFile($source, $target) { /* {{{ */ + /** @noinspection PhpUndefinedFunctionInspection */ + if (!@copyFile($source, $target)) return false; - return @removeFile($source); + /** @noinspection PhpUndefinedFunctionInspection */ + return @removeFile($source); } /* }}} */ - static function fileSize($file) { /* {{{ */ + /** + * @param $file + * @return bool|int + */ + static function fileSize($file) { /* {{{ */ if(!$a = fopen($file, 'r')) return false; fseek($a, 0, SEEK_END); @@ -52,12 +77,22 @@ class SeedDMS_Core_File { return $filesize; } /* }}} */ - static function format_filesize($size, $sizes = array('Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB')) { /* {{{ */ + /** + * @param $size + * @param array $sizes + * @return string + */ + static function format_filesize($size, $sizes = array('Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB')) { /* {{{ */ if ($size == 0) return('0 Bytes'); - return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $sizes[$i]); + /** @noinspection PhpIllegalArrayKeyTypeInspection */ + return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $sizes[$i]); } /* }}} */ - static function parse_filesize($str) { /* {{{ */ + /** + * @param $str + * @return bool|int + */ + static function parse_filesize($str) { /* {{{ */ preg_replace('/\s\s+/', ' ', $str); if(strtoupper(substr($str, -1)) == 'B') { $value = (int) substr($str, 0, -2); @@ -80,18 +115,32 @@ class SeedDMS_Core_File { return $value; break; } - return false; + /** @noinspection PhpUnreachableStatementInspection */ + return false; } /* }}} */ - static function checksum($file) { /* {{{ */ + /** + * @param $file + * @return string + */ + static function checksum($file) { /* {{{ */ return md5_file($file); } /* }}} */ - static function renameDir($old, $new) { /* {{{ */ + /** + * @param $old + * @param $new + * @return bool + */ + static function renameDir($old, $new) { /* {{{ */ return @rename($old, $new); } /* }}} */ - static function makeDir($path) { /* {{{ */ + /** + * @param $path + * @return bool + */ + static function makeDir($path) { /* {{{ */ if( !is_dir( $path ) ){ $res=@mkdir( $path , 0777, true); @@ -146,7 +195,11 @@ class SeedDMS_Core_File { */ } /* }}} */ - static function removeDir($path) { /* {{{ */ + /** + * @param $path + * @return bool + */ + static function removeDir($path) { /* {{{ */ $handle = @opendir($path); while ($entry = @readdir($handle) ) { @@ -167,7 +220,12 @@ class SeedDMS_Core_File { return @rmdir($path); } /* }}} */ - static function copyDir($sourcePath, $targetPath) { /* {{{ */ + /** + * @param $sourcePath + * @param $targetPath + * @return bool + */ + static function copyDir($sourcePath, $targetPath) { /* {{{ */ if (mkdir($targetPath, 0777)) { $handle = @opendir($sourcePath); while ($entry = @readdir($handle) ) { @@ -189,14 +247,26 @@ class SeedDMS_Core_File { return true; } /* }}} */ - static function moveDir($sourcePath, $targetPath) { /* {{{ */ - if (!copyDir($sourcePath, $targetPath)) + /** + * @param $sourcePath + * @param $targetPath + * @return bool + */ + static function moveDir($sourcePath, $targetPath) { /* {{{ */ + /** @noinspection PhpUndefinedFunctionInspection */ + if (!copyDir($sourcePath, $targetPath)) return false; - return removeDir($sourcePath); + /** @noinspection PhpUndefinedFunctionInspection */ + return removeDir($sourcePath); } /* }}} */ // code by Kioob (php.net manual) - static function gzcompressfile($source,$level=false) { /* {{{ */ + /** + * @param $source + * @param bool $level + * @return bool|string + */ + static function gzcompressfile($source, $level=false) { /* {{{ */ $dest=$source.'.gz'; $mode='wb'.$level; $error=false; @@ -214,5 +284,4 @@ class SeedDMS_Core_File { if($error) return false; else return $dest; } /* }}} */ -} -?> +} \ No newline at end of file diff --git a/SeedDMS_Lucene/Lucene/IndexedDocument.php b/SeedDMS_Lucene/Lucene/IndexedDocument.php index 54dbb2676..d49240b5a 100644 --- a/SeedDMS_Lucene/Lucene/IndexedDocument.php +++ b/SeedDMS_Lucene/Lucene/IndexedDocument.php @@ -24,6 +24,12 @@ */ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { + /** + * @param $cmd + * @param int $timeout + * @return string + * @throws Exception + */ static function execWithTimeout($cmd, $timeout=2) { /* {{{ */ $descriptorspec = array( 0 => array("pipe", "r"), @@ -60,10 +66,15 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { } } /* }}} */ - /** - * Constructor. Creates our indexable document and adds all - * necessary fields to it using the passed in document - */ + /** + * Constructor. Creates our indexable document and adds all + * necessary fields to it using the passed in document + * @param SeedDMS_Core_DMS $dms + * @param SeedDMS_Core_Document $document + * @param null $convcmd + * @param bool $nocontent + * @param int $timeout + */ public function __construct($dms, $document, $convcmd=null, $nocontent=false, $timeout=5) { $_convcmd = array( 'application/pdf' => 'pdftotext -enc UTF-8 -nopgbrk %s - |sed -e \'s/ [a-zA-Z0-9.]\{1\} / /g\' -e \'s/[0-9.]//g\'', From 5ee711059785aabf8703519d012460e5c2b32801 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 3 Jan 2018 09:29:34 +0100 Subject: [PATCH 009/296] started new version 5.1.6 --- CHANGELOG | 4 +++ Makefile | 2 +- SeedDMS_Core/Core/inc.ClassDMS.php | 2 +- SeedDMS_Core/package.xml | 45 ++++++++++++++++++++---------- inc/inc.Version.php | 2 +- install/install.php | 2 +- 6 files changed, 38 insertions(+), 19 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ded6bb2f8..04e575712 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +-------------------------------------------------------------------------------- + Changes in version 5.1.6 +-------------------------------------------------------------------------------- + -------------------------------------------------------------------------------- Changes in version 5.1.5 -------------------------------------------------------------------------------- diff --git a/Makefile b/Makefile index 0805e195a..5287b1aa9 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION=5.1.5 +VERSION=5.1.6 SRC=CHANGELOG inc conf utils index.php languages views op out controllers doc styles TODO LICENSE webdav install restapi pdfviewer # webapp diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 7c4e91b28..49a769aa0 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -371,7 +371,7 @@ class SeedDMS_Core_DMS { $this->callbacks = array(); $this->version = '@package_version@'; if($this->version[0] == '@') - $this->version = '5.1.5'; + $this->version = '5.1.6'; } /* }}} */ /** diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 7c7eb22d7..eb9e076a8 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,11 +12,11 @@ uwe@steinmann.cx yes - 2017-11-07 + 2018-01-07 - 5.1.5 - 5.1.5 + 5.1.6 + 5.1.6 stable @@ -24,18 +24,6 @@ GPL License -- use views instead of temp. tables -- add list of expired documents in SeedDMS_Core_DMS::getDocumentList() -- add methods to set comment, name, public, version of document files -- add method SeedDMS_Core_Document::transferToUser() -- SeedDMS_Core_Document::addDocumentFile() returns object of file -- add SeedDMS_Core_DocumentFile::setDate() -- remove SeedDMS_Core_DocumentCategory::addCategory() and getCategories() -- add optional parameters $limit and $offset to SeedDMS_Core_Folder::getDocuments() - and SeedDMS_Core_Folder::getSubFolders() -- getInstance() returns now null instead of false if the object was not found in the db -- add new methods SeedDMS_Core_Document::addCategories() and - SeedDMS_Core_Document::removeCategories() @@ -1545,5 +1533,32 @@ returns just users which are not disabled - all changes from 5.0.14 merged + + 2017-11-07 + + + 5.1.5 + 5.1.5 + + + stable + stable + + GPL License + +- use views instead of temp. tables +- add list of expired documents in SeedDMS_Core_DMS::getDocumentList() +- add methods to set comment, name, public, version of document files +- add method SeedDMS_Core_Document::transferToUser() +- SeedDMS_Core_Document::addDocumentFile() returns object of file +- add SeedDMS_Core_DocumentFile::setDate() +- remove SeedDMS_Core_DocumentCategory::addCategory() and getCategories() +- add optional parameters $limit and $offset to SeedDMS_Core_Folder::getDocuments() + and SeedDMS_Core_Folder::getSubFolders() +- getInstance() returns now null instead of false if the object was not found in the db +- add new methods SeedDMS_Core_Document::addCategories() and + SeedDMS_Core_Document::removeCategories() + + diff --git a/inc/inc.Version.php b/inc/inc.Version.php index 3fcc1c88b..ddf140bb2 100644 --- a/inc/inc.Version.php +++ b/inc/inc.Version.php @@ -20,7 +20,7 @@ class SeedDMS_Version { - public $_number = "5.1.5"; + public $_number = "5.1.6"; private $_string = "SeedDMS"; function __construct() { diff --git a/install/install.php b/install/install.php index ecf7d5870..643b8f190 100644 --- a/install/install.php +++ b/install/install.php @@ -123,7 +123,7 @@ function fileExistsInIncludePath($file) { /* {{{ */ * Load default settings + set */ define("SEEDDMS_INSTALL", "on"); -define("SEEDDMS_VERSION", "5.1.5"); +define("SEEDDMS_VERSION", "5.1.6"); require_once('../inc/inc.ClassSettings.php'); From d2ccd5d5adecf785c0c49778b7c3556e2afd2265 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 8 Jan 2018 10:49:36 +0100 Subject: [PATCH 010/296] better check in mayReview() and mayApprove() mayReview() will only return true anymore, if the status is S_DRAFT_REV. mayApprove() will only return true anymore, if the status is S_DRAFT_APP. --- inc/inc.ClassAccessOperation.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/inc/inc.ClassAccessOperation.php b/inc/inc.ClassAccessOperation.php index bfbe66010..d4877ef69 100644 --- a/inc/inc.ClassAccessOperation.php +++ b/inc/inc.ClassAccessOperation.php @@ -236,15 +236,15 @@ class SeedDMS_AccessOperation { /** * Check if document content may be reviewed * - * Reviewing a document content is only allowed if the document was not - * obsoleted. There are other requirements which are not taken into + * Reviewing a document content is only allowed if the document is in + * review. There are other requirements which are not taken into * account here. */ function mayReview() { /* {{{ */ if(get_class($this->obj) == $this->dms->getClassname('document')) { $latestContent = $this->obj->getLatestContent(); $status = $latestContent->getStatus(); - if ($status["status"]!=S_OBSOLETE) { + if ($status["status"]==S_DRAFT_REV) { return true; } } @@ -269,8 +269,9 @@ class SeedDMS_AccessOperation { /** * Check if document content may be approved * - * Approving a document content is only allowed if the document was not - * obsoleted and the document is not in review status. + * Approving a document content is only allowed if the document is either + * in approval status or released. In the second case the approval can be + * edited. * There are other requirements which are not taken into * account here. */ @@ -278,7 +279,7 @@ class SeedDMS_AccessOperation { if(get_class($this->obj) == $this->dms->getClassname('document')) { $latestContent = $this->obj->getLatestContent(); $status = $latestContent->getStatus(); - if ($status["status"]!=S_OBSOLETE && $status["status"]!=S_DRAFT_REV && $status["status"]!=S_REJECTED) { + if ($status["status"]==S_DRAFT_APP) { return true; } } From 6c5608d96d61ec9e864501f3f5c148bf3f138684 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 8 Jan 2018 10:51:08 +0100 Subject: [PATCH 011/296] fix wrong variable name (part of ticket #373) --- restapi/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/restapi/index.php b/restapi/index.php index 2dd729fcb..1aca291b6 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -699,7 +699,7 @@ function uploadDocumentFile($documentId) { /* {{{ */ return; } - if(!ctype_digit($document) || $documentId == 0) { + if(!ctype_digit($documentId) || $documentId == 0) { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); return; From f99d860d6d4c4ae47193f344da6c4b0352b21ca5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 8 Jan 2018 10:52:46 +0100 Subject: [PATCH 012/296] add entries for 5.1.6 --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 04e575712..c8eae2d38 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ -------------------------------------------------------------------------------- Changes in version 5.1.6 -------------------------------------------------------------------------------- +- fix wrong check in restapi (part of #373) +- mayApprove() and mayReview() require the status to be S_DRAFT_APP resp. S_DRAFT_REV -------------------------------------------------------------------------------- Changes in version 5.1.5 From a20c2167c9c25261dc93ecadc10d9604bb50b879 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 8 Jan 2018 10:54:02 +0100 Subject: [PATCH 013/296] add video/webm to list of mimetypes which are previewed --- views/bootstrap/class.ViewDocument.php | 1 + 1 file changed, 1 insertion(+) diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 45023aebf..69a3ea203 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -356,6 +356,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { contentHeading(getMLText("preview")); ?> From ca1b5ba5cc0cd0ec1efa7f31b96d9c5ac3fbeac7 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 8 Jan 2018 10:57:05 +0100 Subject: [PATCH 014/296] - add entry to 5.1.6 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index c8eae2d38..9c93f6742 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ -------------------------------------------------------------------------------- - fix wrong check in restapi (part of #373) - mayApprove() and mayReview() require the status to be S_DRAFT_APP resp. S_DRAFT_REV +- add preview for webm videos (Closes #374) -------------------------------------------------------------------------------- Changes in version 5.1.5 From 09c7c0fc2a97fea361a2194758f44e6e2c32822f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 9 Jan 2018 15:32:08 +0100 Subject: [PATCH 015/296] prevent php warning if converters are not set --- views/bootstrap/class.Settings.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index a5d48b20e..8bd40e5af 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -747,14 +747,16 @@ if(!is_writeable($settings->_configFilePath)) { ?> _converters[$target] as $mimetype=>$cmd) { + if(!empty($settings->_converters[$target])) { + foreach($settings->_converters[$target] as $mimetype=>$cmd) { ?> : showTextField("converters[".$target."][".$mimetype."]", htmlspecialchars($cmd)); ?> showTextField("converters[".$target."][newmimetype]", "", '', getMLText('converter_new_mimetype')); ?>: From fd3cef54072ccf67b09e71dd6dc3bc83538bd00b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 9 Jan 2018 15:35:08 +0100 Subject: [PATCH 016/296] fix text for error msgs --- out/out.TransferObjects.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/out/out.TransferObjects.php b/out/out.TransferObjects.php index 7b45fe4a9..5831d6807 100644 --- a/out/out.TransferObjects.php +++ b/out/out.TransferObjects.php @@ -31,16 +31,16 @@ if (!$user->isAdmin()) { } if (!isset($_GET["userid"]) || !is_numeric($_GET["userid"]) || intval($_GET["userid"])<1) { - UI::exitError(getMLText("rm_user"),getMLText("invalid_user_id")); + UI::exitError(getMLText("transfer_objects"),getMLText("invalid_user_id")); } $rmuser = $dms->getUser(intval($_GET["userid"])); if (!is_object($rmuser)) { - UI::exitError(getMLText("rm_user"),getMLText("invalid_user_id")); + UI::exitError(getMLText("transfer_objects"),getMLText("invalid_user_id")); } if ($rmuser->getID()==$user->getID()) { - UI::exitError(getMLText("rm_user"),getMLText("cannot_delete_yourself")); + UI::exitError(getMLText("transfer_objects"),getMLText("cannot_delete_yourself")); } $allusers = $dms->getAllUsers($settings->_sortUsersInList); From 5c7c1b0b26fada4b1240b681d3b61e35b999fbcc Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 07:07:20 +0100 Subject: [PATCH 017/296] add installation instructions for xsendfile --- doc/README.xsendfile | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 doc/README.xsendfile diff --git a/doc/README.xsendfile b/doc/README.xsendfile new file mode 100644 index 000000000..1ee738953 --- /dev/null +++ b/doc/README.xsendfile @@ -0,0 +1,26 @@ +Howto configure mod_xsendfile +============================== + +Downloading large files from SeedDMS can be slow, because they are delivered +by the PHP download script. This is a common problem not specific to SeedDMS +but to PHP scripts of this kind in general. Granting direct access on the +download file is not a option as it circumvents the access restrictions of +SeedDMS. + +The Apache module xsendfile is just for this kind of controlled downloads. If +is installed and configured, SeedDMS will hand over the download to the web +server which does a much better job than the PHP script. In order to make it +work, mod_xsendfile must be installed, turned on and the path to the download +files must be set to the directory containing the document files. If your document +root ist /var/www and you extracted the quickstart archive into that directory, +then the document content directory will be at +/var/www/seeddms51x/data/1048576/ . Add the following to your apache configuration, +either globally or within a virtual host configuration. Setting the path in +an .htaccess file will not work. + +XSendFile on +XSendFilePath /var/www/seeddms51x/data/1048576/ + +If the XSendFilePath is not set propperly, you will notice an error message +in your apache log file, probably telling you that the download file could not +be found. From bcef2d3d634d4b75205d436c9eea5e25b6a35bd2 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 07:07:39 +0100 Subject: [PATCH 018/296] add instructions on how to install from quickstart archive --- doc/README.Install.md | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/doc/README.Install.md b/doc/README.Install.md index 1dfe92bb8..3b26e176c 100644 --- a/doc/README.Install.md +++ b/doc/README.Install.md @@ -42,8 +42,9 @@ all language and country codes. REQUIREMENTS ============ -SeedDMS is a web-based application written in PHP. It uses the MySQL RDBMS -or sqlite3 to manage the documents that were uploaded into the application. +SeedDMS is a web-based application written in PHP. It uses MySQL, +sqlite3 or postgresql to manage the documents that were uploaded into +the application. Be aware that postgresql is not very well tested. Make sure you have PHP 5.3 and MySQL 5 or higher installed. SeedDMS will work with PHP running in CGI-mode as well as running as module under @@ -67,8 +68,33 @@ Here is a detailed list of requirements: 9. SLIM RestApi 10. FeedWriter from https://github.com/mibe/FeedWriter +It is highly recommended to use the quickstart archive (seeddms-quickstart-x.y.z.tar.gz) +because it includes all software packages for running SeedDMS, though you still need +a working web server with PHP. -BEFORE YOU START +QUICKSTART +=========== + +The fastes way to get SeedDMS running is by unpacking the archive +`seeddms-quickstart-x.y.z.tar.gz` into your webservers document root. +It will create a new directory `seeddms51x` containing everything you +need to run SeedDMS with sqlite3. Make sure that the subdіrectory +`seeddms51x/data` +and the configuration file `seeddms51/www/conf/settings.xml` is writeable +by your web server. All other directories must just be readable by your +web server. In the next step you need to adjust +the configuration file in `seeddms51/www/conf/settings.xml`. If you +are not afraid of xml files, then open it in your favorite text editor +and search for `/home/wwww-data`. Replace that part in any path found +with your document root. Alternatively, you can open the installer +with a browser at http://your-domain/seeddms51x/install/ +It will first ask to unlock the installer by creating a file +`ENABLE_INSTALL_TOOL` in the diretory `seeddms51/www/conf/`. Change all +paths by replacing `/home/wwww-data` with your document root. Once done, +save it, remove the file `ENABLE_INSTALL_TOOL` and point your browser to +http://your-domain/seeddms51x/. + +THE LONG STORY ================ SeedDMS has changed its installation process with version 3.0.0. This gives From a28d12161052dc5a9e006e13732e57a359525d61 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 08:45:34 +0100 Subject: [PATCH 019/296] add SeedDMS_Preview_Base::sendfile() which uses xsendfile if available --- SeedDMS_Preview/Preview/Base.php | 19 +++++++++++++++++++ SeedDMS_Preview/Preview/PdfPreviewer.php | 4 ++-- SeedDMS_Preview/Preview/Previewer.php | 4 ++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/SeedDMS_Preview/Preview/Base.php b/SeedDMS_Preview/Preview/Base.php index 897c54d4a..fe1ea8903 100644 --- a/SeedDMS_Preview/Preview/Base.php +++ b/SeedDMS_Preview/Preview/Base.php @@ -129,5 +129,24 @@ class SeedDMS_Preview_Base { return array_key_exists($mimetype, $this->converters) && $this->converters[$mimetype]; } /* }}} */ +/** + * Send a file from disk to the browser + * + * This function uses either readfile() or the xѕendfile apache module if + * it is installed. + * + * @param string $filename + */ + protected function sendFile($filename) { /* {{{ */ + if(function_exists('apache_get_modules') && in_array('mod_xsendfile',apache_get_modules())) { + header("X-Sendfile: ".$filename); + } else { + /* Make sure output buffering is off */ + if (ob_get_level()) { + ob_end_clean(); + } + readfile($filename); + } + } /* }}} */ } diff --git a/SeedDMS_Preview/Preview/PdfPreviewer.php b/SeedDMS_Preview/Preview/PdfPreviewer.php index 3b563b334..6833a7ae8 100644 --- a/SeedDMS_Preview/Preview/PdfPreviewer.php +++ b/SeedDMS_Preview/Preview/PdfPreviewer.php @@ -196,7 +196,7 @@ class SeedDMS_Preview_PdfPreviewer extends SeedDMS_Preview_Base { $target = $this->previewDir.$dir.md5($infile); if($target && file_exists($target.'.pdf')) { - readfile($target.'.pdf'); + $this->sendFile($target.'.pdf'); } } /* }}} */ @@ -215,7 +215,7 @@ class SeedDMS_Preview_PdfPreviewer extends SeedDMS_Preview_Base { $target = $this->getFileName($object); if($target && file_exists($target.'.pdf')) { - readfile($target.'.pdf'); + $this->sendFile($target.'.pdf'); } } /* }}} */ diff --git a/SeedDMS_Preview/Preview/Previewer.php b/SeedDMS_Preview/Preview/Previewer.php index 519307dc5..68efc0f4e 100644 --- a/SeedDMS_Preview/Preview/Previewer.php +++ b/SeedDMS_Preview/Preview/Previewer.php @@ -247,7 +247,7 @@ class SeedDMS_Preview_Previewer extends SeedDMS_Preview_Base { $target = $this->previewDir.$dir.md5($infile).'-'.$width; if($target && file_exists($target.'.png')) { - readfile($target.'.png'); + $this->sendFile($target.'.png'); } } /* }}} */ @@ -271,7 +271,7 @@ class SeedDMS_Preview_Previewer extends SeedDMS_Preview_Base { $target = $this->getFileName($object, $width); if($target && file_exists($target.'.png')) { - readfile($target.'.png'); + $this->sendFile($target.'.png'); } } /* }}} */ From 380f69a95a7caa7f26dd5aefd717bb506c6a6a08 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 08:47:50 +0100 Subject: [PATCH 020/296] new version 1.2.7 --- SeedDMS_Preview/package.xml | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/SeedDMS_Preview/package.xml b/SeedDMS_Preview/package.xml index 3d99daa0b..410ab1ef4 100644 --- a/SeedDMS_Preview/package.xml +++ b/SeedDMS_Preview/package.xml @@ -11,10 +11,10 @@ uwe@steinmann.cx yes - 2017-12-04 + 2018-01-18 - 1.2.6 + 1.2.7 1.2.0 @@ -23,8 +23,8 @@ GPL License -SeedDMS_Preview_Base::setConverters() overrides existing converters. -New method SeedDMS_Preview_Base::addConverters() merges new converters with old ones. +add SeedDMS_Preview_Base::sendFile() as a replacement for readfile() which uses +mod_xsendfile if available @@ -336,5 +336,22 @@ fix typo in converter for tar.gz files SeedDMS_Preview_Base::hasConverter() returns only try if command is set + + 2017-12-04 + + + 1.2.6 + 1.2.0 + + + stable + stable + + GPL License + +SeedDMS_Preview_Base::setConverters() overrides existing converters. +New method SeedDMS_Preview_Base::addConverters() merges new converters with old ones. + + From f71aab592110b1fda50de6da57e3ebd7b316ebd1 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 08:48:12 +0100 Subject: [PATCH 021/296] fix some typos minor errors --- doc/README.xsendfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/README.xsendfile b/doc/README.xsendfile index 1ee738953..96ec5653b 100644 --- a/doc/README.xsendfile +++ b/doc/README.xsendfile @@ -12,14 +12,14 @@ is installed and configured, SeedDMS will hand over the download to the web server which does a much better job than the PHP script. In order to make it work, mod_xsendfile must be installed, turned on and the path to the download files must be set to the directory containing the document files. If your document -root ist /var/www and you extracted the quickstart archive into that directory, +root is /var/www and you extracted the quickstart archive into that directory, then the document content directory will be at -/var/www/seeddms51x/data/1048576/ . Add the following to your apache configuration, +/var/www/seeddms51x/data/ . Add the following to your apache configuration, either globally or within a virtual host configuration. Setting the path in an .htaccess file will not work. XSendFile on -XSendFilePath /var/www/seeddms51x/data/1048576/ +XSendFilePath /var/www/seeddms51x/data/ If the XSendFilePath is not set propperly, you will notice an error message in your apache log file, probably telling you that the download file could not From ccb56e827ca887829f7a929e5e2f718df576c197 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 08:48:32 +0100 Subject: [PATCH 022/296] add function sendFile() --- inc/inc.Utils.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index 327cdbf3f..1532ea793 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -586,4 +586,24 @@ function addDirSep($str) { /* {{{ */ else return trim($str); } /* }}} */ + +/** + * Send a file from disk to the browser + * + * This function uses either readfile() or the xѕendfile apache module if + * it is installed. + * + * @param string $filename + */ +function sendFile($filename) { /* {{{ */ + if(function_exists('apache_get_modules') && in_array('mod_xsendfile',apache_get_modules())) { + header("X-Sendfile: ".$filename); + } else { + /* Make sure output buffering is off */ + if (ob_get_level()) { + ob_end_clean(); + } + readfile($filename); + } +} /* }}} */ ?> From 97ff9abee57ab6943e084fdbda9a32f79c8e2ffc Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 08:49:00 +0100 Subject: [PATCH 023/296] use sendFile() instead of readfile() --- restapi/index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index 1aca291b6..5013842d5 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -878,7 +878,7 @@ function getDocumentContent($id) { /* {{{ */ $app->response()->header("Cache-Control", "no-cache, must-revalidate"); $app->response()->header("Pragma", "no-cache"); - readfile($dms->contentDir . $lc->getPath()); + sendFile($dms->contentDir . $lc->getPath()); } else { $app->response()->status(403); $app->response()->header('Content-Type', 'application/json'); @@ -953,7 +953,7 @@ function getDocumentVersion($id, $version) { /* {{{ */ $app->response()->header("Cache-Control", "no-cache, must-revalidate"); $app->response()->header("Pragma", "no-cache"); - readfile($dms->contentDir . $lc->getPath()); + sendFile($dms->contentDir . $lc->getPath()); } else { $app->response()->status(403); $app->response()->header('Content-Type', 'application/json'); @@ -1022,7 +1022,7 @@ function getDocumentFile($id, $fileid) { /* {{{ */ $app->response()->header("Cache-Control", "no-cache, must-revalidate"); $app->response()->header("Pragma", "no-cache"); - readfile($dms->contentDir . $file->getPath()); + sendFile($dms->contentDir . $file->getPath()); } else { $app->response()->status(403); $app->response()->header('Content-Type', 'application/json'); From 4cfd9f222eec5e588f0aa2f06ba43caabca0e08d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 08:49:17 +0100 Subject: [PATCH 024/296] use sendFile() instead of readfile(), clean up code --- op/op.Download.php | 54 +++++++++++++--------------------------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/op/op.Download.php b/op/op.Download.php index 742c210c9..0c1bf4db1 100644 --- a/op/op.Download.php +++ b/op/op.Download.php @@ -105,19 +105,14 @@ elseif (isset($_GET["file"])) { /* {{{ */ UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("missing_file")); } - header("Content-Type: application/force-download; name=\"" . $file->getOriginalFileName() . "\""); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . filesize($dms->contentDir . $file->getPath() )); $efilename = rawurlencode($file->getOriginalFileName()); header("Content-Disposition: attachment; filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename); - //header("Expires: 0"); header("Content-Type: " . $file->getMimeType()); - //header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: must-revalidate"); - //header("Pragma: no-cache"); - ob_clean(); - readfile($dms->contentDir . $file->getPath()); + sendFile($dms->contentDir . $file->getPath()); } elseif (isset($_GET["arkname"])) { $filename = basename($_GET["arkname"]); @@ -137,22 +132,14 @@ elseif (isset($_GET["file"])) { /* {{{ */ } header('Content-Description: File Transfer'); - //header("Content-Type: application/force-download; name=\"" . $filename . "\""); - //header("Content-Type: application/octet-stream"); header("Content-Type: application/zip"); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . filesize($settings->_contentDir . $filename )); $efilename = rawurlencode($filename); header("Content-Disposition: attachment; filename=\"" .$efilename . "\"; filename*=UTF-8''".$efilename); -// header("Expires: 0"); - //header("Content-Type: " . $content->getMimeType()); - //header("Cache-Control: no-cache, must-revalidate"); -// header("Cache-Control: must-revalidate"); - header("Cache-Control: public"); - //header("Pragma: no-cache"); + header("Cache-Control: must-revalidate"); - ob_clean(); - readfile($settings->_contentDir .$filename ); + sendFile($settings->_contentDir .$filename ); } elseif (isset($_GET["logname"])) { $filename = basename($_GET["logname"]); @@ -171,15 +158,14 @@ elseif (isset($_GET["file"])) { /* {{{ */ UI::exitError(getMLText("admin_tools"),getMLText("missing_file")); } - header("Content-Type: text/plain; name=\"" . $filename . "\""); + header("Content-Type: text/plain"); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . filesize($settings->_contentDir . $filename )); $efilename = rawurlencode($filename); header("Content-Disposition: attachment; filename=\"" .$efilename . "\"; filename*=UTF-8''".$efilename); header("Cache-Control: must-revalidate"); - ob_clean(); - readfile($settings->_contentDir .$filename ); + sendFile($settings->_contentDir .$filename ); } elseif (isset($_GET["vfile"])) { @@ -196,20 +182,14 @@ elseif (isset($_GET["file"])) { /* {{{ */ // update infos createVersionigFile($document); - header("Content-Type: text/plain; name=\"" . $settings->_versioningFileName . "\""); - //header("Content-Type: application/force-download; name=\"" . $settings->_versioningFileName . "\""); + header("Content-Type: text/plain"); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . filesize($dms->contentDir.$document->getDir().$settings->_versioningFileName )."\""); $efilename = rawurlencode($settings->_versioningFileName); header("Content-Disposition: attachment; filename=\"". $efilename . "\""); - //header("Expires: 0"); - //header("Content-Type: " . $content->getMimeType()); - //header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: must-revalidate"); - //header("Pragma: no-cache"); - ob_clean(); - readfile($dms->contentDir . $document->getDir() .$settings->_versioningFileName); + sendFile($dms->contentDir . $document->getDir() .$settings->_versioningFileName); } elseif (isset($_GET["dumpname"])) { $filename = basename($_GET["dumpname"]); @@ -228,20 +208,14 @@ elseif (isset($_GET["file"])) { /* {{{ */ UI::exitError(getMLText("admin_tools"),getMLText("missing_file")); } - header("Content-Type: application/zip; name=\"" . $filename . "\""); - //header("Content-Type: application/force-download; name=\"" . $filename . "\""); + header("Content-Type: application/zip"); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . filesize($settings->_contentDir . $filename )); $efilename = rawurlencode($filename); header("Content-Disposition: attachment; filename=\"" .$efilename . "\"; filename*=UTF-8''".$efilename); - //header("Expires: 0"); - //header("Content-Type: " . $content->getMimeType()); - //header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: must-revalidate"); - //header("Pragma: no-cache"); - ob_clean(); - readfile($settings->_contentDir .$filename ); + sendFile($settings->_contentDir .$filename ); } elseif (isset($_GET["reviewlogid"])) { if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); @@ -269,12 +243,13 @@ elseif (isset($_GET["file"])) { /* {{{ */ $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $filename); - header("Content-Type: ".$mimetype."; name=\"review-" . $document->getID()."-".(int) $_GET['reviewlogid'] . get_extension($mimetype) . "\""); + header("Content-Type: ".$mimetype); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . filesize($filename )); header("Content-Disposition: attachment; filename=\"review-" . $document->getID()."-".(int) $_GET['reviewlogid'] . get_extension($mimetype) . "\""); header("Cache-Control: must-revalidate"); - readfile($filename); + + sendFile($filename); } elseif (isset($_GET["approvelogid"])) { if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { @@ -303,12 +278,13 @@ elseif (isset($_GET["file"])) { /* {{{ */ $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $filename); - header("Content-Type: ".$mimetype."; name=\"approval-" . $document->getID()."-".(int) $_GET['approvelogid'] . get_extension($mimetype) . "\""); + header("Content-Type: ".$mimetype); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . filesize($filename )); header("Content-Disposition: attachment; filename=\"approval-" . $document->getID()."-".(int) $_GET['approvelogid'] . get_extension($mimetype) . "\""); header("Cache-Control: must-revalidate"); - readfile($filename); + + sendFile($filename); } add_log_line(); From d4af7b5c9a5bc264d2d32b5c9298b1b7bdb0f5c1 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 08:49:44 +0100 Subject: [PATCH 025/296] use sendFile() instead of readfile() --- controllers/class.Download.php | 2 +- controllers/class.ViewOnline.php | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/controllers/class.Download.php b/controllers/class.Download.php index 9c0df6a5c..ba9288167 100644 --- a/controllers/class.Download.php +++ b/controllers/class.Download.php @@ -39,7 +39,7 @@ class SeedDMS_Controller_Download extends SeedDMS_Controller_Common { header("Content-Type: " . $content->getMimeType()); header("Cache-Control: must-revalidate"); - readfile($dms->contentDir . $content->getPath()); + sendFile($dms->contentDir.$content->getPath()); } } break; diff --git a/controllers/class.ViewOnline.php b/controllers/class.ViewOnline.php index 65d5a8d44..df072f6bb 100644 --- a/controllers/class.ViewOnline.php +++ b/controllers/class.ViewOnline.php @@ -40,12 +40,9 @@ class SeedDMS_Controller_ViewOnline extends SeedDMS_Controller_Common { header("Content-Disposition: filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename); } header("Content-Length: " . filesize($dms->contentDir . $content->getPath())); - header("Expires: 0"); - header("Cache-Control: no-cache, must-revalidate"); - header("Pragma: no-cache"); + header("Cache-Control: must-revalidate"); - ob_clean(); - readfile($dms->contentDir . $content->getPath()); + sendFile($dms->contentDir.$content->getPath()); } break; } From 09a78ed37781448c5a48a453b5d84f5bd166c27f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 09:12:31 +0100 Subject: [PATCH 026/296] ??? --- SeedDMS_Core/package.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index eb9e076a8..830725d33 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -24,6 +24,7 @@ GPL License +just version bump up From f9d70aa04ae56fb0c172b428a9c2a6177d2dca57 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 09:51:02 +0100 Subject: [PATCH 027/296] add items for 5.1.6 --- CHANGELOG | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 9c93f6742..f0ef4294a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,8 +2,10 @@ Changes in version 5.1.6 -------------------------------------------------------------------------------- - fix wrong check in restapi (part of #373) -- mayApprove() and mayReview() require the status to be S_DRAFT_APP resp. S_DRAFT_REV +- mayApprove() and mayReview() require the status of the document to be + S_DRAFT_APP resp. S_DRAFT_REV - add preview for webm videos (Closes #374) +- add support for apache mod_xsendfile, minor optimization of file download -------------------------------------------------------------------------------- Changes in version 5.1.5 From a36087e405be4647404d159265337272671fe881 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 10:48:09 +0100 Subject: [PATCH 028/296] add chzn-select for attributes --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 50712bbf8..dcb5ee104 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1227,7 +1227,7 @@ $(document).ready(function() { } else { echo "\""; } - echo "".((!$norequire && $attrdef->getMinValues() > 0) ? ' required' : '').">"; + echo "".((!$norequire && $attrdef->getMinValues() > 0) ? ' required' : '')." class=\"chzn-select\">"; if(!$attrdef->getMultipleValues()) { echo ""; } From 5d43d0cd84d2ef9db06de4a93048299a4aedd69b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 18 Jan 2018 17:37:28 +0100 Subject: [PATCH 029/296] various new phrases --- languages/ar_EG/lang.inc | 10 + languages/bg_BG/lang.inc | 10 + languages/ca_ES/lang.inc | 10 + languages/cs_CZ/lang.inc | 18 +- languages/de_DE/lang.inc | 12 +- languages/el_GR/lang.inc | 10 + languages/en_GB/lang.inc | 12 +- languages/es_ES/lang.inc | 28 +- languages/fr_FR/lang.inc | 18 +- languages/hr_HR/lang.inc | 10 + languages/hu_HU/lang.inc | 10 + languages/it_IT/lang.inc | 16 +- languages/ko_KR/lang.inc | 10 + languages/nl_NL/lang.inc | 590 ++++++++++++++++++++------------------- languages/pl_PL/lang.inc | 10 + languages/pt_BR/lang.inc | 16 +- languages/ro_RO/lang.inc | 10 + languages/ru_RU/lang.inc | 16 +- languages/sk_SK/lang.inc | 18 +- languages/sv_SE/lang.inc | 10 + languages/tr_TR/lang.inc | 10 + languages/uk_UA/lang.inc | 10 + languages/zh_CN/lang.inc | 18 +- languages/zh_TW/lang.inc | 10 + 24 files changed, 575 insertions(+), 317 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 51147fcb9..a909de2fb 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -124,6 +124,7 @@ URL: [url]', 'archive_creation_warning' => 'من خلال العملية التالية يمكنك انشاء ارشيف يحتوي على كل ملفات النظام. بعد انشاء الارشيف سيتم حفظه في ملف البيانات على السيرفر.
تحذير: الارشيف الذي تم انشاؤه ليكون مقروء بواسطة المستخدم لن يكون نافعا كملف نسخ احتياطي للسيرفر', 'ar_EG' => 'العربية', 'assign_approvers' => 'تخصيص موافقون', +'assign_recipients' => '', 'assign_reviewers' => 'تخصيص مراجعون', 'assign_user_property_to' => 'تخصيص خصائص المستخدم الى', 'assumed_released' => 'يعتبر تم نشره', @@ -323,6 +324,7 @@ URL: [url]', 'documents_to_review' => 'مستندات في انتظار المراجعة', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => 'مستندات ملكك تستلزم انتباهك', @@ -587,6 +589,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'افراد', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'موروث', 'inherits_access_copy_msg' => 'نسخ قائمة صلاحيات موروثة.', 'inherits_access_empty_msg' => 'ابدأ بقائمة صلاحيات فارغة', @@ -1163,6 +1166,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Allows to have duplicate document names in a folder.', 'settings_enableEmail' => '', 'settings_enableEmail_desc' => 'Enable/disable automatic email notification', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => '', 'settings_enableFolderTree_desc' => '', 'settings_enableFullSearch' => 'تفعيل البحث بالنص الكامل', @@ -1197,6 +1202,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => '', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', 'settings_enableSessionList' => '', @@ -1512,9 +1519,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => '', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => '', 'timeline_skip_status_change_-3' => '', 'timeline_skip_status_change_0' => '', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index e31367d48..8da4ea086 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -115,6 +115,7 @@ $text = array( 'archive_creation_warning' => 'Тази операция ще създаде архив, съдържащ всички папки. След създаването архивът ще бъде съхранен в папката с данни на сървъра.
ВНИМАНИЕ: Архивът създаден като понятен за човек, ще бъде непригоден за бекъп!', 'ar_EG' => 'Арабски', 'assign_approvers' => 'Назначи утвърждаващи', +'assign_recipients' => '', 'assign_reviewers' => 'Назначи рецензенти', 'assign_user_property_to' => 'Назначи свойства на потребителя', 'assumed_released' => 'Утверден', @@ -308,6 +309,7 @@ $text = array( 'documents_to_review' => 'Документы, чакащи Вашата рецензия', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => 'Ваши документи, изискващи внимание', @@ -518,6 +520,7 @@ $text = array( 'index_waiting' => '', 'individuals' => 'Личности', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'наследен', 'inherits_access_copy_msg' => 'Изкопирай наследения список', 'inherits_access_empty_msg' => 'Започни с празен списък за достъп', @@ -1028,6 +1031,8 @@ $text = array( 'settings_enableDuplicateDocNames_desc' => 'Разрешава да има еднакви имена на документи в папката.', 'settings_enableEmail' => 'Включи E-mail', 'settings_enableEmail_desc' => 'Включване/изключване автоматично уведомяване по email', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Включи дървото с папките', 'settings_enableFolderTree_desc' => 'Изключено - не показвй дървото с папките', 'settings_enableFullSearch' => 'Включи полнотекстово търсене', @@ -1062,6 +1067,8 @@ $text = array( 'settings_enableRecursiveCount_desc' => '', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', 'settings_enableSessionList' => '', @@ -1377,9 +1384,12 @@ $text = array( 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => '', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => '', 'timeline_skip_status_change_-3' => '', 'timeline_skip_status_change_0' => '', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index 0464bd0c9..3257f4eab 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -120,6 +120,7 @@ URL: [url]', 'archive_creation_warning' => 'Amb aquesta operació pot crear un arxiu que contingui els fitxers de les carpetes del DMS complet. Després de crear-lo, l\'arxiu es guardarà a la carpeta de dades del servidor.
ATENCIÓ: un fitxer creat com llegible per humans no es podrà usar com a còpia de seguretat del servidor.', 'ar_EG' => 'Àrab', 'assign_approvers' => 'Assignar aprovadors', +'assign_recipients' => '', 'assign_reviewers' => 'Assignar revisors', 'assign_user_property_to' => 'Assignar propietats d\'usuari a', 'assumed_released' => 'Se suposa com a publicat', @@ -313,6 +314,7 @@ URL: [url]', 'documents_to_review' => 'Documents en espera de revisió d\'usuaris', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => 'Documents de la seva propietat que requereixen atenció', @@ -523,6 +525,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Individuals', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => '', 'inherits_access_copy_msg' => 'Copiar llista d\'accés heretat', 'inherits_access_empty_msg' => 'Començar amb una llista d\'accés buida', @@ -1033,6 +1036,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => '', 'settings_enableEmail' => 'Enable E-mail', 'settings_enableEmail_desc' => '', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Enable Folder Tree', 'settings_enableFolderTree_desc' => 'False to don\'t show the folder tree', 'settings_enableFullSearch' => 'Enable Full text search', @@ -1067,6 +1072,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => '', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', 'settings_enableSessionList' => '', @@ -1382,9 +1389,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => '', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => '', 'timeline_skip_status_change_-3' => '', 'timeline_skip_status_change_0' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index 1554384a8..bbc418052 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 (732), kreml (455) +// Translators: Admin (735), kreml (455) $text = array( '2_factor_auth' => '', @@ -131,6 +131,7 @@ URL: [url]', 'archive_creation_warning' => 'Pomocí této operace můžete vytvořit archiv obsahující soubory z celé složky DMS. Po jeho vytvoøení bude archiv ulžen v datové složce serveru. POZOR: archiv bude vytvořen jako běžně čitelný, nelze jej použít jako záložní server.', 'ar_EG' => 'Arabština', 'assign_approvers' => 'Přiřazení schvalující', +'assign_recipients' => '', 'assign_reviewers' => 'Přiřazení kontroloři', 'assign_user_property_to' => 'Přiřazení uživatelských vlastností', 'assumed_released' => 'Pokládá se za zveřejněné', @@ -330,6 +331,7 @@ URL: [url]', 'documents_to_review' => 'Dokumenty čekající na kontrolu uživatele', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => 'Dokumenty, které uživatel vlastní a vyžadují pozornost', @@ -420,8 +422,8 @@ URL: [url]', 'dump_creation_warning' => 'Pomocí této operace můžete vytvořit soubor se zálohou databáze. Po vytvoření bude soubor zálohy uložen ve složce data vašeho serveru.', 'dump_list' => 'Existující soubory záloh', 'dump_remove' => 'Odstranit soubor zálohy', -'duplicates' => '', -'duplicate_content' => '', +'duplicates' => 'Duplikáty', +'duplicate_content' => 'Duplicitní obsah', 'edit' => 'upravit', 'edit_attributes' => 'Editovat atributy', 'edit_comment' => 'Upravit komentář', @@ -594,6 +596,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Jednotlivci', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'Zděděno', 'inherits_access_copy_msg' => 'Zkopírovat zděděný seznam řízení přístupu', 'inherits_access_empty_msg' => 'Založit nový seznam řízení přístupu', @@ -1172,6 +1175,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Povolit duplicitu názvů dokumentů ve složce', 'settings_enableEmail' => 'Enable E-mail', 'settings_enableEmail_desc' => 'Enable/disable automatic email notification', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Enable Folder Tree', 'settings_enableFolderTree_desc' => 'False to don\'t show the folder tree', 'settings_enableFullSearch' => 'Enable Full text search', @@ -1206,6 +1211,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Při zapnutí je počet dokumentů a složek v zobrazení složek určen počítáním všech objektů při rekurzivním zpracování složek a počítáním těch dokumentů a složek, ke kterým má uživatel přístup.', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_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' => '', @@ -1521,9 +1528,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => '', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => '', 'timeline_skip_status_change_-3' => '', 'timeline_skip_status_change_0' => '', @@ -1606,7 +1616,7 @@ URL: [url]', 'users_and_groups' => 'Uživatelé/Skupiny', 'users_done_work' => 'Uživatel ukončil práci', 'user_exists' => 'Uživatel už existuje.', -'user_group' => '', +'user_group' => 'Uživatel/Skupina', 'user_group_management' => 'Správa uživatelů/skupin', 'user_image' => 'Obrázek', 'user_info' => 'Informace o uživateli', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 2de2fc537..33dbc26a7 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 (2506), dgrutsch (22) +// Translators: Admin (2518), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -136,6 +136,7 @@ URL: [url]', 'archive_creation_warning' => 'Mit dieser Operation können Sie ein Archiv mit allen Dokumenten des DMS erzeugen. Nach der Erstellung wird das Archiv im Datenordner Ihres Servers gespeichert.
Warnung: ein menschenlesbares Archiv ist als Server-Backup unbrauchbar.', 'ar_EG' => 'Arabisch', 'assign_approvers' => 'Freigebende zuweisen', +'assign_recipients' => 'Empfänger zuweisen', 'assign_reviewers' => 'Prüfer zuweisen', 'assign_user_property_to' => 'Dokumente einem anderen Benutzer zuweisen', 'assumed_released' => 'Angenommen, freigegeben', @@ -335,6 +336,7 @@ URL: [url]', 'documents_to_review' => 'Prüfung erforderlich', 'documents_to_revise' => 'Erneute Prüfung erforderlich', 'documents_user_expiration' => 'Abgelaufende Dokumente', +'documents_user_no_reception' => 'Dokumente ohne Empfangsbestätigung', 'documents_user_reception' => 'Dokumente mit Empfangsbestätigung', 'documents_user_rejected' => 'Abgelehnte Dokumente', 'documents_user_requiring_attention' => 'Diese Dokumente sollte ich mal nachsehen', @@ -610,6 +612,7 @@ URL: [url]', 'index_waiting' => 'Warte', 'individuals' => 'Einzelpersonen', 'indivіduals_in_groups' => 'Mitglieder einer Gruppe', +'info_recipients_tab_not_released' => 'Die Bestätigung des Empfangs für diese Dokumentenversion ist nicht möglich, weil die Version nicht freigegeben ist.', 'inherited' => 'geerbt', 'inherits_access_copy_msg' => 'Berechtigungen kopieren', 'inherits_access_empty_msg' => 'Leere Zugriffsliste', @@ -1238,6 +1241,8 @@ Name: [username] 'settings_enableDuplicateDocNames_desc' => 'Erlaube doppelte Dokumentennamen in einem Ordner.', 'settings_enableEmail' => 'E-mail aktivieren', 'settings_enableEmail_desc' => 'Automatische E-Mail-Benachrichtigung ein-/ausschalten', +'settings_enableFilterReceipt' => 'Besitzer, Prüfer, ... aus Empfängerliste filtern', +'settings_enableFilterReceipt_desc' => 'Anwählen, um einige Empfänger aus der Liste zu entfernen, wenn diese als Mitglieder einer Gruppe eingetragen werden.', 'settings_enableFolderTree' => 'Verzeichnisbaum einschalten', 'settings_enableFolderTree_desc' => 'Schaltet den Verzeichnisbaum auf der \'View Folder\' Seite ein oder aus', 'settings_enableFullSearch' => 'Volltextsuche einschalten', @@ -1272,6 +1277,8 @@ Name: [username] 'settings_enableRecursiveCount_desc' => 'Wenn diese Option eingeschaltet ist, wird die Anzahl der Dokumente und Ordner in der Ordner-Ansicht rekursiv, unter Berücksichtigung der Zugriffsrechte ermittelt.', 'settings_enableRevisionWorkflow' => 'Ermögliche Wiederholungsprüfung von Dokumenten', 'settings_enableRevisionWorkflow_desc' => 'Anwählen, um den Workflow der Wiederholungsprüfung von Dokumenten nach einer einstellbaren Zeit zu ermöglichen.', +'settings_enableSelfReceipt' => 'Erlaube Empfangsbestätigung durch angemeldeten Benutzer', +'settings_enableSelfReceipt_desc' => 'Anwählen, um den aktuell angemeldeten Benutzer in der Liste der Empfänger eines Dokuments auswählbar zu machen.', '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 im Menü', @@ -1587,9 +1594,12 @@ Name: [username] 'timeline_add_version' => 'Neue Version [version]', 'timeline_full_add_file' => '[document]
Neuer Anhang', 'timeline_full_add_version' => '[document]
Neue Version [version]', +'timeline_full_scheduled_revision' => '[document]
Wiederholungsprüfung von Version [version]', 'timeline_full_status_change' => '[document]
Version [version]: [status]', +'timeline_scheduled_revision' => 'Wiederholungsprüfung von Version [version]', 'timeline_selected_item' => 'Ausgewähltes Dokument', 'timeline_skip_add_file' => 'Anhang hinzugefügt', +'timeline_skip_scheduled_revision' => 'Geplante Wiederholungsprüfung', 'timeline_skip_status_change_-1' => 'abgelehnt', 'timeline_skip_status_change_-3' => 'abgelaufen', 'timeline_skip_status_change_0' => 'bevorstehende Prüfung', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index e4af1b8ba..cf819995a 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -115,6 +115,7 @@ $text = array( 'archive_creation_warning' => '', 'ar_EG' => 'Arabic/Αραβικά', 'assign_approvers' => '', +'assign_recipients' => '', 'assign_reviewers' => '', 'assign_user_property_to' => '', 'assumed_released' => '', @@ -308,6 +309,7 @@ $text = array( 'documents_to_review' => '', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => '', @@ -518,6 +520,7 @@ $text = array( 'index_waiting' => '', 'individuals' => 'Άτομα', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => '', 'inherits_access_copy_msg' => '', 'inherits_access_empty_msg' => '', @@ -1039,6 +1042,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => '', 'settings_enableEmail' => '', 'settings_enableEmail_desc' => '', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => '', 'settings_enableFolderTree_desc' => '', 'settings_enableFullSearch' => '', @@ -1073,6 +1078,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => '', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', 'settings_enableSessionList' => '', @@ -1388,9 +1395,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => '', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => '', 'timeline_skip_status_change_-3' => '', 'timeline_skip_status_change_0' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 05d76b3af..51d5b1629 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 (1633), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1643), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -136,6 +136,7 @@ URL: [url]', 'archive_creation_warning' => 'With this operation you can create archive containing the files of entire DMS folders. After the creation the archive will be saved in the data folder of your server.
WARNING: an archive created as human readable will be unusable as server backup.', 'ar_EG' => 'Arabic', 'assign_approvers' => 'Assign Approvers', +'assign_recipients' => 'Assign Recipients', 'assign_reviewers' => 'Assign Reviewers', 'assign_user_property_to' => 'Assign user\'s properties to', 'assumed_released' => 'Assumed released', @@ -335,6 +336,7 @@ URL: [url]', 'documents_to_review' => 'Documents awaiting your review', 'documents_to_revise' => 'Documents awaiting your revision', 'documents_user_expiration' => 'Expired documents', +'documents_user_no_reception' => 'Documents without reception', 'documents_user_reception' => 'Documents awaiting reception', 'documents_user_rejected' => 'Rejected documents', 'documents_user_requiring_attention' => 'Documents owned by you that require attention', @@ -611,6 +613,7 @@ URL: [url]', 'index_waiting' => 'Waiting', 'individuals' => 'Individuals', 'indivіduals_in_groups' => 'Members of a group', +'info_recipients_tab_not_released' => 'Acknowledgement of reception for this document version is not possible, because the version is not released.', 'inherited' => 'inherited', 'inherits_access_copy_msg' => 'Copy inherited access list', 'inherits_access_empty_msg' => 'Start with empty access list', @@ -1233,6 +1236,8 @@ Name: [username] 'settings_enableDuplicateDocNames_desc' => 'Allows to have duplicate document names in a folder.', 'settings_enableEmail' => 'Enable E-mail', 'settings_enableEmail_desc' => 'Enable/disable automatic email notification', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Enable Folder Tree', 'settings_enableFolderTree_desc' => 'Enable/Disable the folder tree on the \'View Folder\' page', 'settings_enableFullSearch' => 'Enable Full text search', @@ -1267,6 +1272,8 @@ Name: [username] 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', 'settings_enableRevisionWorkflow' => 'Enable revision of documents', 'settings_enableRevisionWorkflow_desc' => 'Enable, to be able to run the workflow for revising a document after a given period of time.', +'settings_enableSelfReceipt' => 'Allow reception for logged in user', +'settings_enableSelfReceipt_desc' => 'Enable this if you want the currently logged in user to be listed as recipient for a document.', '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 in menu', @@ -1582,9 +1589,12 @@ Name: [username] 'timeline_add_version' => 'New version [version]', 'timeline_full_add_file' => '[document]
New Attachment', 'timeline_full_add_version' => '[document]
New version [version]', +'timeline_full_scheduled_revision' => '[document]
Revision of version [version]', 'timeline_full_status_change' => '[document]
Version [version]: [status]', +'timeline_scheduled_revision' => 'Revision of version [version]', 'timeline_selected_item' => 'Selected document', 'timeline_skip_add_file' => 'attachment added', +'timeline_skip_scheduled_revision' => 'Scheduled revision', 'timeline_skip_status_change_-1' => 'rejected', 'timeline_skip_status_change_-3' => 'expired', 'timeline_skip_status_change_0' => 'pending review', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 7c6fbd882..f1aeb8e05 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 (1044), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1052), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -131,6 +131,7 @@ URL: [url]', 'archive_creation_warning' => 'Con esta operación usted puede crear un archivo que contenga los ficheros de las carpetas del DMS completo. Después de crearlo el archivo se guardará en la carpeta de datos de su servidor.
CUIDADO: un fichero creado como legible por humanos no podrá usarse como copia de seguridad del servidor.', 'ar_EG' => 'Arabe', 'assign_approvers' => 'Asignar aprobadores', +'assign_recipients' => '', 'assign_reviewers' => 'Asignar revisores', 'assign_user_property_to' => 'Asignar propiedades de usuario a', 'assumed_released' => 'Supuestamente publicado', @@ -287,7 +288,7 @@ URL: [url]', 'content' => 'Contenido', 'continue' => 'Continuar', 'converter_new_cmd' => 'Comando', -'converter_new_mimetype' => '', +'converter_new_mimetype' => 'Nuevo mime type', 'copied_to_checkout_as' => '', 'create_download_link' => '', 'create_fulltext_index' => 'Crear índice de texto completo', @@ -330,8 +331,9 @@ URL: [url]', 'documents_to_review' => 'Documentos en espera de revisión de usuarios', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', -'documents_user_rejected' => '', +'documents_user_rejected' => 'Documentos rechazados', 'documents_user_requiring_attention' => 'Documentos de su propiedad que requieren atención', 'documents_with_notification' => '', 'document_already_checkedout' => '', @@ -594,6 +596,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Individuales', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'heredado', 'inherits_access_copy_msg' => 'Copiar lista de acceso heredado', 'inherits_access_empty_msg' => 'Empezar con una lista de acceso vacía', @@ -850,7 +853,7 @@ Si continua teniendo problemas de acceso, por favor contacte con el administrado 'password_strength' => 'Fortaleza de la contraseña', 'password_strength_insuffient' => 'Insuficiente Seguridad de la contraseña', 'password_wrong' => 'Contraseña incorrecta', -'pdf_converters' => '', +'pdf_converters' => 'Convertidores a PDF', 'pending_approvals' => '', 'pending_receipt' => '', 'pending_reviews' => '', @@ -861,7 +864,7 @@ Si continua teniendo problemas de acceso, por favor contacte con el administrado 'possible_substitutes' => '', 'preset_expires' => 'Establece caducidad', 'preview' => '', -'preview_converters' => '', +'preview_converters' => 'Vista previa del documento convertido', 'preview_images' => '', 'preview_markdown' => '', 'preview_pdf' => '', @@ -1101,7 +1104,7 @@ URL: [url]', 'settings_autoLoginUser_desc' => '', 'settings_available_languages' => 'Idiomas disponibles', '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' => 'Directorio de copia de seguridad', 'settings_backupDir_desc' => '', 'settings_cacheDir' => 'Carpeta caché', 'settings_cacheDir_desc' => 'Donde están archivadas las imágenes anteriores (mejor elegir una carpeta que no sea accesible a través de su servidor web)', @@ -1178,6 +1181,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Permite tener un nombre de documento duplicado en una carpeta.', 'settings_enableEmail' => 'Habilitar E-mail', 'settings_enableEmail_desc' => 'Habilitar/Deshabilitar notificación automática por correo electrónico', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Habilitar árbol de carpetas', 'settings_enableFolderTree_desc' => 'Falso para no mostrar el árbol de carpetas', 'settings_enableFullSearch' => 'Habilitar búsqueda de texto completo', @@ -1192,7 +1197,7 @@ URL: [url]', 'settings_enableLanguageSelector_desc' => 'Mostrar selector de lenguaje para usuario despues de identificarse.', 'settings_enableLargeFileUpload' => 'Habilitar la carga de ficheros grandes', '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' => 'Activar en el menú la lista de tareas', 'settings_enableMenuTasks_desc' => '', 'settings_enableMultiUpload' => 'Permitir subir múltiples archivos', 'settings_enableMultiUpload_desc' => '', @@ -1212,9 +1217,11 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Si cambia a activado, el número de documentos y carpetas en la carpeta será determinado por la cuenta de todos los objetos recursivos procesados de la carpeta y una vez contados el usuarios tendrá permiso para acceder.', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_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' => 'Activar en el menú la lista de usuarios conectados', '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', @@ -1291,7 +1298,7 @@ URL: [url]', 'settings_maxRecursiveCount_desc' => 'Este es el número máximo de documentos o carpetas que pueden ser revisados con derechos de acceso, contando objetos recursivos. Si este número es excedido , el número de carpetas y documentos en la vista de carpeta será estimado.', 'settings_maxSizeForFullText' => 'Tamaño máximo del fichero para el indexado inmediato', 'settings_maxSizeForFullText_desc' => 'Todo documento nuevo menor que el tamaño configurado será indexado completamente después de su subida. En los demás casos se indexarán solo los metadatos.', -'settings_maxUploadSize' => '', +'settings_maxUploadSize' => 'Tamaño máximo de subida archivos', 'settings_maxUploadSize_desc' => '', 'settings_more_settings' => 'Configure más parámetros. Acceso por defecto: admin/admin', 'settings_notfound' => 'No encontrado', @@ -1527,9 +1534,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '[document
nuevo anexo', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
Versión [version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => 'anexos agregados', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'rechazado', 'timeline_skip_status_change_-3' => 'expirado', 'timeline_skip_status_change_0' => 'revisiones pendientes', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 995d31ea9..a409989c1 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 (1068), jeromerobert (50), lonnnew (9), Oudiceval (475) +// Translators: Admin (1069), jeromerobert (50), lonnnew (9), Oudiceval (477) $text = array( '2_factor_auth' => 'Authentification forte', @@ -136,6 +136,7 @@ URL : [url]', 'archive_creation_warning' => 'Avec cette fonction, vous pouvez créer une archive contenant les fichiers de tous les dossiers DMS. Après la création, l\'archive sera sauvegardée dans le dossier de données de votre serveur.
AVERTISSEMENT: Une archive créée ainsi sera inutilisable en tant que sauvegarde du serveur.', 'ar_EG' => 'Arabe – Égypte', 'assign_approvers' => 'Approbateurs désignés', +'assign_recipients' => '', 'assign_reviewers' => 'Examinateurs désignés', 'assign_user_property_to' => 'Assigner les propriétés de l\'utilisateur à', 'assumed_released' => 'Supposé publié', @@ -335,6 +336,7 @@ URL: [url]', 'documents_to_review' => 'Documents en attente de vérification', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => 'Documents en attente de réception', 'documents_user_rejected' => 'Documents rejetés', 'documents_user_requiring_attention' => 'Documents à surveiller', @@ -606,6 +608,7 @@ URL: [url]', 'index_waiting' => 'Chargement…', 'individuals' => 'Individuels', 'indivіduals_in_groups' => 'Membres d’un groupe', +'info_recipients_tab_not_released' => '', 'inherited' => 'hérité', 'inherits_access_copy_msg' => 'Copier la liste des accès hérités', 'inherits_access_empty_msg' => 'Commencer avec une liste d\'accès vide', @@ -813,7 +816,7 @@ URL: [url]', 'no_revision_planed' => '', 'no_update_cause_locked' => 'Vous ne pouvez actuellement pas mettre à jour ce document. Contactez l\'utilisateur qui l\'a verrouillé.', 'no_user_image' => 'Aucune image trouvée', -'no_version_check' => 'La vérification de l\'existence d\'une nouvelle version de SeedDMS a échouée ! Ceci est peut être lié au paramétre allow_url_fopen positionné à 0 dans votre configuration PHP.', +'no_version_check' => 'La vérification de l\'existence d\'une nouvelle version de SeedDMS a échoué ! Cela peut être causé par le paramètre allow_url_fopen défini à 0 dans votre configuration PHP.', 'no_version_modification' => 'Pas de modification de version', 'no_workflow_available' => 'Aucun workflow disponible', 'objectcheck' => 'Vérification des dossiers et documents', @@ -860,7 +863,7 @@ En cas de problème persistant, veuillez contacter votre administrateur.', 'password_strength' => 'Fiabilité du mot de passe', 'password_strength_insuffient' => 'Mot de passe trop faible', 'password_wrong' => 'Mauvais mot de passe', -'pdf_converters' => '', +'pdf_converters' => 'Convertisseurs PDF', 'pending_approvals' => 'Approbations en attente', 'pending_receipt' => 'Réceptions en attente', 'pending_reviews' => 'Vérifications en attente', @@ -1200,6 +1203,8 @@ Nom : [username] 'settings_enableDuplicateDocNames_desc' => 'Autorise plusieurs documents de même nom dans un même dossier.', 'settings_enableEmail' => 'E-mails', 'settings_enableEmail_desc' => 'Activer/désactiver la notification automatique par E-mail', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Activer l\'arborescence des dossiers', 'settings_enableFolderTree_desc' => 'False pour ne pas montrer l\'arborescence des dossiers', 'settings_enableFullSearch' => 'Activer la recherche plein texte', @@ -1234,6 +1239,8 @@ Nom : [username] 'settings_enableRecursiveCount_desc' => 'Si activé, le nombre de documents et répertoires dans un répertoire est calculé en comptant récursivement le contenu des sous-répertoires auxquels l\'utilisateur a accès.', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => 'Autoriser vérification/approbation par l’utilisateur actuel', 'settings_enableSelfRevApp_desc' => 'Activer cette option pour ajouter l’utilisateur actuel à la liste des examinateurs/approbateurs et pour les transitions de workflow.', 'settings_enableSessionList' => 'Activer la liste des utilisateurs en ligne', @@ -1549,9 +1556,12 @@ Nom : [username] 'timeline_add_version' => 'Nouvelle version ([version])', 'timeline_full_add_file' => '[document]
Nouveau fichier attaché', 'timeline_full_add_version' => '[document]
Nouvelle version ([version])', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
Version [version] : [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => 'Document sélectionné', 'timeline_skip_add_file' => 'avec fichiers attachés', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'rejetés', 'timeline_skip_status_change_-3' => 'expirés', 'timeline_skip_status_change_0' => 'en attente de revue', @@ -1693,7 +1703,7 @@ URL: [url]', 'workflow_summary' => 'Vue d’ensemble du workflow', 'workflow_transition_without_user_group' => 'Au moins une transition a ni utilisateur, ni groupe !', 'workflow_user_summary' => 'Vue d’ensemble de l’utilisateur', -'x_more_objects' => '', +'x_more_objects' => 'éléments supplémentaires', 'year_view' => 'Vue annuelle', 'yes' => 'Oui', 'zh_CN' => 'Chinois (CN)', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index d63979c46..838c1e1fd 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -136,6 +136,7 @@ Internet poveznica: [url]', 'archive_creation_warning' => 'Ovom radnjom možete izraditi arhivu koja sadrži datoteke cijele DMS mape. Nakon izrade arhiva će biti pohranjena u podatkovnu mapu vašer servera.
UPOZORENJE: arhiva izrađena na način da je čitljiva ljudima, bit će bezkorisna kao sigurnosna kopija servera.', 'ar_EG' => 'Arapski', 'assign_approvers' => 'Dodijeli validatore', +'assign_recipients' => '', 'assign_reviewers' => 'Dodijeli recezente', 'assign_user_property_to' => 'Dodijeli svojstva korisnika za', 'assumed_released' => 'Podrazumijevano obrađeno', @@ -335,6 +336,7 @@ Internet poveznica: [url]', 'documents_to_review' => 'Dokumenti koji čekaju vaš pregled', 'documents_to_revise' => 'Dokumenti za reviziju', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => 'Odbijeni dokumenti', 'documents_user_requiring_attention' => 'Dokumenti u vašem vlasništvu koji zahtjevaju pažnju', @@ -599,6 +601,7 @@ Internet poveznica: [url]', 'index_waiting' => '', 'individuals' => 'Pojedinci', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'naslijeđeno', 'inherits_access_copy_msg' => 'Kopiraj listu naslijeđenih prava pristupa', 'inherits_access_empty_msg' => 'Započnite s praznim popisom pristupa', @@ -1199,6 +1202,8 @@ Internet poveznica: [url]', 'settings_enableDuplicateDocNames_desc' => 'Omogućuje da u mapi imate dvostruke nazive dokumenata.', 'settings_enableEmail' => 'Omogući E-mail', 'settings_enableEmail_desc' => 'Omogući/onemogući automatsku email obavijest', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Omogući stablo mape', 'settings_enableFolderTree_desc' => 'Omogući/onemogući stablo mape na \'Vidi mapu\' stranici', 'settings_enableFullSearch' => 'Omogući pretraživanje cijelog teksta', @@ -1233,6 +1238,8 @@ Internet poveznica: [url]', 'settings_enableRecursiveCount_desc' => 'Ako je uključeno, broj dokumenata i mapa u pregledu mape će biti određen brojanjem svih objekata rekurzivnom obradom mapa i brojanjem tih dokumenata i mapa kojima je korisniku omogućen pristup.', 'settings_enableRevisionWorkflow' => 'Omogućavanje revizije dokumenata', 'settings_enableRevisionWorkflow_desc' => 'Omogućite kako bi se mogao pokrenuti tok rada za revidiranje dokumenta nakon zadanog vremenskog perioda.', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_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' => '', @@ -1548,9 +1555,12 @@ Internet poveznica: [url]', 'timeline_add_version' => 'Nova verzija [version]', 'timeline_full_add_file' => '[document]
Novi prilog', 'timeline_full_add_version' => '[document]
Nova verzija [version]', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
Verzija [version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => 'Odabrani dokument', 'timeline_skip_add_file' => 'dodan prilog', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'odbijeno', 'timeline_skip_status_change_-3' => 'isteklo', 'timeline_skip_status_change_0' => 'na čekanju za pregled', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 59e2fe732..7998c7f78 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -131,6 +131,7 @@ URL: [url]', 'archive_creation_warning' => 'Ezzel a művelettel archívumot hozhat létre, amely tartalmazza az összes DMS mappában található állományokat. A létrehozás követően az archívum a kiszolgáló adat mappájába lesz mentve.
FIGYELEM: az archívum értelmezhető formában kerül tárolásra és nem használható kiszolgáló mentésként.', 'ar_EG' => 'Arab', 'assign_approvers' => 'Jóváhagyók hozzárendelése', +'assign_recipients' => '', 'assign_reviewers' => 'Felülvizsgálók hozzárendelése', 'assign_user_property_to' => 'Felhasználói tulajdonságok hozzárendelése', 'assumed_released' => 'Feltételesen kiadott', @@ -330,6 +331,7 @@ URL: [url]', 'documents_to_review' => 'Felülvizsgálatára váró dokumentumok', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => 'Az Ön tulajdonában álló dokumentumok, amelyekre figyelmet kell fordítani', @@ -594,6 +596,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Egyedek', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'örökölt', 'inherits_access_copy_msg' => 'Örökített hozzáférési lista másolása', 'inherits_access_empty_msg' => 'Indulás üres hozzáférési listával', @@ -1177,6 +1180,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Engedélyezi az azonos dokumentum neveket egy mappában.', 'settings_enableEmail' => 'Email engedélyezése', 'settings_enableEmail_desc' => 'Engedélyezi/tiltja az automatikus email értesítést', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Mappa fastruktúra engedélyezése', 'settings_enableFolderTree_desc' => 'Hamis hogy ne jelenjen meg a mappa fastruktúra', 'settings_enableFullSearch' => 'Teljes szöveg keresés engedélyezése', @@ -1211,6 +1216,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Ha be van kapcsolva a mappa nézetben a dokumentumok és mappák száma minden objektum rekurzív feldolgozásával kerül meghatározásra és a dokumentumok és mappák száma a felhasználó számára engedélyezett.', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_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' => '', @@ -1526,9 +1533,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => 'melléklet hozzáadva', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'visszautasítva', 'timeline_skip_status_change_-3' => 'lejárt', 'timeline_skip_status_change_0' => 'felülvizsgálatra vár', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 9f218ba32..dd383cb9d 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 (1572), rickr (144), s.pnt (26) +// Translators: Admin (1574), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -136,6 +136,7 @@ URL: [url]', 'archive_creation_warning' => 'Con questa operazione è possibile creare archivi contenenti i file di intere cartelle del DMS. Dopo la creazione l\'archivio viene salvato nella cartella dati del server. Attenzione: un archivio creato per uso esterno non è utilizzabile come backup del server.', 'ar_EG' => 'Arabo', 'assign_approvers' => 'Assegna Approvatori', +'assign_recipients' => '', 'assign_reviewers' => 'Assegna Revisori', 'assign_user_property_to' => 'Assegna le proprietà dell\'utente a', 'assumed_released' => 'Rilascio acquisito', @@ -336,6 +337,7 @@ URL: [url]', 'documents_to_review' => 'Documenti in attesa della tua revisione', 'documents_to_revise' => 'Documenti da revisionare.', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => 'Documenti rifiutati', 'documents_user_requiring_attention' => 'Tuoi documenti in attesa di revisione o approvazione', @@ -600,6 +602,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Singoli', 'indivіduals_in_groups' => 'I membri de la gruppo', +'info_recipients_tab_not_released' => '', 'inherited' => 'ereditato', 'inherits_access_copy_msg' => 'Copia la lista degli accessi ereditati', 'inherits_access_empty_msg' => 'Reimposta una lista di permessi vuota', @@ -856,7 +859,7 @@ Dovessero esserci ancora problemi al login, prego contatta l\'Amministratore di 'password_strength' => 'Sicurezza password', 'password_strength_insuffient' => 'Efficacia della password insufficiente', 'password_wrong' => 'Password errata', -'pdf_converters' => '', +'pdf_converters' => 'Convertitore a PDF', 'pending_approvals' => 'Approvazioni in sospeso', 'pending_receipt' => '', 'pending_reviews' => 'In attesa di recensioni', @@ -1211,6 +1214,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Permetti documenti con lo stesso nome nella stessa cartella', 'settings_enableEmail' => 'Abilita l\'email', 'settings_enableEmail_desc' => 'Abilita/disabilita la notifica automatica via email', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Visualizza la struttura ad albero', 'settings_enableFolderTree_desc' => 'Abilita/disabilita la visualizzaione della struttura ad albero nella pagina \'Vista cartella\'', 'settings_enableFullSearch' => 'Abilita ricerca fulltext', @@ -1245,6 +1250,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Se selezionato il numero di documenti e sottocartelle accessibili all\'utente sarà calcolato con un conteggio ricursivo di tutti gli oggetti contenuti nella cartella.', 'settings_enableRevisionWorkflow' => 'Abilita revisione documenti', 'settings_enableRevisionWorkflow_desc' => 'Abilita per attivare workflow su revisione documenti dopo scadenza.', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', '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' => '', @@ -1560,9 +1567,12 @@ URL: [url]', 'timeline_add_version' => 'Nuova versione [version]', 'timeline_full_add_file' => '[document]
Nuovo attacco', 'timeline_full_add_version' => '[document]
Nuovo versione [version]', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
Versione [version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => 'Documento selezionato', 'timeline_skip_add_file' => 'allegato aggiunto', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'respinto', 'timeline_skip_status_change_-3' => 'scaduto', 'timeline_skip_status_change_0' => 'in attesa di revisione', @@ -1704,7 +1714,7 @@ URL: [url]', 'workflow_summary' => 'Riepilogo flusso di lavoro', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Riepilogo utenti', -'x_more_objects' => '', +'x_more_objects' => '[number] altri oggetti', 'year_view' => 'Vista anno', 'yes' => 'Sì', 'zh_CN' => 'Cinese (CN)', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index 2cc63819c..fcb380e14 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -136,6 +136,7 @@ URL: [url]', 'archive_creation_warning' => '본 작업은 전체 DMS 폴더 내의 파일 모두에 아카이브를 만듭니다. 생성한 아카이브는 서버의 데이터 폴더에 저장됩니다.
경고 : 이렇게 만들어진 자료는 서버의 백업과 같이 가독성이 저하 됩니다.', 'ar_EG' => '아랍어', 'assign_approvers' => '승인자 지정', +'assign_recipients' => '', 'assign_reviewers' => '검토자 배정', 'assign_user_property_to' => '사용자 속성에 할당', 'assumed_released' => 'Assumed released', @@ -338,6 +339,7 @@ URL: [url]', 'documents_to_review' => '당신의 검토를 기다리는 문서', 'documents_to_revise' => '문서 정정', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '거부된 문서', 'documents_user_requiring_attention' => '주의가 필요한 당신 소유의 문서', @@ -600,6 +602,7 @@ URL: [url]', 'index_waiting' => '기다리는 중', 'individuals' => '개인', 'indivіduals_in_groups' => '개별 그룹', +'info_recipients_tab_not_released' => '', 'inherited' => '상속', 'inherits_access_copy_msg' => '상속 액세스 목록 복사', 'inherits_access_empty_msg' => '빈 액세스 목록으로 시작', @@ -1193,6 +1196,8 @@ URL : [url]', 'settings_enableDuplicateDocNames_desc' => '이 폴더에 중복 된 문서명을 가질 수 있습니다.', 'settings_enableEmail' => '전자 메일 사용', 'settings_enableEmail_desc' => '자동화 전자우편 알림 활성화/비활성화', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => '폴더 트리 사용', 'settings_enableFolderTree_desc' => '\'View Folder\'에 폴더 트리 표시 활성 / 비활성', 'settings_enableFullSearch' => '전체 텍스트 검색 사용', @@ -1227,6 +1232,8 @@ URL : [url]', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', 'settings_enableRevisionWorkflow' => '문서의 개정 허용', 'settings_enableRevisionWorkflow_desc' => '일정 기간후에 문서를 개정 하기위해 워크플로우를 수행 할 수 있도록 설정 합니다.', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => '로그인 한 사용자에 대한 검토 / 승인을 허용', 'settings_enableSelfRevApp_desc' => '검토 / 승인자로 워크 플로우 전환을 위해 나열되어있는 것이 현재 로그인 한 사용자가 필요한 경우이를 활성화합니다.', 'settings_enableSessionList' => '메뉴에 온라인 사용자 목록 활성화', @@ -1542,9 +1549,12 @@ URL : [url]', 'timeline_add_version' => '새버전', 'timeline_full_add_file' => '[document]
새 첨부', 'timeline_full_add_version' => '[document]
새버전 [version]', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
버전[version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '선택된 타임라인 항목', 'timeline_skip_add_file' => '첨부 파일 이 추가 되었습니다', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => '거부', 'timeline_skip_status_change_-3' => '만료', 'timeline_skip_status_change_0' => '보류된 검토', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index c6f3c40da..fea2ee847 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -19,22 +19,22 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (745), gijsbertush (333), pepijn (45), reinoutdijkstra@hotmail.com (270) +// Translators: Admin (745), gijsbertush (610), pepijn (45), reinoutdijkstra@hotmail.com (270) $text = array( -'2_factor_auth' => 'Twee-factor-authorisatie', -'2_factor_auth_info' => 'Info 2-factor-authorisatie', -'2_fact_auth_secret' => 'Toegangscode 2-factor-authorisatie', -'accept' => 'Accept', +'2_factor_auth' => '2-factor-authenticatie', +'2_factor_auth_info' => 'Dit systeem werkt met 2-factor-authenticatie. U heeft de Google Authenticator nodig op uf mobiele telfoon. Hieronder staan 2 QR-codes. De rechter is uw huidige geheime code. Met de linker kunt u een nieuwe geheime code instellen. Denk erom de nieuwe code opnieuw te scannen met Googke Authenticator.', +'2_fact_auth_secret' => 'Toegangscode 2-factor-authenticatie', +'accept' => 'Accepteren', 'access_control' => 'Toegangscontrole', -'access_control_is_off' => 'Toegansgscontrole staat uit', +'access_control_is_off' => 'Toegangscontrole staat uit', 'access_denied' => 'Geen toegang.', 'access_inheritance' => 'Toegang overgeërfd', -'access_mode' => 'Toegang modus', +'access_mode' => 'Toegangsmodus', 'access_mode_all' => 'Alle machtigingen', 'access_mode_none' => 'Geen toegang', -'access_mode_read' => 'Lees rechten', -'access_mode_readwrite' => 'Lees en Schrijf rechten', +'access_mode_read' => 'Leesrechten', +'access_mode_readwrite' => 'Lees- en Schrijf rechten', 'access_permission_changed_email' => 'Machtigingen gewijzigd', 'access_permission_changed_email_body' => 'Toestemming veranderd Document: [naam] @@ -47,14 +47,14 @@ URL: [url]', 'actions' => 'Acties', 'action_approve' => 'Goedkeuren', 'action_complete' => 'Compleet', -'action_is_complete' => 'Is compleet', -'action_is_not_complete' => 'Is niet compleet', +'action_is_complete' => 'is compleet', +'action_is_not_complete' => 'is niet compleet', 'action_reject' => 'Geweigerd', 'action_review' => 'Beoordelen', -'action_revise' => 'Herzie', +'action_revise' => 'Nog herzien', 'add' => 'Toevoegen', 'add_approval' => 'Verzend [Goedkeuring]', -'add_attrdefgroup' => '', +'add_attrdefgroup' => 'Voeg een nieuwe attribuutgroep toe', 'add_document' => 'Document toevoegen', 'add_document_link' => 'Link toevoegen', 'add_document_notify' => 'Notificatie toekennen', @@ -88,20 +88,20 @@ URL: [url]', 'already_subscribed' => 'Al ingetekend', 'and' => 'en', 'apply' => 'Toepassen', -'approvals_accepted' => '', -'approvals_and_reviews_accepted' => '', -'approvals_and_reviews_not_touched' => '', -'approvals_and_reviews_rejected' => '', -'approvals_not_touched' => '', -'approvals_rejected' => '', -'approvals_without_group' => '', -'approvals_without_user' => '', -'approval_deletion_email' => 'Goedkeuring verzoek verwijderd', -'approval_deletion_email_body' => 'Vraag om goedkeuring verwijderd +'approvals_accepted' => '[no_approvals] goedkeuringen', +'approvals_and_reviews_accepted' => '[no_approvals] goedkeuringen en [no_reviews] geaccepteerde reviews', +'approvals_and_reviews_not_touched' => '[no_approvals] goedkeuringen [no_reviews] reviews nog niet behandeld', +'approvals_and_reviews_rejected' => '[no_approvals] goedkeuringen en [no_reviews] reviews afgekeurd', +'approvals_not_touched' => '[no_approvals] goedkeuringen nog niet behandeld', +'approvals_rejected' => '[no_approvals] goedkeuringen afgekeurd', +'approvals_without_group' => 'Goedkeuringen zonder groep', +'approvals_without_user' => 'Goedkeuringen zonder gebruiker', +'approval_deletion_email' => 'Goedkeuringsverzoek verwijderd', +'approval_deletion_email_body' => 'Approval request deleted Document: [name] -Versie: [version] -Map: [folder_path] -Gebruiker: [username] +Version: [version] +Parent folder: [folder_path] +User: [username] URL: [url]', 'approval_deletion_email_subject' => '[sitename]: [name] - Verzoek om goedkeuring verwijderd', 'approval_file' => 'Goedkeuring bestand', @@ -129,14 +129,15 @@ URL: [url]', 'archive_creation_warning' => 'Met deze handeling maakt U een Archief aan van alle bestanden in het DMS. Na het aanmaken van het Archief, wordt deze opgeslagen in de data-map van uw server.
Waarschuwing: een leesbaar Archief kan niet worden gebruikt voor server back-up doeleinde.', 'ar_EG' => 'Arabisch', 'assign_approvers' => 'Aangewezen [Goedkeurders]', +'assign_recipients' => '', 'assign_reviewers' => 'Aangewezen [Controleurs]', 'assign_user_property_to' => 'Wijs gebruikers machtigingen toe aan', -'assumed_released' => 'aangenomen status: Gepubliceerd', -'attrdefgroup_management' => '', -'attrdefgrp_show_detail' => '', -'attrdefgrp_show_list' => '', -'attrdefgrp_show_search' => '', -'attrdefgrp_show_searchlist' => '', +'assumed_released' => 'vermoedelijke status: Gepubliceerd', +'attrdefgroup_management' => 'Beheer attribuut-definiities', +'attrdefgrp_show_detail' => 'Details Beheer attribuut-definiities', +'attrdefgrp_show_list' => 'Lijst van attribuut-definiities', +'attrdefgrp_show_search' => 'Zoeken naar attribuut-definiities', +'attrdefgrp_show_searchlist' => 'Lijst van gezochte attribuut-definiities', 'attrdef_exists' => 'Kenmerk definitie bestaat al', 'attrdef_info' => 'Kenmerk info', 'attrdef_in_use' => 'Kenmerk definitie nog in gebruikt', @@ -171,18 +172,18 @@ URL: [url]', 'attribute_changed_email_subject' => '[sitename]: [name] - Attribuut gewijzigd', 'attribute_count' => 'Aantal maal gebruikt', 'attribute_value' => 'Waarde van het attribuut', -'attribute_value_not_in_valueset' => '', -'attr_malformed_boolean' => '', -'attr_malformed_date' => '', +'attribute_value_not_in_valueset' => 'Waarde van attribuut bestaat niet', +'attr_malformed_boolean' => 'Foute vormgeving boolean', +'attr_malformed_date' => 'Foute vormgeving datum', 'attr_malformed_email' => 'Foute vormgeving email', -'attr_malformed_float' => '', -'attr_malformed_int' => '', -'attr_malformed_url' => 'Foute url', +'attr_malformed_float' => 'Foute vormgeving getal', +'attr_malformed_int' => 'Foute vormgeving geheel getal', +'attr_malformed_url' => 'Foute vormgeving url', 'attr_max_values' => 'attribuut: maximale waarde', 'attr_min_values' => 'attribuut: minimale waarde', -'attr_not_in_valueset' => '', +'attr_not_in_valueset' => 'Attribuut bestaat niet', 'attr_no_regex_match' => 'De waarde van het attribuut komt niet overeen met de veelgebruikte uitdrukking (regular expression)', -'attr_validation_error' => '', +'attr_validation_error' => 'Attribuut niet geldig', 'at_least_n_users_of_group' => 'Minimaal [number_of_users] gebruikers van [group]', 'august' => 'augustus', 'authentication' => 'Authentificatie', @@ -235,11 +236,11 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'File is onvindbaar', 'checkedout_file_is_unchanged' => 'Checkout-document ongewijzigd', 'checkin_document' => 'Veranderd document', -'checkoutpath_does_not_exist' => '', +'checkoutpath_does_not_exist' => 'Checkout-pad bestaat niet', 'checkout_document' => 'Checkout-document', 'checkout_is_disabled' => 'Checkout is niet mogelijk', -'choose_attrdef' => 'Selecteer een kenmerk definitie', -'choose_attrdefgroup' => '', +'choose_attrdef' => 'Kies een kenmerkdefinitie', +'choose_attrdefgroup' => 'Kies een kenmerkdefinite-groep', 'choose_category' => 'Selecteer a.u.b.', 'choose_group' => 'Selecteer Groep', 'choose_role' => 'Selecteer een rol', @@ -251,17 +252,17 @@ URL: [url]', 'choose_workflow' => 'Kies workflow', 'choose_workflow_action' => 'Kies workflow actie', 'choose_workflow_state' => 'kiest workflowstatus', -'class_name' => '', +'class_name' => 'naam vd Klasse', 'clear_cache' => 'Cache leegmaken', 'clear_clipboard' => 'Vrijgeven klembord', -'clear_password' => '', +'clear_password' => 'Verwijder het wachtwoord', 'clipboard' => 'Klembord', 'close' => 'Sluiten', -'command' => '', +'command' => 'Commando', 'comment' => 'Commentaar', 'comment_changed_email' => 'Gewijzigde email', 'comment_for_current_version' => 'Versie van het commentaar', -'confirm_clear_cache' => '', +'confirm_clear_cache' => 'Ja, ik wil de cache opschonen!', 'confirm_create_fulltext_index' => 'Ja, Ik wil de volledigetekst index opnieuw maken!', 'confirm_move_document' => 'Bevestig verplaatsing van document', 'confirm_move_folder' => 'Bevestig de verplaatsing van de map', @@ -278,16 +279,16 @@ URL: [url]', 'confirm_rm_transmittal' => 'Bestig de verwijdering van de verzending', 'confirm_rm_transmittalitem' => 'Bevestig te verzenden item', 'confirm_rm_user' => 'Weet U zeker dat U de Gebruiker "[username]" wilt verwijderen?
Let op: deze handeling kan niet ongedaan worden gemaakt.', -'confirm_rm_user_from_processes' => '', +'confirm_rm_user_from_processes' => 'Weet U zeker dat U de Gebruiker "[username]" wilt verwijderen uit dit proces?
Let op: deze handeling kan niet ongedaan worden gemaakt.', 'confirm_rm_version' => 'Weet U zeker dat U deze versie van het document "[documentname]" wilt verwijderen?
Pas op: deze handeling kan niet ongedaan worden gemaakt.', -'confirm_transfer_objects' => '', +'confirm_transfer_objects' => 'Weet U zeker dat U de documenten, mappen etc. van gebruiker "[username]" wilt overzetten?
Let op: deze handeling kan niet ongedaan worden gemaakt.', 'confirm_update_transmittalitem' => 'Bevestig verandering van te verzenden item', 'content' => 'Welkomstpagina', 'continue' => 'Doorgaan', 'converter_new_cmd' => 'Wijziging: nieuw commando', 'converter_new_mimetype' => 'Wijziging: nieuw mimetype', 'copied_to_checkout_as' => 'Gekopieerd naar checkout als:', -'create_download_link' => '', +'create_download_link' => 'Maak een download-link', 'create_fulltext_index' => 'Creeer volledige tekst index', 'create_fulltext_index_warning' => 'U staat op het punt de volledigetekst opnieuw te indexeren. Dit kan behoorlijk veel tijd en snelheid vergen van het systeem. Als u zeker bent om opnieuw te indexeren, bevestig deze actie.', 'creation_date' => 'Aangemaakt', @@ -300,7 +301,7 @@ URL: [url]', 'databasesearch' => 'Zoek in Database', 'date' => 'Datum', 'days' => 'Dagen', -'debug' => '', +'debug' => 'debug', 'december' => 'december', 'default_access' => 'Standaard toegang', 'default_keywords' => 'Beschikbare sleutelwoorden', @@ -311,10 +312,10 @@ URL: [url]', 'de_DE' => 'Duits', 'disclaimer' => 'Dit is een beveiligde omgeving. Gebruik is alleen toegestaan voor geautoriseerde leden. Ongeautoriseerde toegang kan worden bestraft overeenkomstig (inter)nationale wetgeving.', 'discspace' => 'Schijfruimte', -'docs_in_reception_no_access' => '', -'docs_in_revision_no_access' => '', +'docs_in_reception_no_access' => 'Documenten zonder toegang ontvanger', +'docs_in_revision_no_access' => 'Documenten in revisie zonder toegang ontvanger', 'document' => 'Document', -'documentcontent' => '', +'documentcontent' => 'Documentinhoud', 'documents' => 'Documenten', 'documents_checked_out_by_you' => 'Door u in behandeling genomen documenten', 'documents_expired' => 'Verlopen documenten', @@ -328,10 +329,11 @@ URL: [url]', 'documents_to_review' => 'Documenten die wachten op uw controle', 'documents_to_revise' => 'Te reviseren documenten', 'documents_user_expiration' => '', -'documents_user_reception' => '', +'documents_user_no_reception' => '', +'documents_user_reception' => 'Documenten wachten op bestemming', 'documents_user_rejected' => 'documenten niet geaccepteerd door gebruiker', 'documents_user_requiring_attention' => 'Eigen documenten die (nog) aandacht behoeven', -'documents_with_notification' => '', +'documents_with_notification' => 'Documenten met notificatie', 'document_already_checkedout' => 'Al in behandeling genomen documenten', 'document_already_locked' => 'Dit document is al geblokkeerd', 'document_comment_changed_email' => 'Commentaar gewijzigd', @@ -398,9 +400,16 @@ URL: [url]', 'does_not_expire' => 'Verloopt niet', 'does_not_inherit_access_msg' => 'Erft toegang', 'download' => 'Download', -'download_links' => '', -'download_link_email_body' => '', -'download_link_email_subject' => '', +'download_links' => 'Download-links', +'download_link_email_body' => 'Klik op de link hieronder, dan begint de download vanvversie [version] van het document +\'[docname]\'. + +[url] + +De link is geldig tot [valid]. + +[comment]', +'download_link_email_subject' => 'Onderwerp', 'do_object_repair' => 'Repareer alle mappen en documenten.', 'do_object_setchecksum' => 'Set checksum', 'do_object_setfilesize' => 'Voer bestandgrootte in', @@ -409,16 +418,16 @@ URL: [url]', 'draft_pending_approval' => 'Draft - in afwachting van goedkeuring', 'draft_pending_review' => 'Draft - in afwachting van controle', 'drag_icon_here' => 'Versleep icoon van de folder of bestand hier!', -'dropfolderdir_missing' => '', -'dropfolder_file' => 'Bestand van dropfolder', -'dropfolder_folder' => 'Map van de drop-map', +'dropfolderdir_missing' => 'Uw persoonlijke map om files te droppen (dropfolder) bestaat niet op de server! Vraag de administrator om deze aan te maken.', +'dropfolder_file' => 'Bestand in dropfolder', +'dropfolder_folder' => 'Map in dropfolder', 'dropupload' => 'Snel toevoegen', -'drop_files_here' => 'Sleep bestanden hierheen!', -'dump_creation' => 'DB dump aanmaken', +'drop_files_here' => 'Sleep bestanden hierheen', +'dump_creation' => 'DB-dump aanmaken', 'dump_creation_warning' => 'M.b.v. deze functie maakt U een DB dump file. het bestand wordt opgeslagen in uw data-map op de Server', 'dump_list' => 'Bestaande dump bestanden', 'dump_remove' => 'Verwijder dump bestand', -'duplicates' => 'Duplicaat', +'duplicates' => 'Dubbelen', 'duplicate_content' => 'Dubbele inhoud', 'edit' => 'Wijzigen', 'edit_attributes' => 'Bewerk attributen', @@ -429,10 +438,10 @@ URL: [url]', 'edit_document_props' => 'Wijzig document', 'edit_event' => 'Activiteit wijzigen', 'edit_existing_access' => 'Wijzig toegangslijst', -'edit_existing_attribute_groups' => '', +'edit_existing_attribute_groups' => 'Bewerk attribuutgroepen', 'edit_existing_notify' => 'Wijzig Notificatie lijst', 'edit_folder_access' => 'Wijzig toegang', -'edit_folder_attrdefgrp' => '', +'edit_folder_attrdefgrp' => 'Bewerk de groep van attributen', 'edit_folder_notify' => 'Map Notificatie Lijst', 'edit_folder_props' => 'Wijzig Map eigenschappen', 'edit_group' => 'Wijzig Groep', @@ -440,14 +449,14 @@ URL: [url]', 'edit_transmittal_props' => 'Opmerkingen bij verzending', 'edit_user' => 'Wijzig gebruiker', 'edit_user_details' => 'Wijzig gebruiker Details', -'edit_version' => '', -'el_GR' => 'Griek', +'edit_version' => 'Bewerk versie', +'el_GR' => 'Grieks', 'email' => 'E-mail', 'email_error_title' => 'Geen email ingevoerd', 'email_footer' => 'U kunt altijd uw e-mail instellingen wijzigen via de \'Mijn Account\' opties', 'email_header' => 'Dit is een automatisch gegenereerd bericht van de DMS server.', 'email_not_given' => 'Voer aub een geldig email adres in.', -'empty_attribute_group_list' => '', +'empty_attribute_group_list' => 'Lege lijst van attributen', 'empty_folder_list' => 'Geen documenten of mappen', 'empty_notify_list' => 'Geen gegevens', 'en_GB' => 'Engels (GB)', @@ -455,33 +464,33 @@ URL: [url]', 'error' => 'Fout', 'error_add_aro' => 'Verzoek om toegang toegevoegd', 'error_add_permission' => 'Voeg permissie toe', -'error_cleared_cache' => '', -'error_importfs' => '', +'error_cleared_cache' => 'Fout bij het leegmaken van de cache', +'error_importfs' => 'Fout bij het importeren van form file systeem', 'error_no_document_selected' => 'Geen document geselecteerd', 'error_no_folder_selected' => 'Geen map geselecteerd', 'error_occured' => 'Er is een fout opgetreden', -'error_remove_document' => '', -'error_remove_folder' => '', +'error_remove_document' => 'Fout bij het verwijderen van document', +'error_remove_folder' => 'Fout bij het verwijderen van map', 'error_remove_permission' => 'Verwijder permissie', 'error_toogle_permission' => 'Wijzig permissie', 'error_transfer_document' => '', 'es_ES' => 'Spaans', -'event_details' => 'Activiteit details', -'exclude_items' => 'Sluit iems uit', +'event_details' => 'Activiteit-details', +'exclude_items' => 'Sluit iets uit', 'expired' => 'Verlopen', -'expired_at_date' => '', +'expired_at_date' => 'Verloopdatum', 'expired_documents' => '', 'expires' => 'Verloopt', 'expire_by_date' => 'Vervaldatum', -'expire_in_1d' => '', -'expire_in_1h' => '', +'expire_in_1d' => 'Vervalt binnen 1 dag', +'expire_in_1h' => 'Vervalt binnen 1 uur', 'expire_in_1m' => 'Vervalt binnen 1 maand', 'expire_in_1w' => 'Vervalt binnen 1 week', 'expire_in_1y' => 'Vervalt binnen 1 jaar', -'expire_in_2h' => '', +'expire_in_2h' => 'Vervalt binnen 2 uur', 'expire_in_2y' => 'Vervalt binnen 2 jaar', -'expire_today' => '', -'expire_tomorrow' => '', +'expire_today' => 'Vervalt vandaag', +'expire_tomorrow' => 'Vervalt morgen', 'expiry_changed_email' => 'Verloopdatum gewijzigd', 'expiry_changed_email_body' => 'Vervaldatum gewijzigd Document: [name] @@ -503,7 +512,7 @@ URL: [url]', 'folder' => 'Map', 'folders' => 'Mappen', 'folders_and_documents_statistic' => 'Inhoudsopgave', -'folders_with_notification' => '', +'folders_with_notification' => 'Mappen met notificatie', 'folder_comment_changed_email' => 'Commentaar gewijzigd', 'folder_comment_changed_email_body' => 'Commentaar gewijzigd Map: [name] @@ -545,16 +554,16 @@ URL: [url]', 'fr_FR' => 'Frans', 'fullsearch' => 'Zoek in volledige tekst', 'fullsearch_hint' => 'Volledige tekst index', -'fulltextsearch_disabled' => '', +'fulltextsearch_disabled' => 'Fulltext-zoeken uitgeschakeld', 'fulltext_converters' => 'Index document conversie', 'fulltext_info' => 'Volledige tekst index info', -'global_attributedefinitiongroups' => '', +'global_attributedefinitiongroups' => 'Kennmerk-definitie groepen', 'global_attributedefinitions' => 'Kenmerk definities', 'global_default_keywords' => 'Algemene sleutelwoorden', -'global_document_categories' => 'Categorieen', +'global_document_categories' => 'Categorieën', 'global_workflows' => 'Workflows', -'global_workflow_actions' => 'Workflow acties', -'global_workflow_states' => 'Workflow status', +'global_workflow_actions' => 'Workflow-acties', +'global_workflow_states' => 'Workflow-status', 'group' => 'Groep', 'groups' => 'Groepen', 'group_approval_summary' => 'Groep [Goedkeuring] samenvatting', @@ -566,36 +575,37 @@ URL: [url]', 'group_review_summary' => 'Groep Beoordeling samenvatting', 'guest_login' => 'Login als Gast', 'guest_login_disabled' => 'Gast login is uitgeschakeld.', -'hash' => '', +'hash' => 'Hashcode', 'help' => 'Help', 'home_folder' => 'Thuismap', -'hook_name' => '', +'hook_name' => 'Naam vd hook', 'hourly' => 'Elk uur', -'hours' => 'uren', +'hours' => 'uur', 'hr_HR' => 'Kroatisch', -'human_readable' => 'Leesbaar Archief', +'human_readable' => 'Leesbaar archief', 'hu_HU' => 'Hongaars', 'id' => 'ID', 'identical_version' => 'Nieuwe versie is identiek aan de huidige versie', 'import' => 'Importeer', -'importfs' => '', +'importfs' => 'Importeer van bestandssysteem', 'import_fs' => 'Importeer van bestandssysteem', -'import_fs_warning' => 'Dit werkt alleen voor mappen in de drop-map. Alle mappen en bestanden worden recursief geimporteerd. Bestanden worden onmiddelijk vrijgegeven.', +'import_fs_warning' => 'Dit werkt alleen in de dropfolder. Mappen en bestanden worden recursief geïmporteerd. Bestanden worden direct ter beschikking gesteld.', 'include_content' => 'inclusief inhoud', 'include_documents' => 'Inclusief documenten', 'include_subdirectories' => 'Inclusief submappen', 'indexing_tasks_in_queue' => 'Indexerings taken in wachtrij', -'index_done' => '', -'index_error' => '', +'index_done' => 'Indexering gereed', +'index_error' => 'Fout bij indexering', 'index_folder' => 'Inhoud', -'index_pending' => '', -'index_waiting' => '', +'index_pending' => 'Indexering moet nog gebeuren', +'index_waiting' => 'Indexering wacht', 'individuals' => 'Individuen', 'indivіduals_in_groups' => 'Individuen in groepen', +'info_recipients_tab_not_released' => '', 'inherited' => 'overgeerfd', 'inherits_access_copy_msg' => 'Kopie lijst overerfde toegang', 'inherits_access_empty_msg' => 'Begin met lege toegangslijst', -'inherits_access_msg' => 'Toegang is (over/ge)erfd..', +'inherits_access_msg' => 'Toegang is (over/ge)erfd.', 'internal_error' => 'Interne fout', 'internal_error_exit' => 'Interne fout. Niet mogelijk om verzoek uit de voeren.', 'invalid_access_mode' => 'Foutmelding: verkeerde toegangsmode', @@ -604,7 +614,7 @@ URL: [url]', 'invalid_create_date_end' => 'Foutieve eind-datum voor het maken van een periode.', 'invalid_create_date_start' => 'Foutieve begin-datum voor het maken van een periode.', 'invalid_doc_id' => 'Foutief Document ID', -'invalid_dropfolder_folder' => '', +'invalid_dropfolder_folder' => 'Ongeldige dropfolder-map', 'invalid_expiration_date_end' => 'Foute expiratiedatum', 'invalid_expiration_date_start' => 'Foute startdatum', 'invalid_file_id' => 'Foutief Bestand ID', @@ -626,13 +636,13 @@ URL: [url]', 'is_hidden' => 'Afschermen van Gebruikerslijst', 'it_IT' => 'Italiaans', 'january' => 'januari', -'js_form_error' => '', -'js_form_errors' => '', -'js_invalid_email' => '', +'js_form_error' => 'Fout in JavaScript', +'js_form_errors' => 'Fouten in JavaScript', +'js_invalid_email' => 'Ongeldige email', 'js_no_approval_group' => 'Selecteer a.u.b. een Goedkeuring Groep', 'js_no_approval_status' => 'Selecteer a.u.b. een Goedkeuring Status', 'js_no_comment' => 'Er zijn geen commentaren', -'js_no_currentpwd' => '', +'js_no_currentpwd' => 'Geen geldig wachtwoord', 'js_no_email' => 'Voer uw e-mail adres in', 'js_no_file' => 'Selecteer een bestand', 'js_no_keywords' => 'Specificeer een aantal sleutelwoorden', @@ -646,8 +656,8 @@ URL: [url]', 'js_pwd_not_conf' => 'Wachtwoord en bevestigingswachtwoord zijn niet identiek', 'js_select_user' => 'Selecteer een Gebruiker', 'js_select_user_or_group' => 'Selecteer tenminste een Gebruiker of Groep', -'js_unequal_passwords' => '', -'july' => 'july', +'js_unequal_passwords' => 'Ongelijke wachtwoorden', +'july' => 'juli', 'june' => 'juni', 'keep' => 'Behouden', 'keep_doc_status' => 'Behoud status document', @@ -662,14 +672,14 @@ URL: [url]', 'librarydoc' => 'Bibliotheek', 'linked_documents' => 'Gerelateerde Documenten', 'linked_files' => 'Bijlagen', -'linked_to_current_version' => '', -'linked_to_document' => 'Gekoppeld aan document', -'linked_to_this_version' => '', +'linked_to_current_version' => 'Bijlagen bij huidige versie', +'linked_to_document' => 'Bijlage(n) bij document', +'linked_to_this_version' => 'Bijlage bij deze versie', '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' => 'Oplijsten toegangsrechten', -'list_contains_no_access_docs' => '', -'list_hooks' => '', +'link_to_version' => 'Bijlage(n) bij versie', +'list_access_rights' => 'Toegangsrechten', +'list_contains_no_access_docs' => 'Geen toegankelijke documenten', +'list_hooks' => 'Hooks', 'local_file' => 'Lokaal bestand', 'locked_by' => 'In gebruik door', 'lock_document' => 'Blokkeer', @@ -697,30 +707,30 @@ URL: [url]', 'march' => 'maart', 'max_upload_size' => 'Maximale upload omvang voor ieder bestand', 'may' => 'mei', -'menu_dropfolder' => '', +'menu_dropfolder' => 'Dropfolder', 'mimetype' => 'MIME Type', -'minutes' => 'Minuten', +'minutes' => 'minuten', 'misc' => 'Diversen', 'missing_checksum' => 'Controlesom ontbreekt', 'missing_file' => 'File ontbreekt', 'missing_filesize' => 'Bestandsgrootte ontbreekt', -'missing_reception' => '', +'missing_reception' => 'Ontvanger ontbreekt', 'missing_request_object' => 'Gevraagd object ontbreekt', 'missing_transition_user_group' => 'Gebruiker / groep ontbreekt voor de overdracht', -'monday' => 'Maandag', -'monday_abbr' => 'Ma', +'monday' => 'maandag', +'monday_abbr' => 'ma', 'monthly' => 'Maandelijks', -'month_view' => 'Maand Overzicht', +'month_view' => 'Maandoverzicht', 'move' => 'Verplaats', 'move_clipboard' => 'Verplaats klembord', 'move_document' => 'Verplaats document', -'move_folder' => 'Verplaats Map', +'move_folder' => 'Map verplaatsen', 'my_account' => 'Mijn Account', 'my_documents' => 'Mijn Documenten', 'my_transmittals' => 'Mijn zendingen', 'name' => 'Naam', 'needs_workflow_action' => 'Dit document vereist uw aandacht. Bekijk deze onder het tabblad workflows.', -'network_drive' => '', +'network_drive' => 'Networkdrive', 'never' => 'Nooit', 'new' => 'Nieuw', 'new_attrdef' => 'Voeg kenmerk definitie toe', @@ -780,7 +790,7 @@ URL: [url]', 'no_default_keywords' => 'Geen Sleutelwoorden beschikbaar', 'no_docs_checked_out' => 'Geen documenten in gebruik genomen', 'no_docs_locked' => 'Geen documenten in gebruik.', -'no_docs_rejected' => '', +'no_docs_rejected' => 'Geen documenten geweigerd', 'no_docs_to_approve' => 'Er zijn momenteel geen documenten die goedkeuring behoeven.', 'no_docs_to_look_at' => 'Geen documenten die aandacht behoeven.', 'no_docs_to_receipt' => 'Geen documenten te ontvangen', @@ -802,8 +812,8 @@ URL: [url]', 'no_version_modification' => 'Geen versiewijziging', 'no_workflow_available' => 'Geen workflow beschikbaar', 'objectcheck' => 'Map/Document controle', -'object_check_critical' => '', -'object_check_warning' => '', +'object_check_critical' => 'Ernstige fouten', +'object_check_warning' => 'Waarschuwingen', 'obsolete' => 'verouderd', 'october' => 'oktober', 'old' => 'Oude', @@ -850,36 +860,42 @@ Mocht u de komende minuten geen email ontvangen, probeer het dan nogmaals en con 'password_wrong' => 'Verkeerd wachtwoord', 'pdf_converters' => '', 'pending_approvals' => 'Wachten op goedkeuring', -'pending_receipt' => '', +'pending_receipt' => 'Wachten op ontvangs', 'pending_reviews' => 'Wachten op beoordeling', -'pending_revision' => '', +'pending_revision' => 'Wachten op herziening', 'pending_workflows' => 'Wachten op workflow', 'personal_default_keywords' => 'Persoonlijke sleutelwoorden', -'pl_PL' => 'Polen', +'pl_PL' => 'Pools', 'possible_substitutes' => 'Mogelijke alternatieven', -'preset_expires' => 'Standaard vervaltermijn', +'preset_expires' => 'Preset verloopt', 'preview' => 'Voorbeeld', 'preview_converters' => 'Converters', -'preview_images' => '', +'preview_images' => 'Voorbeelden', 'preview_markdown' => 'Voorbeeld in Markdown', 'preview_pdf' => '', 'preview_plain' => 'Voorbeeld in platte tekst', 'previous_state' => 'Vorige staat', 'previous_versions' => 'Vorige versies', -'process' => '', -'process_without_user_group' => '', +'process' => 'Proces', +'process_without_user_group' => 'Proces zonder gebruikersgroep', 'pt_BR' => 'Portugees (BR)', 'quota' => 'Quotum', 'quota_exceeded' => 'Uw data quotum is overschreden met [bytes].', 'quota_is_disabled' => 'Quota support is momenteel niet actief in de eigenschappen. Een user-quotum instellen zal geen effect hebben tot quota actief zijn', 'quota_warning' => 'Uw maximale datagebruik is overschreden met [bytes]. Gelieve documenten of eerdere versies te verwijderen.', -'receipts_accepted' => '', -'receipts_not_touched' => '', -'receipts_rejected' => '', -'receipts_without_group' => '', -'receipts_without_user' => '', -'receipt_deletion_email_body' => '', -'receipt_deletion_email_subject' => '', +'receipts_accepted' => '[no_receipts] ontvangen en geaccepteerd', +'receipts_not_touched' => '[no_receipts] ontvangen, nog niet behandeld', +'receipts_rejected' => '[no_receipts] ontvangen, geweigerd', +'receipts_without_group' => '[no_receipts] ontvangen, geen groep', +'receipts_without_user' => '[no_receipts] ontvangen, geen gebruiker', +'receipt_deletion_email_body' => 'Gebruiker is verwijderd uit de lijst van ontvangers +Document: [name] +Versie: [version] +Bovenliggende map: [folder_path] +Ontvanger: [recipient] +Gebruiker: [username] +URL: [url]', +'receipt_deletion_email_subject' => '[sitename]: [name] - Ontvanger verwijderd', 'receipt_log' => 'Log ontvangst', 'receipt_request_email_body' => 'Verzoek ontvangen Document: [name] @@ -890,13 +906,13 @@ URL: [url]', 'receipt_request_email_subject' => '[sitename]: [name] – Verzoek ontvangen', 'receipt_status' => 'Status ontvangst', 'receipt_summary' => 'Samenvatting', -'receipt_update_failed' => '', -'reception' => '', -'reception_acknowleged' => '', -'reception_noaction' => '', -'reception_rejected' => '', +'receipt_update_failed' => 'Update ontvangst mislukt', +'reception' => 'bestemming', +'reception_acknowleged' => 'bestemming OK', +'reception_noaction' => 'Geen actie', +'reception_rejected' => 'bestemming geweigerd', 'recipients' => 'Ontvangers', -'redraw' => '', +'redraw' => 'Nogmaals weergeven', 'refresh' => 'Verversen', 'rejected' => 'Afgewezen', 'released' => 'Gepubliceerd', @@ -917,7 +933,7 @@ Bovenliggende map: [folder_path] Gebruiker: [username] URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Workflow verwijderd van document versie', -'removeFolderFromDropFolder' => 'Verwijder de map na de import', +'removeFolderFromDropFolder' => 'Map verwijderen uit Dropfilder', 'remove_marked_files' => 'Geselecteerde bestanden zijn verwijderd', 'repaired' => 'Gerepareerd', 'repairing_objects' => 'Documenten en mappen repareren.', @@ -931,7 +947,7 @@ Gebruiker: [username] URL: [url]', 'request_workflow_action_email_subject' => '[sitename]: [name] - Workflow – actie vereist', 'reset_checkout' => 'Beëindig het gebruik van het document', -'restrict_access' => '', +'restrict_access' => 'Toegang beperken', 'results_page' => 'Resultaten pagina', 'return_from_subworkflow' => 'Terug uit subworkflow', 'return_from_subworkflow_email_body' => 'Terug uit subworkflow @@ -947,11 +963,11 @@ URL: [url]', 'reviewers' => 'Beoordelaars', 'reviewer_already_assigned' => 'is reeds aangewezen als beoordelaar', 'reviewer_already_removed' => 'is reeds verwijderd uit het beoordelingsproces of heeft reeds een beoordeling uitgevoerd', -'reviews_accepted' => '', -'reviews_not_touched' => '', -'reviews_rejected' => '', -'reviews_without_group' => '', -'reviews_without_user' => '', +'reviews_accepted' => '[no_reviews] reviews geaccepteerd', +'reviews_not_touched' => '[no_reviews] reviews niet geopend', +'reviews_rejected' => '[no_reviews] reviews geweigerd', +'reviews_without_group' => 'reviews zonder groep', +'reviews_without_user' => 'reviews zonder gebruiker', 'review_deletion_email' => 'Beoordelingsverzoek verwijderd', 'review_deletion_email_body' => 'Beoordelingsverzoek verwijderd Document: [name] @@ -985,12 +1001,12 @@ URL: [url]', 'review_update_failed' => 'Fout: bijwerken status beoordeling mislukt.', 'revise_document' => 'Document herzien', 'revise_document_on' => 'Volgende herziening van document op [date]', -'revisions_accepted' => '', -'revisions_not_touched' => '', -'revisions_pending' => '', -'revisions_rejected' => '', -'revisions_without_group' => '', -'revisions_without_user' => '', +'revisions_accepted' => '[no_revisions] revisies geaccepteerd', +'revisions_not_touched' => '[no_revisions] revisies geopend', +'revisions_pending' => '[no_revisions] revisies in afwachting', +'revisions_rejected' => '[no_revisions] revisies geweigerd', +'revisions_without_group' => '[no_revisions] revisies zonder groep', +'revisions_without_user' => '[no_revisions] revisies zonder gebruiker', 'revision_date' => 'Datum revisie', 'revision_log' => 'Log herziening', 'revision_request_email_body' => 'Verzoek tot herziening @@ -1016,12 +1032,12 @@ Gebruiker: [username] URL: [url]', 'rewind_workflow_email_subject' => '[sitename]: [name] - Workflow is teruggezet', 'rewind_workflow_warning' => 'Als u de workflow terugzet naar oorspronkelijke staat, dan wordt de workflow historie voor dit document verwijderd en onherstelbaar.', -'rm_attrdef' => 'Verwijder kenmerk definitie', -'rm_attrdefgroup' => '', -'rm_default_keyword_category' => 'Verwijder Categorie', -'rm_document' => 'Verwijder Document', +'rm_attrdef' => 'Verwijder kenmerkdefinitie', +'rm_attrdefgroup' => 'Verwijder kenmerkdefinitie-groep', +'rm_default_keyword_category' => 'Verwijder categorie', +'rm_document' => 'Verwijder document', 'rm_document_category' => 'Verwijder categorie', -'rm_event' => '', +'rm_event' => 'Verwijder gebeurtenis', 'rm_file' => 'Verwijder bestand', 'rm_folder' => 'Verwijder map', 'rm_from_clipboard' => 'Verwijder van klembord', @@ -1030,7 +1046,7 @@ URL: [url]', 'rm_transmittal' => 'Verwijder de verzending', 'rm_transmittalitem' => 'Verwijder verzonden item', 'rm_user' => 'Verwijder deze Gebruiker', -'rm_user_from_processes' => '', +'rm_user_from_processes' => 'Verwijder gebruiker uit het proces', 'rm_version' => 'Verwijder versie', 'rm_workflow' => 'Verwijder workflwo', 'rm_workflow_action' => 'Verwijder workflow actie', @@ -1041,8 +1057,8 @@ URL: [url]', 'role_guest' => 'Gast', 'role_info' => 'Informtie over de rol', 'role_management' => 'Rol-management', -'role_name' => 'Naam vd Rol', -'role_type' => '', +'role_name' => 'Naam vd rol', +'role_type' => 'Type rol', 'role_user' => 'Gebruiker', 'ro_RO' => 'Roemeens', 'run_subworkflow' => 'Voer sub workflow uit', @@ -1068,7 +1084,7 @@ URL: [url]', 'search_mode_or' => 'tenminste 1 woord', 'search_no_results' => 'Er zijn geen documenten gevonden die aan uw zoekvraag voldoen', 'search_query' => 'Zoeken naar', -'search_report' => '[count] documenten en [foldercount] mappen gevonden in [searchtime] sec.', +'search_report' => '[doccount] documenten en [foldercount] mappen gevonden in [searchtime] sec.', 'search_report_fulltext' => '[doccount] documenten gevonden', 'search_resultmode' => 'Zoek resultaat', 'search_resultmode_both' => 'Documenten en mappen', @@ -1077,14 +1093,14 @@ URL: [url]', 'search_time' => 'Verstreken tijd: [time] sec.', 'seconds' => 'seconden', 'selection' => 'Selectie', -'select_attrdefgrp_show' => '', +'select_attrdefgrp_show' => 'Toon attribut definities-groep', 'select_category' => 'klik om categorie te selecteren', 'select_groups' => 'Klik om groep te selecteren', 'select_grp_approvers' => 'Klik om beoordelaars te selecteren', 'select_grp_ind_approvers' => 'Klik om beoordelaars te selecteren', -'select_grp_ind_notification' => 'Klik om groep beoordelaar te selecteren', -'select_grp_ind_recipients' => '', -'select_grp_ind_reviewers' => 'Klik om groep beoordelaar te selecteren', +'select_grp_ind_notification' => 'Selecteerd de groep', +'select_grp_ind_recipients' => 'Selecteer de groep', +'select_grp_ind_reviewers' => 'Selecteer de groep', 'select_grp_ind_revisors' => '', 'select_grp_notification' => 'Klik voor groepsnotificatiebeoordelaars', 'select_grp_recipients' => 'Klik om groep beoordelaar te selecteren', @@ -1098,10 +1114,15 @@ URL: [url]', 'select_one' => 'Selecteer een', 'select_users' => 'Klik om gebruikers te selecteren', 'select_workflow' => 'Selecteer workflow', -'send_email' => '', -'send_login_data' => '', -'send_login_data_body' => '', -'send_login_data_subject' => '', +'send_email' => 'Verstuur email', +'send_login_data' => 'Verstuur Login-data', +'send_login_data_body' => 'Login data + +Login: [login] +Name: [username] + +[comment]', +'send_login_data_subject' => 'Onderwerp', 'send_test_mail' => 'Testmail versturen', 'september' => 'september', 'sequence' => 'Volgorde', @@ -1109,15 +1130,15 @@ URL: [url]', 'seq_end' => 'Op het einde', 'seq_keep' => 'Behoud Positie', 'seq_start' => 'Eerste positie', -'sessions' => '', +'sessions' => 'sessies', 'settings' => 'Instellingen', 'settings_activate_module' => 'Activeer module', 'settings_activate_php_extension' => 'Activeer PHP uitbreiding', 'settings_adminIP' => 'Beheer IP', 'settings_adminIP_desc' => 'Indien ingesteld kan de beheerder alleen vanaf het ingestelde IP adres inloggen. Leeg laten om controle te vermijden. Opmerking: Werkt alleen met lokale authenticatie (Geen LDAP)', 'settings_Advanced' => 'Uitgebreid', -'settings_advancedAcl' => '', -'settings_advancedAcl_desc' => '', +'settings_advancedAcl' => 'Advanced Access control', +'settings_advancedAcl_desc' => 'Advanced Access control staat het uit- en inschakelen van bepaalde modules toe. Het kan niet gebruikt worden voor het beheer van toegangsrechten van documenten en mappen.', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', 'settings_Authentication' => 'Authenticatie instellingen', 'settings_autoLoginUser' => 'Automatische login', @@ -1126,15 +1147,15 @@ URL: [url]', => , => , =>', -'settings_available_languages' => 'Beschikbare talen', -'settings_available_languages_desc' => '', +'settings_available_languages' => 'Beschikbare vertalingen', +'settings_available_languages_desc' => 'Alleen de geselecteerde vertalingen worden beschikbaar in het taal-selectie-menu. De default-taal (EN) wordt altijd geladen.', 'settings_backupDir' => 'Instellingen backupmap', 'settings_backupDir_desc' => 'Instellingen backupmap', 'settings_cacheDir' => 'cache directory', 'settings_cacheDir_desc' => 'Waar de voorbeeld afbeeldingen zijn opgeslagen (het is het beste om te kiezen voor een pad, welke niet toegankelijk is door uw webserver)', -'settings_Calendar' => 'Kalender instellingen', -'settings_calendarDefaultView' => 'Kalender Standaard overzicht', -'settings_calendarDefaultView_desc' => 'Kalender standaard overzicht', +'settings_Calendar' => 'Instellingen van de agenda', +'settings_calendarDefaultView' => 'Standaard overzicht agenda', +'settings_calendarDefaultView_desc' => 'Pagina per dag/week/maand', 'settings_cannot_disable' => 'Bestand ENABLE_INSTALL_TOOL kon niet verwijderd worden', 'settings_checkOutDir' => 'Instellingen Checkoutmap', 'settings_checkOutDir_desc' => 'Instellingen Checkoutmap', @@ -1144,8 +1165,8 @@ URL: [url]', 'settings_contentDir_desc' => 'Waar de verzonden bestande opgeslagen worden (Kan het beste een map zijn die niet benaderbaar is voor de webserver.)', 'settings_contentOffsetDir' => 'Inhouds Basis Map', 'settings_contentOffsetDir_desc' => 'Om de beperkingen van het onderliggende bestandssysteem te omzeilen, is een nieuwe mappenstructuur bedacht dat binnen de inhoudsmap (Inhoudsmap) bestaat. Hiervoor is een map nodig als basis. Gebruikelijk is om dit de standaardwaarde te laten, 1048576, maar kan elke waarde of tekst bevatten dat nog niet bestaat binnen de (Inhoudsmap)', -'settings_convertToPdf' => '', -'settings_convertToPdf_desc' => '', +'settings_convertToPdf' => 'Document converteren naar PDF', +'settings_convertToPdf_desc' => 'Als een document niet geschikt is voor Preview, wordt het geconverteerd naar PDF.', 'settings_cookieLifetime' => 'Cookie Life time', 'settings_cookieLifetime_desc' => 'Hoe lang een cookie moet worden behouden. Indien ingesteld op 0 worden de cookies verwijderd bij het afsluiten van de browser.', 'settings_coreDir' => 'Core letoDMS map', @@ -1167,12 +1188,12 @@ URL: [url]', 'settings_dbUser' => 'Gebruikersnaam', 'settings_dbUser_desc' => 'De gebruikersnaam voor toegang tot de datbase ingevoerd tijdens de installatie. Verander de waarde niet tenzij echt nodig, bijvoorbeeld bij verplaatsing van de database naar een ander systeem.', 'settings_dbVersion' => 'Database schema te oud', -'settings_defaultAccessDocs' => '', -'settings_defaultAccessDocs_desc' => '', -'settings_defaultSearchMethod' => 'Default zoekmethode', -'settings_defaultSearchMethod_desc' => 'Default zoekmethode', -'settings_defaultSearchMethod_valdatabase' => 'Default zoekmethode (database)', -'settings_defaultSearchMethod_valfulltext' => 'Default fulltext-zoekmethode', +'settings_defaultAccessDocs' => 'Standaard toegangsrechten voor nieuwe documenten', +'settings_defaultAccessDocs_desc' => 'Als een nieuw document wordt gecreëerd, worden dit de nieuwe toegangsrechten.', +'settings_defaultSearchMethod' => 'Standaard zoekmethode', +'settings_defaultSearchMethod_desc' => 'Default zoekmethode = op documentnaam / fulltext-search', +'settings_defaultSearchMethod_valdatabase' => 'Default zoekmethode (Documentnaam)', +'settings_defaultSearchMethod_valfulltext' => 'Default fulltext-zoeken', 'settings_delete_install_folder' => 'Om SeedDMS te kunnen gebruiken moet het bestand ENABLE_INSTALL_TOOL uit de configuratiemap verwijderd worden.', 'settings_disableSelfEdit' => 'Uitschakelen Eigenprofiel wijzigen', 'settings_disableSelfEdit_desc' => 'Indien aangevinkt kan de gebruiker zijn eigen profiel niet wijzigen.', @@ -1181,74 +1202,78 @@ URL: [url]', 'settings_dropFolderDir' => 'Pad voor drop folder', 'settings_dropFolderDir_desc' => 'Dit pad kan gebruikt worden voor dropfiles op de server en hier vanaf te importeren in plaats van uploaden via de browser.', 'settings_Edition' => 'Uitgave instellingen', -'settings_editOnlineFileTypes' => 'Instellingen Filetypes', -'settings_editOnlineFileTypes_desc' => 'Online zoekmethoden bewerken', -'settings_enable2FactorAuthentication' => '', -'settings_enable2FactorAuthentication_desc' => '', +'settings_editOnlineFileTypes' => 'Online bewerken van de volgende filetypes', +'settings_editOnlineFileTypes_desc' => 'Bestanden met één van de volgende extensies kunnen online bewerkt worden (ALLEEN KLEINE LETTERS GEBRUIKEN!)', +'settings_enable2FactorAuthentication' => 'Schakel 2-factor-authenticatie in', +'settings_enable2FactorAuthentication_desc' => 'In/Uitschakelen 2-factor-authenticatie. Gebruikers moeten Google Authenticator op hun mobile telefoon installeren.', 'settings_enableAcknowledgeWorkflow' => 'Aanzetten Workflow-stappen', 'settings_enableAcknowledgeWorkflow_desc' => 'Aanzetten workflow-stappen', -'settings_enableAdminReceipt' => '', -'settings_enableAdminReceipt_desc' => '', +'settings_enableAdminReceipt' => 'Sta ontvangst van documenten door admins toe', +'settings_enableAdminReceipt_desc' => 'Inschakelen als u admins documenten wilt laten ontvangen', 'settings_enableAdminRevApp' => 'Inschakelen Beheer Contr/Beoord', 'settings_enableAdminRevApp_desc' => 'Uitvinken om beheerder niet te tonen als controleerder/beoordeler', -'settings_enableCalendar' => 'Inschakelen Kalendar', -'settings_enableCalendar_desc' => 'Inschakelen/uitschakelen kalender', +'settings_enableCalendar' => 'Agenda inschakelen', +'settings_enableCalendar_desc' => 'Inschakelen/uitschakelen agenda', 'settings_enableClipboard' => 'Activeer klembord', 'settings_enableClipboard_desc' => 'Activeer/ blokkeer het klembord', -'settings_enableConverting' => 'Inschakelen Conversie', -'settings_enableConverting_desc' => 'Inschakelen/uitschakelen conversie van bestanden', -'settings_enableDropFolderList' => '', -'settings_enableDropFolderList_desc' => '', +'settings_enableConverting' => 'Documenten converteren', +'settings_enableConverting_desc' => 'Inschakelen/uitschakelen conversie van bestanden naar PDF', +'settings_enableDropFolderList' => 'Inschakelen van de lijst van files in dropfolder.', +'settings_enableDropFolderList_desc' => 'De lijst van files in Dropfolder zichtbaar maken in het menu', 'settings_enableDropUpload' => 'Inschakelen Snelle Upload', 'settings_enableDropUpload_desc' => 'Aanzetten DropUpload', 'settings_enableDuplicateDocNames' => 'Sta duplicaten van documentnamen toe', 'settings_enableDuplicateDocNames_desc' => 'Staat het toe om documentnamen te dupliceren in een folder.', -'settings_enableEmail' => 'Inschakelen E-mail', +'settings_enableEmail' => 'E-mail inschakelen', 'settings_enableEmail_desc' => 'Inschakelen/uitschakelen automatische email notificatie', -'settings_enableFolderTree' => 'Inschakelen Mappenstructuur', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', +'settings_enableFolderTree' => 'Mappenstructuur tonen', 'settings_enableFolderTree_desc' => 'Uitschakelen om de mappenstructuur niet te tonen', -'settings_enableFullSearch' => 'Inschakelen volledigetekst zoekopdracht', +'settings_enableFullSearch' => 'Volledige-tekst zoeken', 'settings_enableFullSearch_desc' => 'Inschakelen zoeken in volledigetekst', -'settings_enableGuestAutoLogin' => 'Gast login automatisch aanzetten', +'settings_enableGuestAutoLogin' => 'Gastlogin automatisch aanzetten', 'settings_enableGuestAutoLogin_desc' => 'Gastlogin automatisch aanzetten', -'settings_enableGuestLogin' => 'Inschakelen Gast login', +'settings_enableGuestLogin' => 'Inschakelen Gastlogin', 'settings_enableGuestLogin_desc' => 'Als U iemand wilt laten inloggen als gast, schakel deze optie in. Opmerking: Gast login kan het beste alleen in een beveiligde omgeving ingeschakeld worden', 'settings_enableHelp' => 'Hulp aanzetten', 'settings_enableHelp_desc' => 'Hulp aanzetten', -'settings_enableLanguageSelector' => 'Activeer Taal instellen', +'settings_enableLanguageSelector' => 'Taal activerenen', 'settings_enableLanguageSelector_desc' => 'Laat selector zien voor taalinterface, nadat gebruikers inloggen.', -'settings_enableLargeFileUpload' => 'Inschakelen groot bestand upload', +'settings_enableLargeFileUpload' => 'Grote bestanden uploaden', '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_enableMultiUpload' => 'Multi-upload', +'settings_enableMultiUpload_desc' => 'Bij multiupload kunnen tegelijkertijd verschillende bestanden worden geüpload. Ieder bestand wordt een nieuw document.', +'settings_enableNotificationAppRev' => 'Notificeren controleur/beoordeler', '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', 'settings_enableNotificationWorkflow_desc' => 'Workflow-notificatie aanzetten', -'settings_enableOwnerNotification' => 'Inschakelen eigenaarnotificatie standaard', -'settings_enableOwnerNotification_desc' => 'Inschakelen van notificatie naar de eigenaar als een document is toegevoegd.', -'settings_enableOwnerReceipt' => '', -'settings_enableOwnerReceipt_desc' => '', +'settings_enableOwnerNotification' => 'Standaard eigenaar notificeren', +'settings_enableOwnerNotification_desc' => 'Inschakelen van notificatie naar de eigenaar als een document wordt toegevoegd.', +'settings_enableOwnerReceipt' => 'Laten weten wat er met het document gebeurt aan eigenaar', +'settings_enableOwnerReceipt_desc' => 'Inschakelen als u wilt dat de eigenaar van het document op de lijst van ontvangers komt.', 'settings_enableOwnerRevApp' => 'Beoordeling / goedkeuring voor eigenaar toestaan', 'settings_enableOwnerRevApp_desc' => 'Activeer dit als de eigenaar van een document genoteerd staat as beoordelaar/ goedkeurder en voor workflow overdrachten.', -'settings_enablePasswordForgotten' => 'Inschakelen wachtwoord vergeten', +'settings_enablePasswordForgotten' => '\'wachtwoord vergeten\' aanzetten', 'settings_enablePasswordForgotten_desc' => 'Inschakelen om een wachtwoord via mail te versturen als de gebruiker een nieuw wachtwoord heeft ingesteld.', 'settings_enableRecursiveCount' => 'Document/ map teller herhalen toestaan', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', 'settings_enableRevisionWorkflow' => 'Herzieningsworkflow aanzetten', 'settings_enableRevisionWorkflow_desc' => 'Herzieningsworkflow aanzetten', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', '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_enableSessionList' => 'Lijst van gebruikers online', +'settings_enableSessionList_desc' => 'Laat zien welke gebruikers online zijn', +'settings_enableThemeSelector' => 'Thema selecteren', 'settings_enableThemeSelector_desc' => 'Schakel thema selectie op de aanmeldpagina uit', -'settings_enableUpdateReceipt' => '', -'settings_enableUpdateReceipt_desc' => '', -'settings_enableUpdateRevApp' => '', -'settings_enableUpdateRevApp_desc' => '', +'settings_enableUpdateReceipt' => 'Veranderen van bestaande bestemming toestaan', +'settings_enableUpdateReceipt_desc' => 'Mag de gebruiker die een bestemming heeft opgesteld, zijn beslissing wijzigen?', +'settings_enableUpdateRevApp' => 'Wijzig bestaande review/goedkeuring', +'settings_enableUpdateRevApp_desc' => 'Mag de gebruiker die een review//goedkeuring heeft gegeven, zijn beslissing wijzigen (zolang de huidige stap in de workflow nog duurt)?', 'settings_enableUserImage' => 'Inschakelen Gebruikersplaatjes', 'settings_enableUserImage_desc' => 'Inschakelen Gebruikerplaatjes', 'settings_enableUsersView' => 'Inschakelen Gebruikers overzicht', @@ -1268,9 +1293,9 @@ URL: [url]', 'settings_Extensions' => 'Uitbreidingen', 'settings_extraPath' => 'Extra PHP include Path', 'settings_extraPath_desc' => 'Pad naar extra software. Dit pad bevat bv. het adodb pad of de extra pear packages.', -'settings_firstDayOfWeek' => 'Eerste weekdag', -'settings_firstDayOfWeek_desc' => 'Eerste dag van de week', -'settings_footNote' => 'Onderschrift', +'settings_firstDayOfWeek' => 'Eerste dag van de week', +'settings_firstDayOfWeek_desc' => 'Eerste dag van de (werk)week', +'settings_footNote' => 'Subtitel', 'settings_footNote_desc' => 'Bericht om onderop elke pagina te tonen', 'settings_fullSearchEngine' => 'Instellingen Fulltextsearch', 'settings_fullSearchEngine_desc' => 'Instellingen Fulltextsearch', @@ -1294,8 +1319,8 @@ URL: [url]', 'settings_install_welcome_text' => '

Wees er zeker van dat u een bestand, genaamd \'ENABLE_INSTALL_TOOL\', gemaakt heeft in de configuratiemap, voordat u de installatie van letDMS begint, anders zal de installatie niet werken. Op een Unix-Syteem kan dit makkelijk gedaan worden met \'touch conf/ENABLE_INSTALL_TOOL\'. Verwijder het bestand nadat de installatie afgerond is.

letoDMS heeft weinig installatievoorwaarden. U heeft een mysql database en een php-geschikte web server nodig. Voor de lucene volledige tekst zoekfunctie, moet Zend framework geinstalleerd zijn op schijf en gevonden worden door php. Vanaf versie 3.2.0 van letoDMS zal ADOdb geen deel meer uitmaken van de uitgave. Een kopie kan van http://adodb.sourceforge.net gehaald en geinstalleerd worden. Het pad kan later opgegeven worden tijdens de installatie.

Als u de database voor de installatie wilt aanmaken, dan kunt u het handmatig met uw favoriete gereedschap aanmaken. optioneel kan een database met gebruikerstoegang gemaakt worden en importeer een van de database dumps in de configuratiemap. Met het installatiescript kan dit ook, maar hiervoor is database toegang nodig met voldoende rechten om een database aan te maken.

', 'settings_install_welcome_title' => 'Welkom bij de installatie van letoDMS', 'settings_install_zendframework' => 'Installeer Zend Framework, als u volledigetekst zoekmechanisme wilt gebruiken', -'settings_language' => 'Standaard taal', -'settings_language_desc' => 'Standaard taal (naam van de submap in map "languages")', +'settings_language' => 'Standaardtaal', +'settings_language_desc' => 'Standaardtaal (naam van de submap in map "languages")', 'settings_libraryFolder' => 'Bibliotheekmap', 'settings_libraryFolder_desc' => 'In deze map kunnen documenten worden opgeslagen. Hiermee worden nieuwe documenten gecreëerd.', 'settings_logFileEnable' => 'Inschakelen Logbestand', @@ -1316,10 +1341,10 @@ URL: [url]', 'settings_maxItemsPerPage_desc' => '', 'settings_maxRecursiveCount' => 'Max. nummers of recursieve document/map telling', 'settings_maxRecursiveCount_desc' => 'Dit is het maximum aantal documenten of mappen dat zal worden gecontroleerd voor toegangsrechten bij recursieve objecten telling. Als dit aantal is overschreden, zal het aantal documenten en mappen in de het map overzicht worden geschat.', -'settings_maxSizeForFullText' => '', -'settings_maxSizeForFullText_desc' => '', -'settings_maxUploadSize' => '', -'settings_maxUploadSize_desc' => '', +'settings_maxSizeForFullText' => 'Maximum bestandsgrootte voor onmiddellijke indexering', +'settings_maxSizeForFullText_desc' => 'Alle nieuwe documenten kleiner dan deze waarde worden direct na het uploaden geïndexeerd. In alle andere gevallen worden alleen de metadata geïndexeerd.', +'settings_maxUploadSize' => 'Maximale omvang voor uploaden', +'settings_maxUploadSize_desc' => 'Dit is de maximale omvang voor te uploaden bestanden. Dat geldt voor bestanden en bijlagen.', 'settings_more_settings' => 'Meer instellingen. Standaard login: admin/admin', 'settings_notfound' => 'Niet gevonden', 'settings_Notification' => 'Notificatie instellingen', @@ -1356,12 +1381,12 @@ URL: [url]', 'settings_previewWidthList_desc' => 'Breedte van het voorbeeld weergegeven in lijsten', 'settings_previewWidthMenuList' => '', 'settings_previewWidthMenuList_desc' => '', -'settings_printDisclaimer' => 'Print Vrijwaring', -'settings_printDisclaimer_desc' => 'Indien ingeschakeld zal het vrijwarings bericht in de lang.inc bestanden worden getoond onderop de pagina', +'settings_printDisclaimer' => 'Vrijwaring afdrukken', +'settings_printDisclaimer_desc' => 'Indien ingeschakeld zal het vrijwaringsbericht bestanden worden getoond onderaan de pagina', 'settings_quota' => 'Gebruikersquotum', 'settings_quota_desc' => 'Het maximum aantal bytes een gebruiker op de schijf mag schrijven. Stel deze in op 0 voor een onbeperkte schijfruimte. Deze waarde kan worden overschreven voor elk gebruik in zijn profiel.', 'settings_removeFromDropFolder' => 'Verwijder het bestand uit de dropfolder na een succesvolle upload', -'settings_removeFromDropFolder_desc' => '', +'settings_removeFromDropFolder_desc' => 'Verwijder het bestand uit de dropfolder na een succesvolle upload', 'settings_restricted' => 'Beperkte toegang', 'settings_restricted_desc' => 'Sta alleen gebruiker toe om in te loggen die in de database zijn opgenomen (ongeacht succesvolle authenticatie met LDAP)', 'settings_rootDir' => 'Basismap', @@ -1371,15 +1396,15 @@ URL: [url]', 'settings_SaveError' => 'Opslagfout Configuratiebestand', 'settings_Server' => 'Server instellingen', 'settings_showFullPreview' => 'Toon volledige document', -'settings_showFullPreview_desc' => '', +'settings_showFullPreview_desc' => 'In/Uitschakelen preview van alle pagina\'s van het document.', '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!', -'settings_showSingleSearchHit' => '', -'settings_showSingleSearchHit_desc' => '', +'settings_showSingleSearchHit' => 'Spring rechtstreeks naar het enkele zoekresultaat', +'settings_showSingleSearchHit_desc' => 'Als er maar één zoekresultaat is, wordt dat in detail getoond.', 'settings_Site' => 'Web Locatie', -'settings_siteDefaultPage' => 'Locatie standaard pagina', -'settings_siteDefaultPage_desc' => 'Standaard pagina bij inloggen. Indien leeg is out/out.ViewFolder.php de standaard', -'settings_siteName' => 'Locatie Naam', +'settings_siteDefaultPage' => 'Locatie standaardpagina', +'settings_siteDefaultPage_desc' => 'Standaardpagina bij inloggen. Indien leeg is out/out.ViewFolder.php de standaard', +'settings_siteName' => 'Naam van de site', 'settings_siteName_desc' => 'Naam van de Locatie dat wordt gebruikt in de titel van de paginas. Standaard: letoDMS', 'settings_SMTP' => 'SMTP Server instellingen', 'settings_smtpPassword' => 'SMTP Server paswoord', @@ -1406,8 +1431,8 @@ URL: [url]', 'settings_start_install' => 'Begin installatie', 'settings_stopWordsFile' => 'Pad naar bestand met nietindex woorden', 'settings_stopWordsFile_desc' => 'Als volledigetekst zoekopdracht is ingeschakeld, bevat dit bestand woorden die niet geindexeerd zullen worden.', -'settings_strictFormCheck' => 'Stricte Form Controle', -'settings_strictFormCheck_desc' => 'Stricte formuleer controle. Indien ingeschakeld, worden alle velden in het formulier gecontroleer op een waarde. Indien uitgeschakeld, worden de meeste commentaar en invoervelden optioneel. Commentaren zijn altijd benodigd bij een review of modificatie van een documentstatus', +'settings_strictFormCheck' => 'Strikte formaatcontrole', +'settings_strictFormCheck_desc' => 'Strikte controle op het juiste formaat. Indien ingeschakeld, worden alle velden in het formulier gecontroleer op een waarde. Indien uitgeschakeld, worden de meeste commentaar en invoervelden opgevat als optioneel. Commentaren zijn altijd nodig bij een review of modificatie van een documentstatus', 'settings_suggestionvalue' => 'Voorgestelde waarde', 'settings_System' => 'Systeem', 'settings_theme' => 'Standaard thema', @@ -1423,7 +1448,7 @@ URL: [url]', 'settings_versioningFileName' => 'Versieinformatie Bestandsnaam', 'settings_versioningFileName_desc' => 'De naam van het versie informatie bestand gemaakt door het backupgereedschap', 'settings_versiontolow' => 'Versie te laag', -'settings_viewOnlineFileTypes' => 'Bekijk Online Bestandstypen', +'settings_viewOnlineFileTypes' => 'De volgende bestandstypen online bekijken', 'settings_viewOnlineFileTypes_desc' => 'Bestanden met een van de volgende extensies kunnen online bekeken worden (GEBRUIK ALLEEN KLEINE LETTERS)', 'settings_workflowMode' => 'Workflow mode', 'settings_workflowMode_desc' => 'De uitgebreide workflow maakt het mogelijk om uw eigen workflow op te geven voor documentversies.', @@ -1448,53 +1473,53 @@ URL: [url]', 'splash_add_group_member' => 'Nieuwe groepslid toegevoegd', 'splash_add_role' => 'Nieuwe rol toegevoegd', 'splash_add_to_transmittal' => 'Toevoegen aan verzending', -'splash_add_transmittal' => '', +'splash_add_transmittal' => 'Verzending toegevoegd', 'splash_add_user' => 'Nieuwe gebruiker toegevoegd', -'splash_cleared_cache' => '', +'splash_cleared_cache' => 'Cache leeggemaakt', 'splash_cleared_clipboard' => 'Klembord leeg gemaakt', 'splash_document_added' => 'Nieuw document toegevoegd', 'splash_document_checkedout' => 'Document in gebruik genomen', 'splash_document_edited' => 'Document opgeslagen', -'splash_document_indexed' => '', +'splash_document_indexed' => 'Document geïndexeerd', 'splash_document_locked' => 'Document vergrendeld', 'splash_document_unlocked' => 'Document ontgrendeld', 'splash_edit_attribute' => 'Attribuut opgeslagen', -'splash_edit_event' => '', +'splash_edit_event' => 'Gebeurtenis opgeslagen', 'splash_edit_group' => 'Groep opgeslagen', 'splash_edit_role' => 'Rol opgeslagen', 'splash_edit_user' => 'Gebruiker opgeslagen', 'splash_error_add_to_transmittal' => 'Fout: toevoeging aan verzending', -'splash_error_rm_download_link' => '', -'splash_error_send_download_link' => '', +'splash_error_rm_download_link' => 'Fout bij verwijderen download-link', +'splash_error_send_download_link' => 'Fout bij verzenden download-link', 'splash_folder_edited' => 'Opslaan mapwijzigingen', -'splash_importfs' => '', +'splash_importfs' => 'Geïmporteerd: [docs] documenten en [folders] mappen', 'splash_invalid_folder_id' => 'Ongeldige map ID', 'splash_invalid_searchterm' => 'Ongeldige zoekterm', 'splash_moved_clipboard' => 'Klembord verplaatst naar de huidige map', 'splash_move_document' => 'Document verplaatst', 'splash_move_folder' => 'Map verplaatst', -'splash_receipt_update_success' => '', +'splash_receipt_update_success' => 'Ontvangst succesvol toegevoegd', 'splash_removed_from_clipboard' => 'Verwijderd van het klembord', 'splash_rm_attribute' => 'Attribuut verwijderd', 'splash_rm_document' => 'Document verwijderd', -'splash_rm_download_link' => '', +'splash_rm_download_link' => 'Download-link verwijderd', 'splash_rm_folder' => 'Map verwijderd', 'splash_rm_group' => 'Groep verwijderd', 'splash_rm_group_member' => 'Lid van de groep verwijderd', 'splash_rm_role' => 'Rol verwijderd', 'splash_rm_transmittal' => 'Verzending verwijderd', 'splash_rm_user' => 'Gebruiker verwijderd', -'splash_rm_user_processes' => '', -'splash_saved_file' => '', -'splash_save_user_data' => '', -'splash_send_download_link' => '', -'splash_send_login_data' => '', +'splash_rm_user_processes' => 'Gebruiker uit alle processen verwijderd', +'splash_saved_file' => 'Bestand opgeslagen', +'splash_save_user_data' => 'Gebruikersgegevens opgeslagen', +'splash_send_download_link' => 'Download-link verzonden', +'splash_send_login_data' => 'Login-gegevens verzonden', 'splash_settings_saved' => 'Instellingen opgeslagen', 'splash_substituted_user' => 'Invallers gebruiker', 'splash_switched_back_user' => 'Teruggeschakeld naar de oorspronkelijke gebruiker', 'splash_toogle_group_manager' => 'Group manager toogled', 'splash_transfer_document' => '', -'splash_transfer_objects' => '', +'splash_transfer_objects' => 'Objecten overgedragen', 'state_and_next_state' => 'staat/ volgende staat', 'statistic' => 'Statistieken', 'status' => 'Status', @@ -1517,7 +1542,7 @@ URL: [url]', 'status_revisor_removed' => 'Verwijderd', 'status_unknown' => 'Onbekend', 'storage_size' => 'Omvang opslag', -'submit_2_fact_auth' => '', +'submit_2_fact_auth' => '2-factor-authentificatie verstuurd', 'submit_approval' => 'Verzend [Goedkeuring]', 'submit_login' => 'Log in', 'submit_password' => 'Nieuw wachtwoord instellen', @@ -1526,7 +1551,7 @@ URL: [url]', 'submit_review' => 'Verzend Beoordeling', 'submit_revision' => 'Herziening verzenden', 'submit_userinfo' => 'Wijzigingen opslaan', -'subsribe_timelinefeed' => '', +'subsribe_timelinefeed' => 'Subscribe to timeline feed', 'substitute_to_user' => 'Switch naar \'[username]\'', 'substitute_user' => 'Invaller/ vervanger Gebruiker', 'success_add_aro' => 'Access request object added', @@ -1537,13 +1562,13 @@ URL: [url]', 'sunday_abbr' => 'zo', 'sv_SE' => 'Zweeds', 'switched_to' => 'Overgeschakeld naar', -'takeOverAttributeValue' => '', +'takeOverAttributeValue' => 'Onthoud de waarde van het attribuut', 'takeOverGrpApprover' => 'Onthoud de laatste groep goedkeurders', 'takeOverGrpReviewer' => 'Onthoud de laatste groep herzieners', 'takeOverIndApprover' => 'Onthoud de laatste groep individuele goedkeurders', 'takeOverIndReviewer' => 'Onthoud de laatste groep individuele herzieners', 'tasks' => 'taken', -'temp_jscode' => '', +'temp_jscode' => 'Tijdelijke jscode', 'testmail_body' => 'Deze mail dient enkel voor het testen van de mail configuratie van SeedDMS', 'testmail_subject' => 'Test mail', 'theme' => 'Thema', @@ -1554,27 +1579,30 @@ URL: [url]', 'timeline_add_version' => 'Nieuwe versie', 'timeline_full_add_file' => 'Nieuwe file', 'timeline_full_add_version' => 'Nieuwe versie', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => 'Status veranderd', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => 'Document geselecteerd', 'timeline_skip_add_file' => 'Bijlage toegevoegd', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'verworpen', 'timeline_skip_status_change_-3' => 'verlopen', 'timeline_skip_status_change_0' => 'wacht op beoordeling', 'timeline_skip_status_change_1' => 'wacht op goedkeuring', 'timeline_skip_status_change_2' => 'gepubliceerd', 'timeline_skip_status_change_3' => 'binnen de workflow', -'timeline_skip_status_change_4' => '', -'timeline_skip_status_change_5' => '', +'timeline_skip_status_change_4' => 'in revisie', +'timeline_skip_status_change_5' => 'concept', 'timeline_status_change' => 'Versie [version]: [status]', 'to' => 'aan', 'toggle_manager' => 'Wijzig Beheerder', -'toggle_qrcode' => '', +'toggle_qrcode' => 'Tonen/Verbergen QR-code', 'to_before_from' => 'De einddatum mag niet voor de startdatum liggen', 'transfer_document' => 'Document overdragen', 'transfer_no_read_access' => '', 'transfer_no_write_access' => '', -'transfer_objects' => '', -'transfer_objects_to_user' => '', +'transfer_objects' => 'Objecten overdragen', +'transfer_objects_to_user' => 'Objecten overdragen aan gebruiker', 'transfer_to_user' => '', 'transition_triggered_email' => 'Workflow-overgang geactiveerd', 'transition_triggered_email_body' => 'Workflow Overgang @@ -1599,9 +1627,9 @@ URL: [url]', 'tr_TR' => 'Turks', 'tuesday' => 'dinsdag', 'tuesday_abbr' => 'di', -'type_of_hook' => '', +'type_of_hook' => 'Soort hook', 'type_to_search' => 'zoeken naar', -'uk_UA' => 'Oekraïne', +'uk_UA' => 'Oekraïens', 'under_folder' => 'In map', 'unknown_attrdef' => 'Onbekende attribuut definitie', 'unknown_command' => 'Opdracht niet herkend.', @@ -1634,12 +1662,12 @@ URL: [url]', 'uploading_zerosize' => 'Uploaden van een leeg bestand. Upload wordt geannuleerd.', 'used_discspace' => 'Gebruike schijf ruimte', 'user' => 'Gebruiker', -'userid_groupid' => 'Gebruiker id/Groep id', +'userid_groupid' => 'GebruikerID / Groep ID', 'users' => 'Gebruikers', 'users_and_groups' => 'Gebruikers / Groepen', 'users_done_work' => 'Uitgevoerd werk gebruikers', 'user_exists' => 'Gebruiker bestaat reeds.', -'user_group' => 'Gebruiker/Groep', +'user_group' => 'Gebruiker / Groep', 'user_group_management' => 'Gebruikers / Groepen beheer', 'user_image' => 'Afbeelding', 'user_info' => 'Gebruikers informatie', @@ -1650,7 +1678,7 @@ URL: [url]', 'use_comment_of_document' => 'Gebruik reactie van document', 'use_default_categories' => 'Gebruik voorgedefinieerde categorieen', 'use_default_keywords' => 'Gebruik bestaande sleutelwoorden', -'valid_till' => '', +'valid_till' => 'Geldig tot', 'version' => 'Versie', 'versioning_file_creation' => 'Aanmaken bestand versies', 'versioning_file_creation_warning' => 'Met deze handeling maakt U een bestand aan die de versie voortgang informatie van een compleet DMS bevat. Na het aanmaken wordt ieder bestand opgeslagen in de document map.', @@ -1673,23 +1701,23 @@ URL: [url]', 'weeks' => 'Weken', 'week_view' => 'Week Overzicht', 'workflow' => 'Workflow', -'workflows_involded' => '', +'workflows_involded' => 'Betrokken bij workflows', 'workflow_actions_management' => 'Workflow actiebeheer', 'workflow_action_in_use' => 'Deze actie wordt momenteel gebruikt door een workflow', 'workflow_action_name' => 'Naam', 'workflow_editor' => 'Workflow editor', 'workflow_group_summary' => 'Groepssamenvatting', -'workflow_has_cycle' => '', +'workflow_has_cycle' => 'Workflow heeft cyclus', 'workflow_initstate' => 'Begin status', 'workflow_in_use' => 'Deze workflow wordt momenteel gebruikt door documenten.', -'workflow_layoutdata_saved' => '', +'workflow_layoutdata_saved' => 'Sla de layout op', 'workflow_management' => 'Workflow beheer', 'workflow_name' => 'Naam', -'workflow_no_doc_rejected_state' => '', -'workflow_no_doc_released_state' => '', -'workflow_no_initial_state' => '', +'workflow_no_doc_rejected_state' => 'Het document ma in deze fase van de workflow niet geweigerd worden!', +'workflow_no_doc_released_state' => 'Het document ma in deze fase van de workflow niet gesloten worden', +'workflow_no_initial_state' => 'Gen enkele overdracht begint met de startfase van de workflow', 'workflow_no_states' => 'U moet eerst workflow-statussen definiëren, voordat u een workflow toevoegt.', -'workflow_save_layout' => '', +'workflow_save_layout' => 'Sla de layout op', 'workflow_state' => 'workflow_states_managementWorkflow status beheer', 'workflow_states_management' => 'Workflow status beheer', 'workflow_state_docstatus' => 'Document status', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index 8ad6dbacb..7bf9a49d3 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -124,6 +124,7 @@ URL: [url]', 'archive_creation_warning' => 'Ta operacja utworzy archiwum zawierające pliki z całego repozytorium. Po utworzeniu archiwum będzie zapisane w folderze na serwerze.
UWAGA: archiwum utworzone jako czytelne dla ludzi będzie bezużyteczne jako kopia serwera.', 'ar_EG' => 'Arabski', 'assign_approvers' => 'Przypisz osoby akceptujące', +'assign_recipients' => '', 'assign_reviewers' => 'Przypisz recenzentów', 'assign_user_property_to' => 'Przypisz właściwości użytkownika do', 'assumed_released' => 'Assumed released', @@ -323,6 +324,7 @@ URL: [url]', 'documents_to_review' => 'Dokumenty oczekujące na Twoją recenzję', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => 'Dokumenty należące do Ciebie, które wymagają uwagi', @@ -587,6 +589,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Indywidualni', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'dziedziczony', 'inherits_access_copy_msg' => 'Kopiuj odziedziczoną listę dostępu', 'inherits_access_empty_msg' => 'Rozpocznij z pustą listą dostępu', @@ -1157,6 +1160,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Zezwala na tworzenie w folderze dokumentów o tej samej nazwie.', 'settings_enableEmail' => 'Włącz powiadomienia e-mail', 'settings_enableEmail_desc' => 'Włącz/Wyłącz automatyczne powiadomienia drogą mailową', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Pokaż drzewo katalogów', 'settings_enableFolderTree_desc' => 'Odznacz aby nie pokazywać drzewa katalogów', 'settings_enableFullSearch' => 'Włącz przeszukiwanie pełnotekstowe', @@ -1191,6 +1196,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Jeżeli jest włączone, to liczba dokumentów i folderów w widoku będzie ustalona poprzez zliczenie wszystkich obiektów przez rekurencyjnie przetwarzane foldery i policzenia tych dokumentów i folderów do których użytkownik ma dostęp', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_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' => '', @@ -1506,9 +1513,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => 'dodano załącznik', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'odrzucony', 'timeline_skip_status_change_-3' => 'przedawniony', 'timeline_skip_status_change_0' => 'oczekuje na opinię', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 5b8b107a3..8af195753 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 (965), flaviove (627), lfcristofoli (352) +// Translators: Admin (967), flaviove (627), lfcristofoli (352) $text = array( '2_factor_auth' => '', @@ -131,6 +131,7 @@ URL: [url]', 'archive_creation_warning' => 'With this operation you can create achive containing the files of entire DMS folders. After the creation the archive will be saved in the data folder of your server.
WARNING: an archive created as human readable will be unusable as server backup.', 'ar_EG' => 'Árabe', 'assign_approvers' => 'Assign Approvers', +'assign_recipients' => '', 'assign_reviewers' => 'Assign Reviewers', 'assign_user_property_to' => 'Assign user\'s properties to', 'assumed_released' => 'Assumed released', @@ -330,6 +331,7 @@ URL: [url]', 'documents_to_review' => 'Documents Awaiting User\'s Review', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => 'Documentos rejeitados', 'documents_user_requiring_attention' => 'Documents Owned by User That Require Attention', @@ -593,6 +595,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Individuals', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'herdado', 'inherits_access_copy_msg' => 'Copy inherited access list', 'inherits_access_empty_msg' => 'Inicie com a lista de acesso vazia', @@ -1175,6 +1178,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Permite ter nomes de documentos duplicados em uma pasta.', 'settings_enableEmail' => 'Ativar E-mail', 'settings_enableEmail_desc' => 'Ativar/desativar a notificação de e-mail automático', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Ativar Árvore de Pasta', 'settings_enableFolderTree_desc' => 'Falso para não mostrar a árvore de pastas', 'settings_enableFullSearch' => 'Ativar Pesquisa de texto completo', @@ -1209,6 +1214,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Se estiver ativado, o número de documentos e pastas na exibição de pasta será determinada pela contagem de todos os objetos de forma recursiva proceáando as pastas e contando eáes documentos e pastas que o usuário tem permissão de acesso.', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_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' => '', @@ -1473,7 +1480,7 @@ URL: [url]', 'status_approver_removed' => 'Approver removed from proceá', 'status_not_approved' => 'Not approved', 'status_not_receipted' => '', -'status_not_reviewed' => '', +'status_not_reviewed' => 'Não revisado', 'status_not_revised' => '', 'status_receipted' => '', 'status_receipt_rejected' => '', @@ -1524,9 +1531,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => 'anexo adicionado', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'rejeitado', 'timeline_skip_status_change_-3' => 'expirado', 'timeline_skip_status_change_0' => 'revisão pendente', @@ -1540,7 +1550,7 @@ URL: [url]', 'toggle_manager' => 'Toggle manager', 'toggle_qrcode' => '', 'to_before_from' => 'A data de término não pode ser anterior a data de início', -'transfer_document' => '', +'transfer_document' => 'Transferir documento', 'transfer_no_read_access' => '', 'transfer_no_write_access' => '', 'transfer_objects' => '', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 27152ba47..1a3da5da3 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -136,6 +136,7 @@ URL: [url]', 'archive_creation_warning' => 'Cu această operațiune puteți crea o arhiva care sa conțina fișierele din toate folderele DMS. După creare, arhiva va fi salvata în folderul de date din serverul dumneavoastră.
AVERTISMENT:. O arhivă creată ca lizibilă pentru om nu va putea fi utilizata ca server de backup.', 'ar_EG' => 'Arabă', 'assign_approvers' => 'Atribuire aprobatori', +'assign_recipients' => '', 'assign_reviewers' => 'Atribuire revizuitori(reviwers)', 'assign_user_property_to' => 'Atribuire proprietati utilizator la', 'assumed_released' => 'Assumed released', @@ -335,6 +336,7 @@ URL: [url]', 'documents_to_review' => 'Documente care așteaptă revizuirea dumneavoastră', 'documents_to_revise' => 'Documente de revizut', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => 'Documente deținute de tine care necesită atenție', @@ -599,6 +601,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Individuals', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'moștenit', 'inherits_access_copy_msg' => 'Copie lista de acces moștenită', 'inherits_access_empty_msg' => 'Începeți cu lista de acces goală', @@ -1200,6 +1203,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Permiteți sa existe nume de documente duplicate într-un fisier.', 'settings_enableEmail' => 'Activare E-mail', 'settings_enableEmail_desc' => 'Activare/dezactivare notificari automare prin e-mail', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Activare Folder Ierarhic', 'settings_enableFolderTree_desc' => 'Activare/dezactivare folder ierarhic în pagina \'Vizualizare Folder\'', 'settings_enableFullSearch' => 'Activare căutare in tot textul', @@ -1234,6 +1239,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Dacă este activată, numărul de documente și foldere din vizualizarea unui director va fi determinat prin numărarea tuturor obiectelor recursiv din folderele unde accesul utilizatorului este permis.', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_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' => '', @@ -1549,9 +1556,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '[document]
Adaugă atașament', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document] Versiune [version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => 'atașament adăugat', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'rejectat', 'timeline_skip_status_change_-3' => 'expirat', 'timeline_skip_status_change_0' => 'așteaptă revizuire', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index fdc0f3bc1..6ba5d115a 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 (1659) +// Translators: Admin (1661) $text = array( '2_factor_auth' => 'Двухфакторная аутентификация', @@ -136,6 +136,7 @@ URL: [url]', 'archive_creation_warning' => 'Эта операция создаст архив, содержащий все каталоги. После создания архив будет сохранен в каталоге данных сервера.
Внимание: архив созданный как понятный человеку, будет непригоден в качестве резервной копии для восстановления!', 'ar_EG' => 'Arabic', 'assign_approvers' => 'Назначить утверждающих', +'assign_recipients' => '', 'assign_reviewers' => 'Назначить рецензентов', 'assign_user_property_to' => 'Назначить свойства пользователя', 'assumed_released' => 'Утверждён', @@ -324,7 +325,7 @@ URL: [url]', 'documentcontent' => 'Содержание документа', 'documents' => 'док.', 'documents_checked_out_by_you' => 'Документ проверен вами', -'documents_expired' => '', +'documents_expired' => 'Просроченные документы', 'documents_in_process' => 'Документы в работе', 'documents_locked' => 'Заблокированные документы', 'documents_locked_by_you' => 'Документы, заблокированные вами', @@ -335,6 +336,7 @@ URL: [url]', 'documents_to_review' => 'Документы, ожидающие вашей рецензии', 'documents_to_revise' => 'Документы на ревизии', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => 'Отклоненные документы', 'documents_user_requiring_attention' => 'Ваши документы, требующие внимания', @@ -599,6 +601,7 @@ URL: [url]', 'index_waiting' => 'Ожидание', 'individuals' => 'Пользователи', 'indivіduals_in_groups' => 'Пользователи группы', +'info_recipients_tab_not_released' => '', 'inherited' => 'унаследованный', 'inherits_access_copy_msg' => 'Скопировать наследованный список', 'inherits_access_empty_msg' => 'Начать с пустого списка доступа', @@ -1207,6 +1210,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Разрешить документы с одинаковым названием в каталоге.', 'settings_enableEmail' => 'Включить e-mail', 'settings_enableEmail_desc' => 'Включить/отключить автоматическое уведомление по e-mail.', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Включить дерево каталогов', 'settings_enableFolderTree_desc' => 'Если отключено, не будет показано дерево каталогов.', 'settings_enableFullSearch' => 'Включить полнотекстовый поиск', @@ -1241,6 +1246,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Если включено, количество документов и каталогов в виде каталога будет определятся рекурсивным подсчётом всех документов и каталогов разрешённых для доступа пользователя.', 'settings_enableRevisionWorkflow' => 'Включить процесс ревизии', 'settings_enableRevisionWorkflow_desc' => 'Включить для активации функции ревизии документа по истечении определенного периода времени.', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => 'Разрешить рецензию/утверждение
пользователями вошедшими в систему', 'settings_enableSelfRevApp_desc' => 'Включите для того, чтобы пользователи, в настоящее время выполнившие вход в систему, были в списке рецензентов/утверждающих и в изменении процесса.', 'settings_enableSessionList' => '', @@ -1556,9 +1563,12 @@ URL: [url]', 'timeline_add_version' => 'Новая версия [version]', 'timeline_full_add_file' => '[document]
Новое вложение', 'timeline_full_add_version' => '[document]
Новая версия [version]', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
Версия [version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => 'Выбранный документ', 'timeline_skip_add_file' => 'вложение добавлено', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'отклонён', 'timeline_skip_status_change_-3' => 'срок действия вышел', 'timeline_skip_status_change_0' => 'ожидает рецензии', @@ -1572,7 +1582,7 @@ URL: [url]', 'toggle_manager' => 'Изменить как менеджера', 'toggle_qrcode' => '', 'to_before_from' => 'Конечная дата не может быть меньше начальной даты', -'transfer_document' => '', +'transfer_document' => 'Передать документ', 'transfer_no_read_access' => '', 'transfer_no_write_access' => '', 'transfer_objects' => '', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index f53906a66..9aab03d18 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 (553), destinqo (19), pS2017 (508) +// Translators: Admin (556), destinqo (19), pS2017 (508) $text = array( '2_factor_auth' => '2-faktorové overovanie', @@ -119,6 +119,7 @@ URL: [url]', 'archive_creation_warning' => 'Touto akciou môžete vytvoriť archív obsahujúci celú DMS zložku. Po vytvorení bude každý súbor uložený do dátovej zložky súborov na vašom serveri.
UPOZORNENIE: uživateľsky prístupný archív nie je možné použiť ako zálohu servera.', 'ar_EG' => 'Arabština', 'assign_approvers' => 'Určiť schvaľovateľov', +'assign_recipients' => '', 'assign_reviewers' => 'Určiť recenzentov', 'assign_user_property_to' => 'Assign user\'s properties to', 'assumed_released' => 'Pokladá sa za zverejnené', @@ -312,6 +313,7 @@ URL: [url]', 'documents_to_review' => 'Dokumenty čakajúce na kontrolu používateľa', 'documents_to_revise' => 'Dokumenty čakajúce na vašu revíziu', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => 'Dokumenty čakajúce na prijatie', 'documents_user_rejected' => 'Zamietnuté dokumenty', 'documents_user_requiring_attention' => 'Dokumenty, ktoré používateľ vlastní a vyžadujú pozornosť', @@ -522,6 +524,7 @@ URL: [url]', 'index_waiting' => 'Čakajte', 'individuals' => 'Jednotlivci', 'indivіduals_in_groups' => 'Členovia skupiny', +'info_recipients_tab_not_released' => '', 'inherited' => 'zdedené', 'inherits_access_copy_msg' => 'Skopírovať zdedený zoznam riadenia prístupu', 'inherits_access_empty_msg' => 'Založiť nový zoznam riadenia prístupu', @@ -1032,6 +1035,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Povoliť duplicitné názvy dokumentov v zložke.', 'settings_enableEmail' => 'Povoliť e-mail', 'settings_enableEmail_desc' => 'Povoliť/zakázať automatické emailové upozornenie', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Aktivovať strom priečinkov', 'settings_enableFolderTree_desc' => '', 'settings_enableFullSearch' => 'Povoliť Fulltextové vyhľadávanie', @@ -1066,6 +1071,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => '', 'settings_enableRevisionWorkflow' => 'Povoliť revíziu dokumentov', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', 'settings_enableSessionList' => '', @@ -1381,15 +1388,18 @@ URL: [url]', 'timeline_add_version' => 'Nová verzia [version]', 'timeline_full_add_file' => '[document]
Nová príloha', 'timeline_full_add_version' => '[document]
Nová verzia [version]', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
Verzia [version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => 'Vybraný dokument', 'timeline_skip_add_file' => 'príloha bola pridaná', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'odmietnuté', 'timeline_skip_status_change_-3' => 'expirovaný', -'timeline_skip_status_change_0' => '', -'timeline_skip_status_change_1' => '', +'timeline_skip_status_change_0' => 'čaká na revíziu', +'timeline_skip_status_change_1' => 'čaká na potvrdenie', 'timeline_skip_status_change_2' => 'uvoľnený', -'timeline_skip_status_change_3' => '', +'timeline_skip_status_change_3' => 'v spracovaní', 'timeline_skip_status_change_4' => '', 'timeline_skip_status_change_5' => 'návrh', 'timeline_status_change' => 'Verzia [version]: [status]', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index 1168981d2..e5e5ae82d 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -137,6 +137,7 @@ URL: [url]', 'archive_creation_warning' => 'Med denna funktion kan du skapa ett arkiv som innehåller filer från hela DMS-kataloger. När arkivet har skapats, kommer det att sparas i data-mappen på din server.
OBS! Skapas ett arkiv som är läsbart för användare, kan det inte användas för att återställa systemet.', 'ar_EG' => 'arabiska', 'assign_approvers' => 'Ge uppdrag till personer/grupper att godkänna dokumentet', +'assign_recipients' => '', 'assign_reviewers' => 'Ge uppdrag till personer/grupper att granska dokumentet', 'assign_user_property_to' => 'Sätt användarens egenskaper till', 'assumed_released' => 'Antas klart för användning', @@ -336,6 +337,7 @@ URL: [url]', 'documents_to_review' => 'Dokument som du behöver granska', 'documents_to_revise' => 'Dokument som väntar på din granskning', 'documents_user_expiration' => 'Utgångna dokument', +'documents_user_no_reception' => '', 'documents_user_reception' => 'Dokument som väntar på mottagande', 'documents_user_rejected' => 'Avvisade dokument', 'documents_user_requiring_attention' => 'Dokument som du behöver granska/godkänna', @@ -612,6 +614,7 @@ URL: [url]', 'index_waiting' => 'Väntar', 'individuals' => 'Personer', 'indivіduals_in_groups' => 'Medlemmar i en grupp', +'info_recipients_tab_not_released' => '', 'inherited' => 'ärvd', 'inherits_access_copy_msg' => 'Kopiera lista för behörighetsarv', 'inherits_access_empty_msg' => 'Börja med tom behörighetslista', @@ -1220,6 +1223,8 @@ Kommentar: [comment]', 'settings_enableDuplicateDocNames_desc' => 'Tillåter att det finns dokument med samma namn i en mapp.', 'settings_enableEmail' => 'Använd e-postmeddelanden', 'settings_enableEmail_desc' => 'Aktivera/Inaktivera automatiska e-postmeddelanden', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Visa katalogers trädstruktur', 'settings_enableFolderTree_desc' => 'Av för att inte visa katalogernas trädstruktur', 'settings_enableFullSearch' => 'Aktivera fulltext-sökning', @@ -1254,6 +1259,8 @@ Kommentar: [comment]', 'settings_enableRecursiveCount_desc' => 'Om detta sätts på, kommer antal dokument och kataloger i katalogvyn fastställas genom att räkna alla objekter via rekursiv hantering av alla kataloger och räkna dessa dokument och kataloger som användaren har rättigheter till.', 'settings_enableRevisionWorkflow' => 'Aktivera revidering av dokument', 'settings_enableRevisionWorkflow_desc' => 'Aktivera för att kunna köra arbetsflöde för revidering av dokument efter en specifik tidsperiod.', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => 'Tillåt granskning/godkännande 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' => 'Aktivera visning av användare online i menyn', @@ -1569,9 +1576,12 @@ Kommentar: [comment]', 'timeline_add_version' => 'Ny version [version]', 'timeline_full_add_file' => '[document]
Ny bilaga', 'timeline_full_add_version' => '[document]
Ny version [version]', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
Version [version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => 'Valt dokument', 'timeline_skip_add_file' => 'Bilaga tillagd', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'avvisad', 'timeline_skip_status_change_-3' => 'utgånget', 'timeline_skip_status_change_0' => 'väntar på granskning', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index af76dd730..7d0773a07 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -130,6 +130,7 @@ URL: [url]', 'archive_creation_warning' => 'Bu işlemle tüm DYS içeriğindeki dosyaların arşivini oluşturabilirsiniz. Arşiv oluşturulduktan sonra sunucudaki data klasörüne kaydedilecektir.
DİKKAT: Okunabilir olarak oluşturulan arşiv, sunucu yedeği olarak kullanılamaz.', 'ar_EG' => 'Arapça', 'assign_approvers' => 'Onaylayıcı Tanımla', +'assign_recipients' => '', 'assign_reviewers' => 'Kontrol Eden Tanımla', 'assign_user_property_to' => 'Kullanıcının özelliklerini ata', 'assumed_released' => 'Yayınlandı kabul edilmekte', @@ -329,6 +330,7 @@ URL: [url]', 'documents_to_review' => 'Kontrol etmenizi bekleyen dokümanlar', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => 'Dikkatinizi gerektiren size ait dokümanlar', @@ -593,6 +595,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Bireysel', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => 'devralındı', 'inherits_access_copy_msg' => 'Devralınan erişim listesini kopyala', 'inherits_access_empty_msg' => 'Boş erişim listesiyle başla', @@ -1179,6 +1182,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Bir klasör içinde aynı isimli dosyalara izin verir.', 'settings_enableEmail' => 'E-Postayı Etkinleştir', 'settings_enableEmail_desc' => 'Otomatik e-posta bildirimlerini etkinleştir/devre dışı bırak', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Klasör Ağaç Yapısını Etkinleştir', 'settings_enableFolderTree_desc' => '\'View Folder\' sayfasında klasör ağaç yapısını etkinleştir/devredışı bırak', 'settings_enableFullSearch' => 'Tam metin aramayı etkinleştir', @@ -1213,6 +1218,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Aktif hale getirildiğinde, klasör içindeki dokümanlar ve diğer klasörlerin sayısı kullanıcının erişim hakkı olan tüm nesnelerin özyinelemeli olarak sayılması yolu ile bulunur.', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_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' => '', @@ -1528,9 +1535,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => 'ek eklendi', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => '', 'timeline_skip_status_change_-3' => '', 'timeline_skip_status_change_0' => '', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 51216e7e7..7e3b90572 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -136,6 +136,7 @@ URL: [url]', 'archive_creation_warning' => 'Ця операція створить архів, який містить всі каталоги. Після створення архів буде збережений в каталозі даних сервера.
Увага: архів, який створено в читабельному вигляді, буде непридатний в якості резервної копії для відновлення!', 'ar_EG' => 'Arabic', 'assign_approvers' => 'Призначити затверджувачів', +'assign_recipients' => '', 'assign_reviewers' => 'Призначити рецензентів', 'assign_user_property_to' => 'Призначити властивості користувача', 'assumed_released' => 'Затверджено', @@ -335,6 +336,7 @@ URL: [url]', 'documents_to_review' => 'Документи, які чекають вашої рецензії', 'documents_to_revise' => 'Документи для повторного розгляду', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => 'Документи, які відхилили', 'documents_user_requiring_attention' => 'Ваші документи, які потребують уваги', @@ -599,6 +601,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Користувачі', 'indivіduals_in_groups' => 'Користувачі групи', +'info_recipients_tab_not_released' => '', 'inherited' => 'успадкований', 'inherits_access_copy_msg' => 'Скопіювати успадкований список', 'inherits_access_empty_msg' => 'Почати з порожнього списку доступу', @@ -1200,6 +1203,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => 'Дозволити документи з однаковими назвами в каталозі.', 'settings_enableEmail' => 'Увімкнути e-mail', 'settings_enableEmail_desc' => 'Увімкнути/вимкнути автоматичне сповіщення по e-mail.', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => 'Увімкнути дерево каталогів', 'settings_enableFolderTree_desc' => 'Якщо відключено, дерево каталогів не буде відображене', 'settings_enableFullSearch' => 'Увімкнути повнотекстовий пошук', @@ -1234,6 +1239,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => 'Якщо увімкнено, кількість документів і каталогів при перегляді каталогу буде підраховано рекурсивно для всіх документів до яких користувач має доступ.', 'settings_enableRevisionWorkflow' => 'Увімкнути процес ревізії', 'settings_enableRevisionWorkflow_desc' => 'Увімкніть для актвації функції ревізії документа через певний час', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => 'Дозволити рецензію/затвердження
користувачами, авторизованими у системі', 'settings_enableSelfRevApp_desc' => 'Увімкніть для того, щоб користувачі, в даний момент авторизовані у системі, були в списку рецензентів/затверджувачів і в зміні процесу.', 'settings_enableSessionList' => '', @@ -1549,9 +1556,12 @@ URL: [url]', 'timeline_add_version' => 'Нова версія [version]', 'timeline_full_add_file' => '[document]
Новий Додаток', 'timeline_full_add_version' => '[document]
Нова версія [version]', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
Версія [version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => 'Обраний документ', 'timeline_skip_add_file' => 'додаток додано', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => 'відхилений', 'timeline_skip_status_change_-3' => 'термін виконання вийшов', 'timeline_skip_status_change_0' => 'очікує рецензії', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 37ea45582..040eba262 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 (733), archonwang (469), fengjohn (5) +// Translators: Admin (736), archonwang (469), fengjohn (5) $text = array( '2_factor_auth' => '双重认证', @@ -136,6 +136,7 @@ URL: [url]', 'archive_creation_warning' => '通过此操作您可以创建一个包含这个DMS(文档管理系统)的数据文件夹。之后,所有文档都将保存到您服务器的数据文件夹中.
警告:如果所创建文档名为非数字的,那么将在服务器备份中不可用', 'ar_EG' => '阿拉伯语', 'assign_approvers' => '指派审核人', +'assign_recipients' => '', 'assign_reviewers' => '指派校对人', 'assign_user_property_to' => '分配用户属性给', 'assumed_released' => '假定发布', @@ -331,6 +332,7 @@ URL: [url]', 'documents_to_review' => '待您校对的文档', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '已拒绝的文档', 'documents_user_requiring_attention' => '需您关注的文档', @@ -597,6 +599,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => '个人', 'indivіduals_in_groups' => '组成员', +'info_recipients_tab_not_released' => '', 'inherited' => '继承', 'inherits_access_copy_msg' => '复制继承访问权限列表', 'inherits_access_empty_msg' => '从访问权限空列表开始', @@ -1183,6 +1186,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => '', 'settings_enableEmail' => '开启邮件', 'settings_enableEmail_desc' => '开启/关闭邮件自动提醒', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => '开启目录树', 'settings_enableFolderTree_desc' => '在【查看文件夹】页面上,启用/禁用文件夹树', 'settings_enableFullSearch' => '允许全文搜索', @@ -1217,6 +1222,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => '', 'settings_enableRevisionWorkflow' => '启用文档修订记录', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', 'settings_enableSessionList' => '在菜单中启用在线用户列表', @@ -1532,9 +1539,12 @@ URL: [url]', 'timeline_add_version' => '新建版本 [version]', 'timeline_full_add_file' => '[document]
新建附件', 'timeline_full_add_version' => '[document]
新建版本 [version]', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '[document]
版本[version]: [status]', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '已选择文档', 'timeline_skip_add_file' => '添加附件', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => '拒绝', 'timeline_skip_status_change_-3' => '过期', 'timeline_skip_status_change_0' => '待审核', @@ -1548,12 +1558,12 @@ URL: [url]', 'toggle_manager' => '角色切换', 'toggle_qrcode' => '显示/隐藏 QR 码', 'to_before_from' => '结束日期不能早于开始日期', -'transfer_document' => '', +'transfer_document' => '共享文档', 'transfer_no_read_access' => '', -'transfer_no_write_access' => '', +'transfer_no_write_access' => '当前用户没有文件夹写入权限', 'transfer_objects' => '', 'transfer_objects_to_user' => '', -'transfer_to_user' => '', +'transfer_to_user' => '共享给其他用户', 'transition_triggered_email' => '', 'transition_triggered_email_body' => '', 'transition_triggered_email_subject' => '', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 40f9cc810..5caff7143 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -119,6 +119,7 @@ URL: [url]', 'archive_creation_warning' => '通過此操作您可以創建一個包含這個DMS(文檔管理系統)的資料檔案夾。之後,所有文檔都將保存到您伺服器的資料檔案夾中.
警告:如果所創建文檔名為非數字的,那麼將在伺服器備份中不可用', 'ar_EG' => '阿拉伯語', 'assign_approvers' => '指派審核人', +'assign_recipients' => '', 'assign_reviewers' => '指派校對人', 'assign_user_property_to' => '分配使用者屬性給', 'assumed_released' => '假定發佈', @@ -312,6 +313,7 @@ URL: [url]', 'documents_to_review' => '待您校對的文檔', 'documents_to_revise' => '', 'documents_user_expiration' => '', +'documents_user_no_reception' => '', 'documents_user_reception' => '', 'documents_user_rejected' => '', 'documents_user_requiring_attention' => '需您關注的文檔', @@ -522,6 +524,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => '個人', 'indivіduals_in_groups' => '', +'info_recipients_tab_not_released' => '', 'inherited' => '繼承', 'inherits_access_copy_msg' => '複製繼承存取權限列表', 'inherits_access_empty_msg' => '從存取權限空列表開始', @@ -1032,6 +1035,8 @@ URL: [url]', 'settings_enableDuplicateDocNames_desc' => '', 'settings_enableEmail' => '', 'settings_enableEmail_desc' => '', +'settings_enableFilterReceipt' => '', +'settings_enableFilterReceipt_desc' => '', 'settings_enableFolderTree' => '', 'settings_enableFolderTree_desc' => '', 'settings_enableFullSearch' => '', @@ -1066,6 +1071,8 @@ URL: [url]', 'settings_enableRecursiveCount_desc' => '', 'settings_enableRevisionWorkflow' => '', 'settings_enableRevisionWorkflow_desc' => '', +'settings_enableSelfReceipt' => '', +'settings_enableSelfReceipt_desc' => '', 'settings_enableSelfRevApp' => '', 'settings_enableSelfRevApp_desc' => '', 'settings_enableSessionList' => '', @@ -1381,9 +1388,12 @@ URL: [url]', 'timeline_add_version' => '', 'timeline_full_add_file' => '', 'timeline_full_add_version' => '', +'timeline_full_scheduled_revision' => '', 'timeline_full_status_change' => '', +'timeline_scheduled_revision' => '', 'timeline_selected_item' => '', 'timeline_skip_add_file' => '', +'timeline_skip_scheduled_revision' => '', 'timeline_skip_status_change_-1' => '', 'timeline_skip_status_change_-3' => '', 'timeline_skip_status_change_0' => '', From 12dddf698c8c94abd9006b086ba43774c7a03eae Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Jan 2018 10:43:51 +0100 Subject: [PATCH 030/296] animate button to load more objects --- views/bootstrap/class.ViewFolder.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/views/bootstrap/class.ViewFolder.php b/views/bootstrap/class.ViewFolder.php index 0e0bce9fd..70e899051 100644 --- a/views/bootstrap/class.ViewFolder.php +++ b/views/bootstrap/class.ViewFolder.php @@ -99,6 +99,8 @@ function folderSelected(id, name) { function loadMoreObjects(element, limit) { if(!$(element).is(":visible")) return; + element.text(''); + element.prop("disabled",true); var folder = element.data('folder') var offset = element.data('offset') // var limit = element.data('limit') @@ -115,6 +117,7 @@ function loadMoreObjects(element, limit) { var str = ''; element.text(str.replace('[number]', data.count)); element.data('offset', offset+limit); + element.prop("disabled",false); } } }); From 8612e4aebd672bbec73a8e8a33601ac037ed659e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Jan 2018 10:44:29 +0100 Subject: [PATCH 031/296] some updates --- languages/ar_EG/lang.inc | 1 + languages/bg_BG/lang.inc | 1 + languages/ca_ES/lang.inc | 1 + languages/cs_CZ/lang.inc | 7 ++++--- languages/de_DE/lang.inc | 3 ++- languages/el_GR/lang.inc | 1 + languages/en_GB/lang.inc | 3 ++- languages/es_ES/lang.inc | 5 +++-- languages/fr_FR/lang.inc | 5 +++-- languages/hr_HR/lang.inc | 1 + languages/hu_HU/lang.inc | 1 + languages/it_IT/lang.inc | 29 +++++++++++++++-------------- languages/ko_KR/lang.inc | 1 + languages/nl_NL/lang.inc | 1 + languages/pl_PL/lang.inc | 1 + languages/pt_BR/lang.inc | 1 + languages/ro_RO/lang.inc | 1 + languages/ru_RU/lang.inc | 1 + languages/sk_SK/lang.inc | 1 + languages/sv_SE/lang.inc | 1 + languages/tr_TR/lang.inc | 1 + languages/uk_UA/lang.inc | 1 + languages/zh_CN/lang.inc | 5 +++-- languages/zh_TW/lang.inc | 1 + 24 files changed, 49 insertions(+), 25 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index a909de2fb..bd329f754 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -709,6 +709,7 @@ URL: [url]', 'monday_abbr' => 'ن', 'monthly' => 'شهريا', 'month_view' => 'عرض الشهر', +'more_objects_loading' => '', 'move' => 'تحريك', 'move_clipboard' => '', 'move_document' => 'تحريك مستند', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index 8da4ea086..8c5ba855a 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -640,6 +640,7 @@ $text = array( 'monday_abbr' => '', 'monthly' => 'Ежемесечно', 'month_view' => 'Месечен изглед', +'more_objects_loading' => '', 'move' => 'Премести', 'move_clipboard' => '', 'move_document' => 'Премести документ', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index 3257f4eab..0fc5651fb 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -645,6 +645,7 @@ URL: [url]', 'monday_abbr' => '', 'monthly' => 'Monthly', 'month_view' => 'Vista de mes', +'more_objects_loading' => '', 'move' => 'Moure', 'move_clipboard' => '', 'move_document' => 'Moure document', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index bbc418052..4773d08be 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 (735), kreml (455) +// Translators: Admin (737), kreml (455) $text = array( '2_factor_auth' => '', @@ -716,6 +716,7 @@ URL: [url]', 'monday_abbr' => 'Po', 'monthly' => 'Měsíčně', 'month_view' => 'Zobrazení měsíce', +'more_objects_loading' => '', 'move' => 'Přesunout', 'move_clipboard' => 'Přesun schránky', 'move_document' => 'Přesunout dokument', @@ -867,7 +868,7 @@ Pokud budete mít problém s přihlášením i po změně hesla, kontaktujte Adm 'preview_plain' => '', 'previous_state' => 'Předchozí stav', 'previous_versions' => 'Předešlé verze', -'process' => '', +'process' => 'Proces', 'process_without_user_group' => '', 'pt_BR' => 'Portugalština (BR)', 'quota' => 'Kvóta', @@ -1611,7 +1612,7 @@ URL: [url]', 'uploading_zerosize' => 'Nahrávání prázdného souboru. Nahrání zrušeno.', 'used_discspace' => 'Použité místo na disku', 'user' => 'Uživatel', -'userid_groupid' => '', +'userid_groupid' => 'ID uživatel/ID skupiny', 'users' => 'Uživatel', 'users_and_groups' => 'Uživatelé/Skupiny', 'users_done_work' => 'Uživatel ukončil práci', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 33dbc26a7..b34267d87 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 (2518), dgrutsch (22) +// Translators: Admin (2519), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -732,6 +732,7 @@ URL: [url]', 'monday_abbr' => 'Mo', 'monthly' => 'monatlich', 'month_view' => 'Monatsansicht', +'more_objects_loading' => 'Weitere Objekte werden geladen ...', 'move' => 'Verschieben', 'move_clipboard' => 'Zwischenablage in Ordner verschieben', 'move_document' => 'Verschieben', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index cf819995a..8ba49be74 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -640,6 +640,7 @@ $text = array( 'monday_abbr' => 'Δε', 'monthly' => 'Μηνιαία', 'month_view' => '', +'more_objects_loading' => '', 'move' => 'Μετακίνηση', 'move_clipboard' => '', 'move_document' => 'Μετακίνηση εγγράφου', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 51d5b1629..01960ede1 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 (1643), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1644), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -733,6 +733,7 @@ URL: [url]', 'monday_abbr' => 'Mo', 'monthly' => 'Monthly', 'month_view' => 'Month view', +'more_objects_loading' => 'More objects loading ...', 'move' => 'Move', 'move_clipboard' => 'Move clipboard', 'move_document' => 'Move document', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index f1aeb8e05..536bb5f54 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 (1052), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1053), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -716,6 +716,7 @@ URL: [url]', 'monday_abbr' => 'L', 'monthly' => 'Mensual', 'month_view' => 'Vista del Mes', +'more_objects_loading' => '', 'move' => 'Mover', 'move_clipboard' => 'Mover portapaprles', 'move_document' => 'Mover documento', @@ -1681,7 +1682,7 @@ URL: [url]', 'workflow_summary' => 'Resumen Flujo de Trabajo', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => 'Resumen Usuario', -'x_more_objects' => '', +'x_more_objects' => '[number] más objetos', 'year_view' => 'Vista del año', 'yes' => 'Sí', 'zh_CN' => 'Chino (CN)', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index a409989c1..3eb0f2879 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 (1069), jeromerobert (50), lonnnew (9), Oudiceval (477) +// Translators: Admin (1070), jeromerobert (50), lonnnew (9), Oudiceval (477) $text = array( '2_factor_auth' => 'Authentification forte', @@ -728,6 +728,7 @@ URL: [url]', 'monday_abbr' => 'Lun.', 'monthly' => 'Mensuel', 'month_view' => 'Vue par mois', +'more_objects_loading' => '', 'move' => 'Déplacer', 'move_clipboard' => 'Déplacer le contenu du presse-papier', 'move_document' => 'Déplacer le document', @@ -1703,7 +1704,7 @@ URL: [url]', 'workflow_summary' => 'Vue d’ensemble du workflow', 'workflow_transition_without_user_group' => 'Au moins une transition a ni utilisateur, ni groupe !', 'workflow_user_summary' => 'Vue d’ensemble de l’utilisateur', -'x_more_objects' => 'éléments supplémentaires', +'x_more_objects' => '[number] objets supplémentaires', 'year_view' => 'Vue annuelle', 'yes' => 'Oui', 'zh_CN' => 'Chinois (CN)', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 838c1e1fd..1596dadaa 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -721,6 +721,7 @@ Internet poveznica: [url]', 'monday_abbr' => 'Po', 'monthly' => 'Mjesečno', 'month_view' => 'Pregled po mjesecu', +'more_objects_loading' => '', 'move' => 'Premjesti', 'move_clipboard' => 'Premjesti međuspremnik', 'move_document' => 'Premjesti dokument', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 7998c7f78..a9ddfe7f8 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -716,6 +716,7 @@ URL: [url]', 'monday_abbr' => 'Hé', 'monthly' => 'Havi', 'month_view' => 'Havi nézet', +'more_objects_loading' => '', 'move' => 'Áthelyez', 'move_clipboard' => 'Vágólapra helyez', 'move_document' => 'Dokumentum áthelyezése', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index dd383cb9d..cbf60d1bf 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 (1574), rickr (144), s.pnt (26) +// Translators: Admin (1587), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -480,7 +480,7 @@ URL: [url]', 'exclude_items' => 'Escludi Elementi', 'expired' => 'Scaduto', 'expired_at_date' => '', -'expired_documents' => '', +'expired_documents' => 'Documenti scaduti', 'expires' => 'Scadenza', 'expire_by_date' => 'Scadenza per Data', 'expire_in_1d' => '', @@ -722,6 +722,7 @@ URL: [url]', 'monday_abbr' => 'Lun', 'monthly' => 'Mensile', 'month_view' => 'Vista mensile', +'more_objects_loading' => '', 'move' => 'Sposta', 'move_clipboard' => 'Sposta appunti', 'move_document' => 'Sposta documento', @@ -871,7 +872,7 @@ Dovessero esserci ancora problemi al login, prego contatta l\'Amministratore di 'preset_expires' => 'Scadenza preimpostata', 'preview' => 'Anteprima', 'preview_converters' => 'Anteprima convesione documento', -'preview_images' => '', +'preview_images' => 'Immagini di anteprima', 'preview_markdown' => 'Riduione ribasso', 'preview_pdf' => '', 'preview_plain' => 'Testo', @@ -1233,7 +1234,7 @@ URL: [url]', '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' => 'Consenti il caricamento di più files', -'settings_enableMultiUpload_desc' => '', +'settings_enableMultiUpload_desc' => 'Quando viene creato un nuovo documento, possono essere caricati più files. Ogniuno di essi genera un nuovo documento.', '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', @@ -1254,7 +1255,7 @@ URL: [url]', 'settings_enableSelfReceipt_desc' => '', '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' => 'Abilita lista utenti online nel menu', 'settings_enableSessionList_desc' => '', 'settings_enableThemeSelector' => 'Selezione tema grafico', 'settings_enableThemeSelector_desc' => 'Abilita/disabilita il selettore di tema grafico nella finestra di login', @@ -1293,8 +1294,8 @@ URL: [url]', 'settings_guestID_desc' => 'ID o utenza ospite utilizzata quando collegati al sito come ospite (da cambiare solo in casi eccezionali).', 'settings_httpRoot' => 'Cartella web principale', 'settings_httpRoot_desc' => 'Percorso relativo nell\'URL dopo il dominio e senza il prefisso \'http://\'. Es: se l\'URL completo è http://www.esempio.com/SeedDMS/, impostare \'/SeedDMS/\'; se invece l\'URL è http://www.esempio.com/, impostare \'/\'', -'settings_incItemsPerPage' => '', -'settings_incItemsPerPage_desc' => '', +'settings_incItemsPerPage' => 'Numero di inserimenti caricati a fine pagina', +'settings_incItemsPerPage_desc' => 'Se il numero di cartelle e documenti è stato limitato, questo imposterà il numero di ulteriori oggetti caricati allo scorrimento della pagina verso il basso nella pagina di visualizzazione. Impostare 0 significa caricare lo stesso numero di oggetti caricati inizialmente.', 'settings_initialDocumentStatus' => 'Stato iniziale documento', 'settings_initialDocumentStatus_desc' => 'Stato assegnato quando si aggiunge documento', 'settings_initialDocumentStatus_draft' => 'Bozza', @@ -1325,8 +1326,8 @@ URL: [url]', 'settings_maxDirID_desc' => 'Numero massimo di sottocartelle contenibili in una cartella. Default: 0.', 'settings_maxExecutionTime' => 'Tempo Max di esecuzione (s)', 'settings_maxExecutionTime_desc' => 'Imposta il tempo limite per l\'esecuzione di uno script prima che il parser lo termini.', -'settings_maxItemsPerPage' => '', -'settings_maxItemsPerPage_desc' => '', +'settings_maxItemsPerPage' => 'Numero massimo di inserimenti per pagina', +'settings_maxItemsPerPage_desc' => 'Riduce numero di cartelle e documenti mostrati nell pagina di visualizzazione cartelle. Altri oggetti saranno caricati allo scorrimento verso la fine della pagina. Impostare 0 per visualizzare tutti gli elementi.', 'settings_maxRecursiveCount' => 'Conteggio ricursivo Max di files e cartelle', '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', @@ -1363,12 +1364,12 @@ URL: [url]', 'settings_presetExpirationDate_desc' => 'Tutti i nuovi documenti caricati avranno la data di scadenza impostata su questo valore. La data inserita può essere specificata nel formato accettato dalla funzione strtotime() di PHP, ad esempio +5 settimane.', 'settings_previewWidthDetail' => 'Larghezza immagini di anteprima (dettagli)', 'settings_previewWidthDetail_desc' => 'Larghezza delle immagini di anteprima mostrate nella pagina dei dettagli', -'settings_previewWidthDropFolderList' => '', -'settings_previewWidthDropFolderList_desc' => '', +'settings_previewWidthDropFolderList' => 'Larghezza immagine di anteprima (lista cartella rilascio)', +'settings_previewWidthDropFolderList_desc' => 'Larghezza immagine di anteprima mostrata nella lista, quando selezionato un file dalla cartella di rilascio', 'settings_previewWidthList' => 'Larghezza delle immagini di anteprima (lista)', 'settings_previewWidthList_desc' => 'Larghezza delle immagini di anteprima mostrate nella lista', -'settings_previewWidthMenuList' => '', -'settings_previewWidthMenuList_desc' => '', +'settings_previewWidthMenuList' => 'Larghezza immagine di anteprima (lista menu)', +'settings_previewWidthMenuList_desc' => 'Larghezza immagine di anteprima mostrata come articolo nel menu cartella di rilascio.', 'settings_printDisclaimer' => 'Mostra disclaimer', 'settings_printDisclaimer_desc' => 'Se abilitato il messaggio circa i termini e le condizioni d\'uso verrà mostrato nel pié di pagina.', 'settings_quota' => 'Quota utente', @@ -1556,7 +1557,7 @@ URL: [url]', 'takeOverIndApprover' => 'Riprendi l\'approvatore dall\'ultima versione.', 'takeOverIndReviewer' => 'Riprendi il revisore dall\'ultima versione.', 'tasks' => 'Compiti', -'temp_jscode' => '', +'temp_jscode' => 'Codice javascript temporaneo', 'testmail_body' => 'Questo messaggio di posta elettronica è solo un test per verificare la configurazione del repository', 'testmail_subject' => 'Messaggio di test', 'theme' => 'Tema', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index fcb380e14..d83f01ec1 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -722,6 +722,7 @@ URL: [url]', 'monday_abbr' => '월', 'monthly' => '월간', 'month_view' => '월간 단위로 보기', +'more_objects_loading' => '', 'move' => '이동', 'move_clipboard' => '이동 클립 보드', 'move_document' => '문서 옮기기', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index fea2ee847..695ca44a5 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -721,6 +721,7 @@ URL: [url]', 'monday_abbr' => 'ma', 'monthly' => 'Maandelijks', 'month_view' => 'Maandoverzicht', +'more_objects_loading' => '', 'move' => 'Verplaats', 'move_clipboard' => 'Verplaats klembord', 'move_document' => 'Verplaats document', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index 7bf9a49d3..7358144b0 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -709,6 +709,7 @@ URL: [url]', 'monday_abbr' => 'Pn.', 'monthly' => 'Miesięcznie', 'month_view' => 'Widok miesięczny', +'more_objects_loading' => '', 'move' => 'Przenieś', 'move_clipboard' => 'Przenieś schowek', 'move_document' => 'Przenieś dokument', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 8af195753..7909705d8 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -715,6 +715,7 @@ URL: [url]', 'monday_abbr' => 'Mo', 'monthly' => 'Mensal', 'month_view' => 'Month view', +'more_objects_loading' => '', 'move' => 'Move', 'move_clipboard' => 'Mover para memória auxiliar', 'move_document' => 'Mover documento', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 1a3da5da3..24b134a9c 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -721,6 +721,7 @@ URL: [url]', 'monday_abbr' => 'Lu', 'monthly' => 'Lunar', 'month_view' => 'Vizualizare lună', +'more_objects_loading' => '', 'move' => 'Mută', 'move_clipboard' => 'Mută clipboard', 'move_document' => 'Mută document', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index 6ba5d115a..5c9798e06 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -721,6 +721,7 @@ URL: [url]', 'monday_abbr' => 'Пн', 'monthly' => 'Ежемесячно', 'month_view' => 'Месяц', +'more_objects_loading' => '', 'move' => 'Переместить', 'move_clipboard' => 'Переместить буфер обмена', 'move_document' => 'Переместить документ', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index 9aab03d18..979da1044 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -644,6 +644,7 @@ URL: [url]', 'monday_abbr' => 'Po', 'monthly' => 'Mesačne', 'month_view' => 'Mesiac', +'more_objects_loading' => '', 'move' => 'Presunúť', 'move_clipboard' => 'Presunúť schránku', 'move_document' => 'Presunúť dokument', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index e5e5ae82d..0178bd49b 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -734,6 +734,7 @@ URL: [url]', 'monday_abbr' => 'Må', 'monthly' => 'Månadsvis', 'month_view' => 'Månadsvy', +'more_objects_loading' => '', 'move' => 'Flytta', 'move_clipboard' => 'Flytta urklipp', 'move_document' => 'Flytta dokument', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 7d0773a07..01ddca0b2 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -715,6 +715,7 @@ URL: [url]', 'monday_abbr' => 'Pzt', 'monthly' => 'Aylık', 'month_view' => 'Aylık görünüm', +'more_objects_loading' => '', 'move' => 'Taşı', 'move_clipboard' => 'Panoyu taşı', 'move_document' => 'Dokümanı taşı', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 7e3b90572..6c0947628 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -721,6 +721,7 @@ URL: [url]', 'monday_abbr' => 'Пн', 'monthly' => 'Щомісяця', 'month_view' => 'Місяць', +'more_objects_loading' => '', 'move' => 'Перемістити', 'move_clipboard' => 'Перемістити буфер обміну', 'move_document' => 'Перемістити документ', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 040eba262..00e23ce94 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 (736), archonwang (469), fengjohn (5) +// Translators: Admin (737), archonwang (469), fengjohn (5) $text = array( '2_factor_auth' => '双重认证', @@ -719,6 +719,7 @@ URL: [url]', 'monday_abbr' => '', 'monthly' => '月', 'month_view' => '月视图', +'more_objects_loading' => '', 'move' => '移动', 'move_clipboard' => '移动剪切板', 'move_document' => '移动文档', @@ -1677,7 +1678,7 @@ URL: [url]', 'workflow_summary' => '工作流概述', 'workflow_transition_without_user_group' => '', 'workflow_user_summary' => '用户概述', -'x_more_objects' => '', +'x_more_objects' => '浏览更多', 'year_view' => '年视图', 'yes' => '是', 'zh_CN' => '中文简体', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 5caff7143..617d8b06e 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -644,6 +644,7 @@ URL: [url]', 'monday_abbr' => '', 'monthly' => '', 'month_view' => '月視圖', +'more_objects_loading' => '', 'move' => '移動', 'move_clipboard' => '移動剪貼簿', 'move_document' => '移動文檔', From 996e0824f056687676be086bbe4bcd054b5dfe4b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Jan 2018 13:54:30 +0100 Subject: [PATCH 032/296] add item for 5.1.6 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index f0ef4294a..fdb66adef 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,7 @@ S_DRAFT_APP resp. S_DRAFT_REV - add preview for webm videos (Closes #374) - add support for apache mod_xsendfile, minor optimization of file download +- animate button to download more objects in folder list which loading is active -------------------------------------------------------------------------------- Changes in version 5.1.5 From bd7c2eeddfe3e9a1b34b4f1294aa6e03b11cf53a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Jan 2018 19:09:01 +0100 Subject: [PATCH 033/296] no longer needed --- views/clean | 1 - views/hc | 1 - 2 files changed, 2 deletions(-) delete mode 120000 views/clean delete mode 120000 views/hc diff --git a/views/clean b/views/clean deleted file mode 120000 index f5ac3db8c..000000000 --- a/views/clean +++ /dev/null @@ -1 +0,0 @@ -blue \ No newline at end of file diff --git a/views/hc b/views/hc deleted file mode 120000 index f5ac3db8c..000000000 --- a/views/hc +++ /dev/null @@ -1 +0,0 @@ -blue \ No newline at end of file From 930a8b48f136279b3f9c44c1a1ff937dbdba87fa Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 23 Jan 2018 19:09:32 +0100 Subject: [PATCH 034/296] old changes file --- styles/changes.txt | 470 --------------------------------------------- 1 file changed, 470 deletions(-) delete mode 100644 styles/changes.txt diff --git a/styles/changes.txt b/styles/changes.txt deleted file mode 100644 index 460c590f3..000000000 --- a/styles/changes.txt +++ /dev/null @@ -1,470 +0,0 @@ -------------------------------------------------------------------- - Changes in version 1.7.2 -------------------------------------------------------------------- - -- Style Sheet modifications to improve IE6 compatibility, contributed by - Juan Lago (thanks Juan!). This fixes some placement issues with elements - that have the position attribute set to "absolute". - -- The div elements that are used to clear floats have been fixed so that they - have zero height in IE6. It is not enough to specify "height: 0"; one must - also set "font-size:0" otherwise IE6 will set the height of the element to - match the standard font size. - -- UI layout improvements. Various changes to the user interface to improve - the page flow and allow for further expansion in the future. The context - menu bar has been separated from the page heading into its own container - underneath the title. It's a more logical place to present the menu, and - will allow for the easy addition of further sub-headings in the future - without compromising the page flow. - -- The last dependency on the original theme system has been eliminated with - the introduction of updated chooser dialogues for selecting files and - folders. These dialogues have the new themes and the code has been revamped, - replacing the old table structures with unordered lists. - -- LDAP update. A minor change to the LDAP authentication code to allow for - the use of URIs to identify the server name (e.g. ldaps://host.com). - Also, the LDAP version is set to 3 in order to support secure connections. - -- New language translations for Czech and Slovak. Contributed by SF user - helix84 (thanks!). - - -------------------------------------------------------------------- - Changes in version 1.7.1 -------------------------------------------------------------------- - -- Re-vamped Notification system allows users to receive an email when a - document or folder is changed. This is a new, event-based mechanism that - notifies the user as soon as the change has been made and replaces the - cron mechanism originally developed. Any user that has read access to a - document or folder can subscribe to be notified of changes. Users that - have been assigned as reviewers or approvers for a document are - automatically added to the notification system for that document. - - A new page has been created for users to assist with the management of - their notification subscriptions. This can be found in the "My Account" - section under "Notification List". - -- The test used to identify HTTPS connections has been improved so that it - correctly identifies IIS servers that have ISAPI enabled but are not - using HTTPS protocol. - - -------------------------------------------------------------------- - Changes in version 1.7.0 -------------------------------------------------------------------- - -- Fixes to CSS display bugs. Minor updates to the display. - -- Improved handling of character escape sequences. - -- Review / Approve dates added to folder views and search results. - -- New file system directory management code to accommodate limitations in the - underlying filesystem which restrict the number of files that MyDMS can - store. MyDMS now uses a nested directory structure to store files, rather - than a flat one. However, note that individual files are still stored one - per directory in order to preserve compatibility with older versions of - MyDMS. - - For details of the problem and the solution implemented, please refer to: - - http://mydms.sf.net/2007/08/15/new-file-system-storage-structure/ - -- Hungarian translation. - -- And as a bonus, there is a Drupal theme compatible with MyDMS. - - -------------------------------------------------------------------- - Changes in version 1.6.1 -------------------------------------------------------------------- - -- Theme and language choice are now saved as user attributes between - sessions. Read update-1.6.1.txt for changes to database schema. - -- Link to document review / approval page from out.ViewDocument.php. - -- French translation. - -- Brazilian Portuguese translation. - -- Traditional Chinese translation. - -- Relaxation of criteria for selecting reviewers / approvers. Users now only - require read access to be eligible reviewers or approvers. - -- Documents are now displayed in the correct sequence in the folder view. - -- Documents can be downloaded directly from the folder view by clicking their - icon. - -- Document icons in the folder view now reflect the document type. - -- Empty passwords are not accepted, even when JS is disabled in the browser. - -- New restricted access mode rejects login from users who are not entered - into the internal database, even if LDAP authentication was successful. - - -------------------------------------------------------------------- - Changes in version 1.6.0 -------------------------------------------------------------------- - -- Introduction of a document workflow system that manages the life-cycle of a - document, including review and approval stages. - - Details: - - Document Class: - Created new methods: - Document::addIndReviewer() - Document::addGrpReviewer() - Document::addIndApprover() - Document::addGrpApprover() - - Changes to: - Document::addContent() - - New Class: Email. - - out.AddDocument.php - op.AddDocument.php - Changes to allow selection of reviewers and approvers. - - Group Class: - Changes to: - Group::getUsers() -- query optimised - New Methods: - Group::getReviewStatus() - Group::getApprovalStatus() - - User Class: - New Methods: - User::getReviewStatus() - User::getApprovalStatus() - - Class Folder: - Changes to: - Folder::addDocument() -- accept reviewers, approvers as parameters. - - New Class: AddContentResultSet. - - Database: - Document version field changed from TINYINT to unsigned SMALLINT throughout - database. - `tblGroupMembers`: - `id` field removed as it is unnecessary. - Created a primary of `groupID`, `userID`. - - DocumentContent Class: - Created new methods: - DocumentContent::getStatus() - DocumentContent::getReviewStatus() - DocumentContent::getApprovalStatus() - DocumentContent::delIndReviewer() - DocumentContent::delGrpReviewer() - DocumentContent::delIndApprover() - DocumentContent::delGrpApprover() - - out.ViewDocument.php - op.ViewDocument.php - Changes to incorporate display of workflow status. - Links to allow user to change status of a document revision. - - out.UpdateDocument.php - op.UpdateDocument.php - Changes to allow selection of reviewers and approvers. - - out.Login.php - op.Login.php - redirect user to originally requested URL upon successful login. - - out.ReviewDocument.php - op.ReviewDocument.php - out.ApproveDocument.php - op.ApproveDocument.php - Created to enable users to review and approve documents. - - out.OverrideContentStatus.php - op.OverrideContentStatus.php - Allows document owner or site administrator to override the status of a - document. - - out.SetReviewersApprovers.php - op.SetReviewersApprovers.php - Allows document owner or site administrator to re-assign reviewers and - approvers to a document revision that is pending review or approval. - - out.ActionSummary.php - Lists all the documents owned by current user that are pending review or - approval. Lists all documents that are awaiting review or approval by the - user. - - Search page now allows user to search for documents pending review or - approval. Search results display overall document status. - -- Admin user cannot be deleted, and admin privilege cannot be removed from - the admin user. Previously, both actions were possible. - -- Users can be assigned administrative privileges in the User Manager. - -- Deleting document revisions or the document itself notifies all affected - users by email, deletes entries from all status logs. - - -------------------------------------------------------------------- - Changes in version 1.5.1 -------------------------------------------------------------------- - -- Fixed a bug in the keyword editing code which was preventing users from - adding default keywords into global keyword categories. - -------------------------------------------------------------------- - Changes in version 1.5.0 -------------------------------------------------------------------- - -- Optimised search. Improved the performance of the search function by - placing more of the work on the database and by applying indexes to some of - the tables. Sub-folder searches are also dramatically improved due to the - incorporation of a folderList field in the tblDocuments table. - -- Optimised display. New compact theme significantly reduces the page load - times. This is the default theme. The original is still available as a - selection. - -- Changed file download headers such that downloading works with IE over SSL. - -- Changed all instances of $HTTP_COOKIES_VARS, which has been deprecated, to - $_COOKIE. - -- Replaced all short open tags ( Date: Tue, 23 Jan 2018 19:10:37 +0100 Subject: [PATCH 035/296] remove old print style --- styles/print.css | 339 ----------------------------------------------- 1 file changed, 339 deletions(-) delete mode 100644 styles/print.css diff --git a/styles/print.css b/styles/print.css deleted file mode 100644 index dc417e2b9..000000000 --- a/styles/print.css +++ /dev/null @@ -1,339 +0,0 @@ -/* Copyright (C) 2010 Matteo Lucarelli -*/ - -body { - font-size: 72%; - font-family: sans-serif; - background: #fff; -} -body.login { - width: 50%; - margin-left: auto; - margin-right: auto; -} -.headingContainer { - background: #fff; - position: relative; -} -/* IE6 Hack */ -* html .headingContainer { - position: relative; -} -.localNavContainer { - display:none; -} - -.mimeicon{ -display:none; -} - -.disclaimer{ -display:none; -} - -.actions{ -display:none; -} - -a{ - color: #000; - text-decoration: none; -} - -.mainHeading { - padding: 2px 4px 0px 4px; - font-size: 1.5em; - font-weight: bold; - color: black; - position: absolute; - bottom: 0px; - margin-left: 55px; -} -/* IE6 Hack */ -* html .mainHeading { - position: relative; -} -.contentHeading { - color: white; - padding: 2px 4px 2px 4px; - margin-top: 10px; - font-size: 1.2em; - font-weight: bold; - background: #555; -} -.contentSubHeading { - /*display:none;*/ -} -.contentSubHeading#first { - margin-top: 0; - margin-bottom: 2px; -} -.siteName { - display: none; -} -.globalBox { - position: relative; - height: 4em; -} - -/* IE6 Hack */ -* html .globalBox { - position: relative; -} - -.globalBox#noNav { - height: 4em; -} -.globalBox div#signatory { - display:none; -} - -/* IE6 Hack */ -* html .globalBox div#signatory { - position: relative; -} - -.globalNav { - display:none; -} - -.tree { - display:none; -} - -/* IE6 Hack */ -* html .globalNav { - position: relative; -} - -.globalNav li { - display: inline; - padding: 0px 4px 0px 4px; - border-left: 1px solid; - } -.globalNav li#first { - border-left: none; - padding: 0px 4px 0px 0px; -} - -form{ - display: none; -} - -.globalNav li form { - display: none; -} -.globalNav li input { - font-size: 0.8em; - border: 1px solid; - padding: 1px; -} -.globalNav li input#searchButton { - border-left:0; - padding: 0px; -} -.localNav { - padding:1px; - margin: 0px; - margin-top: 3px; - text-align: left; - list-style-type: none; - color: white; - text-transform: uppercase; -} -.localNav li { - font-size: 0.8em; - display: inline; - padding: 2px 4px 2px 4px; - border: 1px solid #fff; -} - -.globalTR { - float: right; - width: 8px; - height: 8px; -} -.smallText { - font-size: 0.8em; -} -.contentContainer { - padding: 0px; - width: 100%; - margin: auto; -} -.content { - background-color: white; - padding: 0; - border-top: 1px solid #e0e0e0; -} -.content-l { -} -.content-r { -} -.content-br { -} -.content-bl { - padding: 0.6em 1em; -} -.content input, .content select { - font-size: 0.8em; -} - -.content textarea { - border: 1px solid; - font-family: sans-serif; - font-size: 1.0em; -} -td { - vertical-align: top; -} -table.folderView { - border-collapse: collapse; - width: 100%; -} -table.folderView thead tr { - border-bottom: 1px solid rgb(189, 190, 192); -} -table.folderView th, table.folderView td { - padding: 0.1em 0.4em; -} -table.folderView th { - text-align: left; -} -table.folderView td { - border-bottom: 1px solid rgb(224, 224, 224); -} -table.folderView td.center { - text-align: center; -} -table.folderView tr.folder { - border-bottom: 1px solid rgb(224, 224, 224); -} -table.defaultView { - border-collapse: collapse; -} -table.defaultView thead tr { - border-bottom: 1px solid rgb(189, 190, 192); -} -table.defaultView th, table.defaultView td { - padding: 0.1em 0.4em; -} -table.defaultView th { - text-align: left; -} -table.defaultView td { - border-bottom: 1px solid rgb(224, 224, 224); -} -table.defaultView td.center { - text-align: center; -} -table.defaultView tr.folder { - border-bottom: 1px solid rgb(224, 224, 224); -} -td#userImage { - border: 1px solid rgb(189, 190, 192); -} -img.userImage { - height: 72px; -} -img.mimeicon { - height: 18px; - vertical-align: middle; - border: none; -} -img.treeicon { - border: none; - padding-right: 0.1em; -} -input.mimeicon { - height: 18px; - vertical-align: middle; - border: none; -} -ul.reviewer { - padding: 0; - margin: 0; -} -ul.reviewer li { - list-style: none; - padding: 0.1em 0em; - border-top: 1px solid rgb(163, 184, 203); -} -ul.reviewer li.first { - border-top: none; -} -ul.actions { - padding: 0; - margin: 0; -} -ul.actions li { - list-style: none; - padding: 0 0 0.1em 0; -} -ul.actions li.first { - border-top: none; -} -ul.documentDetail { - margin: 0; - padding:0; - font-size: 0.8em; - list-style:none; -} - -.cbSelectTitle { - float:left; - width: 6em; -} -.cbSelectContainer { - overflow:auto; - height: 8em; - border: 1px solid; - padding: 0.2em 0; - margin: 0.2em 0; -} -.cbSelectContainer.empty { - height: 1em; -} -.cbSelectList { - padding: 0.1em; -} -.cbSelectItem { - list-style-type: none; -} -ul.pageList { - list-style-type: none; - padding: 0px; - margin: 1.5em 0 0 0; - text-align: center; -} -ul.pageList li { - display:inline; - margin: 0 0.2em; - font-weight: bold; -} -ul.pageList li#first { - margin-left: 0; - font-weight: normal; -} -/* - * I rather foolishly decided to have the title of the page exist at the - * bottom of the containing DIV element. This means using absolute - * positioning in order to get the desired effect in a way that is consistent. - * However, this causes problems when the fonts are scaled as overlap can - * occur with other elements, leading to unclean layout (since absolute - * positioning removes the element from the document flow). My solution is to - * place an empty element in the page directly before the title that remains - * in the document flow. This fakes a margin around the title. - * I've also applied this to the login form in the global navigation section. - */ -span.absSpacerNorm { - display: none; -} - -span.absSpacerTitle { - display: none; -} - -.footNote { - display:none; -} From 1ae8f580551c33e711787f4a1603c5b66e7d9415 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Jan 2018 09:06:48 +0100 Subject: [PATCH 036/296] set converters as set in configuration (Closes #389) --- op/op.Preview.php | 1 + 1 file changed, 1 insertion(+) diff --git a/op/op.Preview.php b/op/op.Preview.php index 76eba3781..488555945 100644 --- a/op/op.Preview.php +++ b/op/op.Preview.php @@ -73,6 +73,7 @@ if(!empty($_GET["width"])) $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $_GET["width"]); else $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir); +$previewer->setConverters($settings->_converters['preview']); if(!$previewer->hasPreview($object)) { if(!$previewer->createPreview($object)) { } From 483272e32bf95aa6aae8b579ae5e3523f35e0da8 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Jan 2018 09:08:40 +0100 Subject: [PATCH 037/296] add item for 5.1.6 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index fdb66adef..8e416023d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ - add preview for webm videos (Closes #374) - add support for apache mod_xsendfile, minor optimization of file download - animate button to download more objects in folder list which loading is active +- use converters for creating preview images as configured in settings (Closes #389) -------------------------------------------------------------------------------- Changes in version 5.1.5 From beb29ca34e92a5bf7afd586169b28dabf0dd0955 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Jan 2018 09:18:24 +0100 Subject: [PATCH 038/296] propperly check if user exists in database (Closes #388) --- inc/inc.ClassLdapAuthentication.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/inc/inc.ClassLdapAuthentication.php b/inc/inc.ClassLdapAuthentication.php index 93d5d6169..cd301ec2a 100644 --- a/inc/inc.ClassLdapAuthentication.php +++ b/inc/inc.ClassLdapAuthentication.php @@ -125,11 +125,15 @@ class SeedDMS_LdapAuthentication extends SeedDMS_Authentication { /* No do the actual authentication of the user */ $bind = @ldap_bind($ds, $dn, $password); $user = $dms->getUserByLogin($username); + if($user === false) { + ldap_close($ds); + return false; + } if ($bind) { // Successfully authenticated. Now check to see if the user exists within // the database. If not, add them in if _restricted is not set, // but do not add their password. - if (is_bool($user) && !$settings->_restricted) { + if (is_null($user) && !$settings->_restricted) { // Retrieve the user's LDAP information. if (isset($settings->_ldapFilter) && strlen($settings->_ldapFilter) > 0) { $search = ldap_search($ds, $settings->_ldapBaseDN, "(&(".$ldapSearchAttribut.$username.")".$settings->_ldapFilter.")"); From 11ae4f1d79c5d34d2c89fa91d128db2c575852e5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Jan 2018 09:25:49 +0100 Subject: [PATCH 039/296] add item for 5.1.6 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 8e416023d..96cf1f921 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,7 @@ - add support for apache mod_xsendfile, minor optimization of file download - animate button to download more objects in folder list which loading is active - use converters for creating preview images as configured in settings (Closes #389) +- propperly check if user is already in database when doing ldap auth (Closes #388) -------------------------------------------------------------------------------- Changes in version 5.1.5 From 6dc4611f04f8bfbfbea8e2c9a5df96d0e83c219e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 24 Jan 2018 16:26:28 +0100 Subject: [PATCH 040/296] add x-msvideo as previewable video --- views/bootstrap/class.ViewDocument.php | 1 + 1 file changed, 1 insertion(+) diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 69a3ea203..74c93d11a 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -358,6 +358,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { break; case 'video/webm': case 'video/mp4': + case 'video/x-msvideo': $this->contentHeading(getMLText("preview")); ?>