Merge branch 'seeddms-6.0.x' into seeddms-6.1.x

This commit is contained in:
Uwe Steinmann 2018-02-27 14:01:21 +01:00
commit 593a12a5a6
100 changed files with 2691 additions and 1036 deletions

View File

@ -5,6 +5,11 @@
- add attribute groups and selective output of attributes
- document versions can be downloaded by a temporary link
--------------------------------------------------------------------------------
Changes in version 6.0.4
--------------------------------------------------------------------------------
- merge changes up to 5.1.5
--------------------------------------------------------------------------------
Changes in version 6.0.3
--------------------------------------------------------------------------------
@ -24,6 +29,10 @@
will no longer be in status 'rejected' but 'needs correction'
- better error handling when indexing documents fails
- apache xsendfile module is used for downloading documents when installed
- add view access check for ApprovalSummary, ReviewSummary, ReceiptSummary,
WorkflowSummary, DocumentAccess, GroupView, UsrView, WorkflowSummary
- filter out reviewers and uploader of a document version when setting recipients
by user group
--------------------------------------------------------------------------------
Changes in version 6.0.2
@ -83,10 +92,16 @@
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
- animate button to download more objects in folder list when 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)
- list linked documents on the ViewDocument page in the way as in other document lists
- list linked documents on the ViewDocument page in the same way as in other document lists
- fix 2-factor authentification
- configuration variables in extension of type 'select' may have an empty option
- default position of documents/folders can be set in configuration (Closes #381)
- attribute values can be deleted from all folders, documents
- new settings to disallow upload of documents with just a reviewer in traditional
workflow mode
--------------------------------------------------------------------------------
Changes in version 5.1.5
@ -268,6 +283,8 @@
--------------------------------------------------------------------------------
- fix label in password forgotten form (Closes #346)
- translation updates
- search result contains documents without a status log
- fix setting categories in utils/adddoc.php
--------------------------------------------------------------------------------
Changes in version 4.3.36

View File

@ -1,4 +1,4 @@
VERSION=6.0.3
VERSION=6.0.5
SRC=CHANGELOG inc conf utils index.php languages views op out controllers doc styles TODO LICENSE webdav install restapi pdfviewer
# webapp

View File

@ -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);

View File

@ -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;
}
} /* }}} */
?>
} /* }}} */

View File

@ -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,19 +65,18 @@ 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;
@ -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
*/
@ -411,6 +416,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
* @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;
@ -474,11 +480,12 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
/**
* 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();
@ -504,11 +511,12 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
/**
* 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();
@ -531,9 +539,10 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
/**
* 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();
@ -636,9 +645,10 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
/**
* Get the n'th value of a value set
*
* @param interger $index
* @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) {
@ -751,11 +761,10 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
* The return value is always an array, even if the attribute is single
* value attribute.
*
* @return array list of single values
* @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,7 +787,7 @@ 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();
@ -913,7 +921,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
} /* }}} */
/**
* Get all documents and folder by a given attribute value
* Get all documents and folders by a given attribute value
*
* @param string $attrvalue value of attribute
* @param integer $limit limit number of documents/folders
@ -924,11 +932,14 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
$result = array('docs'=>array(), 'folders'=>array(), 'contents'=>array());
if($this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_all ||
$this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_document) {
if($this->_multiple)
$queryStr = "SELECT * FROM `tblDocumentAttributes` WHERE `attrdef`=".$this->_id." AND (`value` like ".$db->qstr("%".$this->getValueSetSeparator().$attrvalue.$this->getValueSetSeparator()."%")." OR `value` like ".$db->qstr("%".$this->getValueSetSeparator().$attrvalue).")";
else
$queryStr = "SELECT * FROM `tblDocumentAttributes` WHERE `attrdef`=".$this->_id." AND `value`=".$db->qstr($attrvalue);
$this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_document) {
$queryStr = "SELECT * FROM `tblDocumentAttributes` WHERE `attrdef`=".$this->_id." AND ";
if($this->getMultipleValues()) {
$sep = $this->getValueSetSeparator();
$queryStr .= "(`value` like ".$db->qstr($sep.$attrvalue.'%')." OR `value` like ".$db->qstr('%'.$sep.$attrvalue.$sep.'%')." OR `value` like ".$db->qstr('%'.$sep.$attrvalue).")";
} else {
$queryStr .= "`value`=".$db->qstr($attrvalue);
}
if($limit)
$queryStr .= " limit ".(int) $limit;
$resArr = $db->getResultArray($queryStr);
@ -943,10 +954,13 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
if($this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_all ||
$this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_folder) {
if($this->_multiple)
$queryStr = "SELECT * FROM `tblFolderAttributes` WHERE `attrdef`=".$this->_id." AND (`value` like ".$db->qstr("%".$this->getValueSetSeparator().$attrvalue.$this->getValueSetSeparator()."%")." OR `value` like ".$db->qstr("%".$this->getValueSetSeparator().$attrvalue).")";
else
$queryStr = "SELECT * FROM `tblFolderAttributes` WHERE `attrdef`=".$this->_id." AND `value`=".$db->qstr($attrvalue);
$queryStr = "SELECT * FROM `tblFolderAttributes` WHERE `attrdef`=".$this->_id." AND ";
if($this->getMultipleValues()) {
$sep = $this->getValueSetSeparator();
$queryStr .= "(`value` like ".$db->qstr($sep.$attrvalue.'%')." OR `value` like ".$db->qstr('%'.$sep.$attrvalue.$sep.'%')." OR `value` like ".$db->qstr('%'.$sep.$attrvalue).")";
} else {
$queryStr .= "`value`=".$db->qstr($attrvalue);
}
if($limit)
$queryStr .= " limit ".(int) $limit;
$resArr = $db->getResultArray($queryStr);
@ -962,6 +976,72 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
return $result;
} /* }}} */
/**
* Remove a given attribute value from all documents, versions and folders
*
* @param string $attrvalue value of attribute
* @return array array containing list of documents and folders
*/
public function removeValue($attrvalue) { /* {{{ */
$db = $this->_dms->getDB();
foreach(array('document', 'documentcontent', 'folder') as $type) {
if($type == 'document') {
$tablename = "tblDocumentAttributes";
$objtype = SeedDMS_Core_AttributeDefinition::objtype_document;
} elseif($type == 'documentcontent') {
$tablename = "tblDocumentContentAttributes";
$objtype = SeedDMS_Core_AttributeDefinition::objtype_documentcontent;
} elseif($type == 'folder') {
$tablename = "tblFolderAttributes";
$objtype = SeedDMS_Core_AttributeDefinition::objtype_folder;
}
if($this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_all || $objtype) {
$queryStr = "SELECT * FROM `".$tablename."` WHERE `attrdef`=".$this->_id." AND ";
if($this->getMultipleValues()) {
$sep = $this->getValueSetSeparator();
$queryStr .= "(`value` like ".$db->qstr($sep.$attrvalue.'%')." OR `value` like ".$db->qstr('%'.$sep.$attrvalue.$sep.'%')." OR `value` like ".$db->qstr('%'.$sep.$attrvalue).")";
} else {
$queryStr .= "`value`=".$db->qstr($attrvalue);
}
$resArr = $db->getResultArray($queryStr);
if($resArr) {
$db->startTransaction();
foreach($resArr as $rec) {
if($rec['value'] == $attrvalue) {
$queryStr = "DELETE FROM `".$tablename."` WHERE `id`=".$rec['id'];
} else {
if($this->getMultipleValues()) {
$sep = substr($rec['value'], 0, 1);
$vsep = $this->getValueSetSeparator();
if($sep == $vsep)
$values = explode($sep, substr($rec['value'], 1));
else
$values = array($rec['value']);
if (($key = array_search($attrvalue, $values)) !== false) {
unset($values[$key]);
}
if($values) {
$queryStr = "UPDATE `".$tablename."` SET `value`=".$db->qstr($sep.implode($sep, $values))." WHERE `id`=".$rec['id'];
} else {
$queryStr = "DELETE FROM `".$tablename."` WHERE `id`=".$rec['id'];
}
} else {
}
}
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
}
$db->commitTransaction();
}
}
}
return true;
} /* }}} */
/**
* Validate value against attribute definition
*
@ -1048,7 +1128,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
if(!$success)
$this->_validation_error = 3;
break;
case self::type_boolean:
case self::type_boolean: /** @todo: Same case in LINE 966 */
foreach($values as $value) {
$success &= preg_match('/^[01]$/', $value);
}

View File

@ -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_DatabaseAccess $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
@ -183,6 +183,11 @@ class SeedDMS_Core_DMS {
*/
public $callbacks;
/**
* @var SeedDMS_Core_DMS
*/
public $_dms;
/**
* Checks if two objects are equal by comparing their IDs
@ -216,7 +221,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
*/
@ -309,7 +314,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
@ -413,14 +418,14 @@ class SeedDMS_Core_DMS {
return $tmp;
} /* }}} */
/** @noinspection PhpUndefinedClassInspection */
/**
* Create a new instance of the dms
*
* @param object $db object of class {@link SeedDMS_Core_DatabaseAccess}
* @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
* @return object instance of {@link SeedDMS_Core_DMS}
*/
function __construct($db, $contentDir) { /* {{{ */
$this->db = $db;
@ -448,17 +453,17 @@ class SeedDMS_Core_DMS {
$this->callbacks = array();
$this->version = '@package_version@';
if($this->version[0] == '@')
$this->version = '6.0.3';
$this->version = '6.0.5';
} /* }}} */
/**
* 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
@ -478,9 +483,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
*/
@ -499,7 +504,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;
@ -508,7 +513,7 @@ 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();
@ -555,7 +560,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;
@ -581,7 +586,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;
@ -590,7 +595,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() { /* {{{ */
@ -633,7 +638,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() { /* {{{ */
@ -646,7 +651,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'];
@ -678,7 +683,8 @@ class SeedDMS_Core_DMS {
*
* @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
* @param SeedDMS_Core_User $user
* @return bool|SeedDMS_Core_Document[]
*/
function getDocumentsExpired($date, $user=null) { /* {{{ */
$db = $this->getDB();
@ -726,8 +732,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)
@ -745,7 +751,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;
@ -766,6 +772,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;
@ -780,7 +787,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;
@ -803,6 +810,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;
@ -814,22 +822,11 @@ 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;
$queryStr = "SELECT * FROM `tblDocumentContent` WHERE `id` = ".(int) $id;
$resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
if (count($resArr) != 1)
return false;
$row = $resArr[0];
$document = $this->getDocument($row['document']);
$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']);
return $version;
$classname = $this->classnames['documentcontent'];
return $classname::getInstance($id, $this);
} /* }}} */
/**
@ -968,14 +965,13 @@ class SeedDMS_Core_DMS {
*
* @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
* @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.
* if 'ExpiredOwner' contains the date in days or as 'yyyy-mm-dd'
* @param string $param3 sort list by this field
* @param string $param4 order direction
* @return array list of documents records
* @return array|bool
*/
function getDocumentList($listtype, $param1=null, $param2=false, $param3='', $param4='') { /* {{{ */
/* The following query will get all documents and lots of additional
@ -1413,8 +1409,9 @@ class SeedDMS_Core_DMS {
$orderdir = 'DESC';
else
$orderdir = 'ASC';
/** @noinspection PhpUndefinedConstantInspection */
$queryStr .= "AND `tblDocuments`.`owner` = '".$user->getID()."' ".
"AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_DRAFT_APP.", ".S_IN_REVISION.") ";
"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`";
@ -1722,7 +1719,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
@ -1732,30 +1729,30 @@ 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(), $reception=array()) { /* {{{ */
// Split the search string into constituent keywords.
@ -1817,6 +1814,8 @@ class SeedDMS_Core_DMS {
if($attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_folder || $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_all) {
if($valueset = $attrdef->getValueSet()) {
if($attrdef->getMultipleValues()) {
if(is_string($attribute))
$attribute = array($attribute);
$searchAttributes[] = "EXISTS (SELECT NULL FROM `tblFolderAttributes` WHERE `tblFolderAttributes`.`attrdef`=".$attrdefid." AND (`tblFolderAttributes`.`value` like '%".$valueset[0].implode("%' OR `tblFolderAttributes`.`value` like '%".$valueset[0], $attribute)."%') AND `tblFolderAttributes`.`folder`=`tblFolders`.`id`)";
} else
$searchAttributes[] = "EXISTS (SELECT NULL FROM `tblFolderAttributes` WHERE `tblFolderAttributes`.`attrdef`=".$attrdefid." AND `tblFolderAttributes`.`value`='".$attribute."' AND `tblFolderAttributes`.`folder`=`tblFolders`.`id`)";
@ -1838,6 +1837,7 @@ 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) {
/** @noinspection PhpUndefinedVariableInspection */
if($startdate)
$searchCreateDate .= " AND ";
$searchCreateDate .= "`tblFolders`.`date` <= ".$stopdate;
@ -1899,6 +1899,7 @@ class SeedDMS_Core_DMS {
foreach ($resArr as $folderArr) {
$folders[] = $this->getFolder($folderArr['id']);
}
/** @noinspection PhpUndefinedVariableInspection */
$folderresult = array('totalFolders'=>$totalFolders, 'folders'=>$folders);
}
} else {
@ -1968,6 +1969,8 @@ class SeedDMS_Core_DMS {
if($attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_document || $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_all) {
if($valueset = $attrdef->getValueSet()) {
if($attrdef->getMultipleValues()) {
if(is_string($attribute))
$attribute = array($attribute);
$searchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentAttributes` WHERE `tblDocumentAttributes`.`attrdef`=".$attrdefid." AND (`tblDocumentAttributes`.`value` like '%".$valueset[0].implode("%' OR `tblDocumentAttributes`.`value` like '%".$valueset[0], $attribute)."%') AND `tblDocumentAttributes`.`document` = `tblDocuments`.`id`)";
} else
$searchAttributes[] = "EXISTS (SELECT NULL FROM `tblDocumentAttributes` WHERE `tblDocumentAttributes`.`attrdef`=".$attrdefid." AND `tblDocumentAttributes`.`value`='".$attribute."' AND `tblDocumentAttributes`.`document` = `tblDocuments`.`id`)";
@ -1976,6 +1979,9 @@ class SeedDMS_Core_DMS {
} elseif($attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_documentcontent) {
if($attrdef->getValueSet()) {
if($attrdef->getMultipleValues()) {
/** @noinspection PhpUndefinedVariableInspection */
if(is_string($attribute))
$attribute = array($attribute);
$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)";
@ -2052,22 +2058,23 @@ class SeedDMS_Core_DMS {
}
}
$searchQuery = "FROM `tblDocumentContent` ".
"LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` ".
$searchQuery = "FROM `tblDocuments` ".
"LEFT JOIN `tblDocumentContent` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` ".
"LEFT JOIN `tblDocumentAttributes` ON `tblDocuments`.`id` = `tblDocumentAttributes`.`document` ".
"LEFT JOIN `tblDocumentContentAttributes` ON `tblDocumentContent`.`id` = `tblDocumentContentAttributes`.`content` ".
"LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID` = `tblDocumentContent`.`document` ".
"LEFT JOIN `tblDocumentStatusLog` ON `tblDocumentStatusLog`.`statusID` = `tblDocumentStatus`.`statusID` ".
"LEFT JOIN `ttstatid` ON `ttstatid`.`maxLogID` = `tblDocumentStatusLog`.`statusLogID` ".
"LEFT JOIN `ttstatid` ON `ttstatid`.`statusID` = `tblDocumentStatus`.`statusID` ".
"LEFT JOIN `tblDocumentStatusLog` ON `tblDocumentStatusLog`.`statusLogID` = `ttstatid`.`maxLogID` ".
"LEFT JOIN `ttcontentid` ON `ttcontentid`.`maxVersion` = `tblDocumentStatus`.`version` AND `ttcontentid`.`document` = `tblDocumentStatus`.`documentID` ".
"LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ".
"LEFT JOIN `tblDocumentCategory` ON `tblDocuments`.`id`=`tblDocumentCategory`.`documentID` ".
// "LEFT JOIN `tblDocumentRecipients` ON `tblDocuments`.`id`=`tblDocumentRecipients`.`documentID` ".
// "LEFT JOIN `tblDocumentReceiptLog` ON `tblDocumentRecipients`.`receiptID`=`tblDocumentReceiptLog`.`receiptID` ".
// "LEFT JOIN `ttreceiptid` ON `ttreceiptid`.`maxLogID` = `tblDocumentReceiptLog`.`receiptLogID` ".
"WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ".
// "AND `ttreceiptid`.`maxLogID`=`tblDocumentReceiptLog`.`receiptLogID` ".
"AND `ttcontentid`.`maxVersion` = `tblDocumentContent`.`version`";
"WHERE ".
// "`ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` AND ".
// "`ttreceiptid`.`maxLogID`=`tblDocumentReceiptLog`.`receiptLogID` AND ".
"`ttcontentid`.`maxVersion` = `tblDocumentContent`.`version`";
if (strlen($searchKey)>0) {
$searchQuery .= " AND (".$searchKey.")";
@ -2164,6 +2171,7 @@ class SeedDMS_Core_DMS {
foreach ($resArr as $docArr) {
$docs[] = $this->getDocument($docArr['id']);
}
/** @noinspection PhpUndefinedVariableInspection */
$docresult = array('totalDocs'=>$totalDocs, 'docs'=>$docs);
}
} else {
@ -2191,7 +2199,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'];
@ -2207,8 +2215,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;
@ -2226,6 +2234,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;
@ -2236,7 +2245,7 @@ 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`";
@ -2270,7 +2279,7 @@ 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`";
@ -2316,7 +2325,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'];
@ -2356,7 +2365,9 @@ class SeedDMS_Core_DMS {
/**
* Return list of all users
*
* @return array of instances of {@link SeedDMS_Core_User} or false
* @param string $orderby
* @return array of instances of <a href='psi_element://SeedDMS_Core_User'>SeedDMS_Core_User</a> or false
* or false
*/
function getAllUsers($orderby = '') { /* {{{ */
$classname = $this->classnames['user'];
@ -2368,14 +2379,19 @@ class SeedDMS_Core_DMS {
*
* @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 integer $role role of new user (can be 0=normal, 1=admin, 2=guest)
* @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
* @return object of {@link SeedDMS_Core_User}
* @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;
@ -2403,6 +2419,7 @@ class SeedDMS_Core_DMS {
/* Check if 'onPostAddUser' callback is set */
if(isset($this->_dms->callbacks['onPostAddUser'])) {
foreach($this->_dms->callbacks['onPostUser'] as $callback) {
/** @noinspection PhpStatementHasEmptyBodyInspection */
if(!call_user_func($callback[0], $callback[1], $user)) {
}
}
@ -2415,7 +2432,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'];
@ -2426,7 +2443,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'];
@ -2436,7 +2453,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'];
@ -2448,7 +2465,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) { /* {{{ */
@ -2465,6 +2482,7 @@ class SeedDMS_Core_DMS {
/* Check if 'onPostAddGroup' callback is set */
if(isset($this->_dms->callbacks['onPostAddGroup'])) {
foreach($this->_dms->callbacks['onPostAddGroup'] as $callback) {
/** @noinspection PhpStatementHasEmptyBodyInspection */
if(!call_user_func($callback[0], $callback[1], $group)) {
}
}
@ -2625,6 +2643,8 @@ class SeedDMS_Core_DMS {
/**
* This function should be replaced by getAllKeywordCategories()
* @param $userID
* @return SeedDMS_Core_KeywordCategory[]|bool
*/
function getAllUserKeywordCategories($userID) { /* {{{ */
$queryStr = "SELECT * FROM `tblKeywordCategories`";
@ -2658,6 +2678,7 @@ class SeedDMS_Core_DMS {
/* Check if 'onPostAddKeywordCategory' callback is set */
if(isset($this->_dms->callbacks['onPostAddKeywordCategory'])) {
foreach($this->_dms->callbacks['onPostAddKeywordCategory'] as $callback) {
/** @noinspection PhpStatementHasEmptyBodyInspection */
if(!call_user_func($callback[0], $callback[1], $category)) {
}
}
@ -2704,7 +2725,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;
@ -2734,6 +2755,7 @@ class SeedDMS_Core_DMS {
/* Check if 'onPostAddDocumentCategory' callback is set */
if(isset($this->_dms->callbacks['onPostAddDocumentCategory'])) {
foreach($this->_dms->callbacks['onPostAddDocumentCategory'] as $callback) {
/** @noinspection PhpStatementHasEmptyBodyInspection */
if(!call_user_func($callback[0], $callback[1], $category)) {
}
}
@ -2773,7 +2795,8 @@ class SeedDMS_Core_DMS {
* 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
* @param SeedDMS_Core_User $user
* @return string|boolean hash value of false in case of an error
*/
function createPasswordRequest($user) { /* {{{ */
$hash = md5(uniqid(time()));
@ -2790,6 +2813,7 @@ class SeedDMS_Core_DMS {
* returns the user.
*
* @param string $hash
* @return bool|SeedDMS_Core_User
*/
function checkPasswordRequest($hash) { /* {{{ */
/* Get the password request from the database */
@ -2810,6 +2834,7 @@ class SeedDMS_Core_DMS {
* Delete a password request
*
* @param string $hash
* @return bool
*/
function deletePasswordRequest($hash) { /* {{{ */
/* Delete the request, so nobody can use it a second time */
@ -2826,7 +2851,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))
@ -2851,7 +2876,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;
@ -2873,7 +2898,8 @@ class SeedDMS_Core_DMS {
* 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 bool|SeedDMS_Core_AttributeDefinition[] of instances of <a href='psi_element://SeedDMS_Core_AttributeDefinition'>SeedDMS_Core_AttributeDefinition</a> or false
* or false
*/
function getAllAttributeDefinitions($objtype=0) { /* {{{ */
$queryStr = "SELECT * FROM `tblAttributeDefinitions`";
@ -2889,6 +2915,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++) {
@ -2904,12 +2931,14 @@ class SeedDMS_Core_DMS {
* Add a new attribute definition
*
* @param string $name name of attribute
* @param $objtype
* @param string $type type of attribute
* @param boolean $multiple set to 1 if attribute has multiple attributes
* @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)
* @return object of {@link SeedDMS_Core_User}
* @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))) {
@ -2996,7 +3025,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`";
@ -3015,8 +3044,10 @@ 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++) {
/** @noinspection PhpUndefinedVariableInspection */
$workflow = new SeedDMS_Core_Workflow($resArr[$i]["id"], $resArr[$i]["name"], $wkfstates[$resArr[$i]["initstate"]], $resArr[$i]["layoutdata"]);
$workflow->setDMS($this);
$workflows[$i] = $workflow;
@ -3029,7 +3060,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);
@ -3053,7 +3084,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;
@ -3079,7 +3110,8 @@ class SeedDMS_Core_DMS {
* Add a new workflow
*
* @param string $name name of workflow
* @param string $initstate initial state of workflow
* @param SeedDMS_Core_Workflow_State $initstate initial state of workflow
* @return bool|SeedDMS_Core_Workflow
*/
function addWorkflow($name, $initstate) { /* {{{ */
$db = $this->db;
@ -3100,7 +3132,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))
@ -3123,7 +3155,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;
@ -3148,7 +3180,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`";
@ -3172,7 +3204,7 @@ 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;
@ -3193,7 +3225,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))
@ -3218,7 +3250,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;
@ -3239,7 +3271,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`";
@ -3248,6 +3280,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"]);
@ -3262,7 +3295,7 @@ 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;
@ -3283,7 +3316,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))
@ -3348,6 +3381,8 @@ class SeedDMS_Core_DMS {
* 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`)";
@ -3357,6 +3392,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']);
@ -3372,6 +3408,8 @@ class SeedDMS_Core_DMS {
* 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";
@ -3379,8 +3417,10 @@ class SeedDMS_Core_DMS {
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']);
@ -3396,6 +3436,7 @@ class SeedDMS_Core_DMS {
* 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";
@ -3403,8 +3444,10 @@ class SeedDMS_Core_DMS {
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']);
@ -3420,6 +3463,7 @@ class SeedDMS_Core_DMS {
* 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";
@ -3427,6 +3471,7 @@ class SeedDMS_Core_DMS {
if (!$resArr)
return false;
/** @var SeedDMS_Core_Document[] $versions */
$versions = array();
foreach($resArr as $row) {
$document = $this->getDocument($row['document']);
@ -3447,6 +3492,10 @@ class SeedDMS_Core_DMS {
*
* 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) {
@ -3463,6 +3512,7 @@ class SeedDMS_Core_DMS {
$queryStr = "SELECT a.*, b.`name` FROM `tblDocumentRevisors`";
break;
}
/** @noinspection PhpUndefinedVariableInspection */
$queryStr .= " a LEFT JOIN `tblDocuments` b ON a.`documentID`=b.`id` where";
switch($usergroup) {
case 'user':
@ -3482,6 +3532,10 @@ class SeedDMS_Core_DMS {
* 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
@ -3501,6 +3555,7 @@ class SeedDMS_Core_DMS {
$queryStr = "DELETE FROM tblDocumentRevisors";
break;
}
/** @noinspection PhpUndefinedVariableInspection */
$queryStr .= " WHERE";
switch($usergroup) {
case 'user':
@ -3526,7 +3581,7 @@ 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) {
@ -3552,6 +3607,7 @@ class SeedDMS_Core_DMS {
return $resArr;
case 'docsperstatus':
/** @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);
@ -3602,15 +3658,19 @@ class SeedDMS_Core_DMS {
* 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
* @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." OR `revisiondate` > '".date('Y-m-d H:i:s', $startts)."' AND `revisiondate` < '".date('Y-m-d H:i:s', $endts)."' UNION SELECT DISTINCT document FROM `tblDocumentFiles` WHERE `date` > ".$startts." AND `date` < ".$endts;
@ -3655,6 +3715,7 @@ class SeedDMS_Core_DMS {
* Create an sql dump of the complete database
*
* @param string $filename name of dump file
* @return bool
*/
function createDump($filename) { /* {{{ */
$h = fopen($filename, "w");
@ -3686,4 +3747,3 @@ class SeedDMS_Core_DMS {
} /* }}} */
}
?>

View File

@ -203,7 +203,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;
@ -213,7 +213,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;
@ -222,6 +222,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
*/
protected $_content;
/**
* @var SeedDMS_Core_Folder
*/
protected $_folder;
/** @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) { /* {{{ */
parent::__construct($id);
$this->_name = $name;
@ -245,6 +253,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* 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
@ -278,7 +287,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* Return an document by its id
*
* @param integer $id id of document
* @return object/boolean instance of SeedDMS_Core_Document if document exists, null
* @param SeedDMS_Core_DMS $dms
* @return bool|SeedDMS_Core_Document instance of SeedDMS_Core_Document if document exists, null
* if document does not exist, false in case of error
*/
public static function getInstance($id, $dms) { /* {{{ */
@ -305,12 +315,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
*
@ -325,17 +336,18 @@ 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
* @return bool
*/
function setName($newName) { /* {{{ */
$db = $this->_dms->getDB();
@ -348,17 +360,18 @@ 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
* @return bool
*/
function setComment($newComment) { /* {{{ */
$db = $this->_dms->getDB();
@ -371,8 +384,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();
@ -387,7 +407,7 @@ 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();
@ -412,7 +432,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* This function will delete currently assigned categories and sets new
* categories.
*
* @param array $newCategories list of category objects
* @param SeedDMS_Core_DocumentCategory[] $newCategories list of category objects
* @return bool
*/
function setCategories($newCategories) { /* {{{ */
$db = $this->_dms->getDB();
@ -528,7 +549,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 getParent() { /* {{{ */
return self::getFolder();
@ -546,7 +567,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) { /* {{{ */
@ -556,11 +577,13 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
if (!$db->getResult($queryStr))
return false;
$this->_folderID = $newFolder->getID();
/** @noinspection PhpUndefinedFieldInspection */
$this->_folder = $newFolder;
// Make sure that the folder search path is also updated.
$path = $newFolder->getPath();
$flist = "";
/** @var SeedDMS_Core_Folder[] $path */
foreach ($path as $f) {
$flist .= ":".$f->getID();
}
@ -577,7 +600,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))
@ -588,7 +611,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) { /* {{{ */
@ -621,10 +644,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
$db->commitTransaction();
$this->_ownerID = $newOwner->getID();
/** @noinspection PhpUndefinedFieldInspection */
$this->_owner = $newOwner;
return true;
} /* }}} */
/**
* @return bool|int
*/
function getDefaultAccess() { /* {{{ */
if ($this->inheritsAccess()) {
$res = $this->getFolder();
@ -641,7 +668,8 @@ 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") { /* {{{ */
$db = $this->_dms->getDB();
@ -658,6 +686,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
return true;
} /* }}} */
/**
* @return bool
*/
function inheritsAccess() { return $this->_inheritAccess; }
/**
@ -716,7 +747,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
/**
* Set expiration date as unix timestamp
*
* @param integer unix timestamp of expiration date
* @param integer $expires unix timestamp of expiration date
* @return bool
*/
function setExpires($expires) { /* {{{ */
$db = $this->_dms->getDB();
@ -837,7 +869,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) { /* {{{ */
@ -865,7 +897,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())
@ -1095,8 +1127,15 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
return 0;
} /* }}} */
/**
* @return int
*/
function getSequence() { return $this->_sequence; }
/**
* @param $seq
* @return bool
*/
function setSequence($seq) { /* {{{ */
$db = $this->_dms->getDB();
@ -1143,9 +1182,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* '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
* @param int $mode access mode (defaults to M_ANY)
* @param int|string $op operation (defaults to O_EQ)
* @return bool|array
*/
function getAccessList($mode = M_ANY, $op = O_EQ) { /* {{{ */
$db = $this->_dms->getDB();
@ -1195,6 +1234,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* @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();
@ -1225,6 +1265,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* @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();
@ -1324,6 +1365,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
$accessList = $this->getAccessList();
if (!$accessList) return false;
/** @var SeedDMS_Core_UserAccess $userAccess */
foreach ($accessList["users"] as $userAccess) {
if ($userAccess->getUserID() == $user->getID()) {
$mode = $userAccess->getMode();
@ -1337,6 +1379,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
/* Get the highest right defined by a group */
if($accessList['groups']) {
$mode = 0;
/** @var SeedDMS_Core_GroupAccess $groupAccess */
foreach ($accessList["groups"] as $groupAccess) {
if ($user->isMemberOfGroup($groupAccess->getGroup())) {
if ($groupAccess->getMode() > $mode)
@ -1368,7 +1411,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) { /* {{{ */
@ -1380,6 +1423,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
if (!$accessList)
return false;
/** @var SeedDMS_Core_GroupAccess $groupAccess */
foreach ($accessList["groups"] as $groupAccess) {
if ($groupAccess->getGroupID() == $group->getID()) {
$foundInACL = true;
@ -1405,7 +1449,7 @@ 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)) {
@ -1446,7 +1490,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) {
@ -1526,6 +1572,7 @@ 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;
/** @var SeedDMS_Core_GroupAccess $group */
foreach ($acl["groups"] as $group) {
if ($group->getGroupID() == $userOrGroupID) {
$found = true;
@ -1544,6 +1591,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
return -4;
}
$found = false;
/** @var SeedDMS_Core_GroupAccess $group */
foreach ($acl["groups"] as $group) {
if ($group->getGroupID() == $userOrGroupID) {
$found = true;
@ -1581,10 +1629,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
@ -1594,6 +1642,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;
@ -1670,7 +1719,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
* must be the id of the attribute definition.
* @param object $workflow
* @param integer $initstate intial document status
* @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, $initstate=S_RELEASED) { /* {{{ */
$db = $this->_dms->getDB();
@ -1720,7 +1769,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);
@ -1757,7 +1806,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) {
@ -1775,7 +1825,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) {
@ -1816,7 +1867,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;
@ -1854,7 +1906,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'];
@ -1909,7 +1961,7 @@ 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();
@ -1917,13 +1969,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
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'], $row['revisiondate']);
if($user) {
if($content->getAccessMode($user) >= M_READ)
@ -1945,7 +1998,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) { /* {{{ */
@ -1962,13 +2015,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'], $resArr['revisiondate'])) {
$user = $this->_dms->getLoggedInUser();
/* A user with write access on the document may always see the version */
@ -1981,6 +2035,9 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
}
} /* }}} */
/**
* @return bool|null|SeedDMS_Core_DocumentContent
*/
function __getLatestContent() { /* {{{ */
if (!$this->_latestContent) {
$db = $this->_dms->getDB();
@ -2009,19 +2066,20 @@ 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) {
/** @var SeedDMS_Core_DocumentContent $content */
if (!$this->_latestContent) {
$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'], $row['revisiondate']);
if($user) {
@ -2044,7 +2102,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) { /* {{{ */
@ -2238,7 +2296,8 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */
/**
* Call callback onPreRemoveDocument before deleting content
*
* @param integer $version version number of content
* @param SeedDMS_Core_DocumentContent $version version number of content
* @return bool|mixed
*/
function removeContent($version) { /* {{{ */
/* Check if 'onPreRemoveDocument' callback is set */
@ -2269,7 +2328,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) { /* {{{ */
@ -3061,6 +3120,40 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */
$this->_revisionDate = $revisionDate;
} /* }}} */
/**
* Return an document content by its id
*
* @param integer $id id of document
* @param SeedDMS_Core_DMS $dms
* @return bool|SeedDMS_Core_DocumentContent instance of SeedDMS_Core_DocumentContent
* if document content exists, null if document does not exist, false in case of error
*/
public static function getInstance($id, $dms) { /* {{{ */
$db = $dms->getDB();
$queryStr = "SELECT * FROM `tblDocumentContent` WHERE `id` = " . (int) $id;
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
if (count($resArr) != 1)
return null;
$row = $resArr[0];
$classname = $dms->getClassname('documentcontent');
$user = $dms->getLoggedInUser();
$document = $dms->getDocument($row['document']);
$document->setDMS($dms);
/** @var SeedDMS_Core_DocumentContent $documentcontent */
$content = new $classname($row["id"], $document, $row["version"], $row["comment"], $row["date"], $row["createdBy"], $row["dir"], $row["orgFileName"], $row["fileType"], $row["mimeType"], $row['fileSize'], $row['checksum'], $row['revisiondate']);
if($user) {
if($content->getAccessMode($user) >= M_READ)
return $content;
} else {
return $content;
}
return null;
} /* }}} */
function getVersion() { return $this->_version; }
function getComment() { return $this->_comment; }
function getDate() { return $this->_date; }
@ -3835,6 +3928,9 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */
* of records and join the other tables. ttreceiptid join tblDocumentRecipients
* is faster than tblDocumentRecipients join ttreceiptid
*/
if (!$db->createTemporaryTable("ttreceiptid")) {
return false;
}
$queryStr=
"SELECT `tblDocumentRecipients`.*, `tblDocumentReceiptLog`.`receiptLogID`, `tblDocumentReceiptLog`.`status`, `tblDocumentReceiptLog`.`comment`, `tblDocumentReceiptLog`.`date`, `tblDocumentReceiptLog`.`userID`, `tblUsers`.`fullName`, `tblGroups`.`name` FROM `ttreceiptid` LEFT JOIN `tblDocumentRecipients` ON `tblDocumentRecipients`.`receiptID`=`ttreceiptid`.`receiptID` LEFT JOIN `tblDocumentReceiptLog` ON `ttreceiptid`.`maxLogID`=`tblDocumentReceiptLog`.`receiptLogID` LEFT JOIN `tblUsers` ON `tblDocumentRecipients`.`required`=`tblUsers`.`id` LEFT JOIN `tblGroups` ON `tblDocumentRecipients`.`required`=`tblGroups`.`id` WHERE `version`='".$this->_version
."' AND `documentID` = '". $this->_document->getID() ."' ";
@ -4226,7 +4322,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */
return 0;
$queryStr = "INSERT INTO `tblDocumentReviewLog` (`reviewID`, `status`,
`comment`, `date`, `userID`) ".
`comment`, `date`, `userID`) ".
"VALUES ('". $indstatus["reviewID"] ."', '".
(int) $status ."', ".$db->qstr($comment).", ".$db->getCurrentDatetime().", '".
$requestUser->getID() ."')";
@ -4278,7 +4374,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */
return 0;
$queryStr = "INSERT INTO `tblDocumentReviewLog` (`reviewID`, `status`,
`comment`, `date`, `userID`) ".
`comment`, `date`, `userID`) ".
"VALUES ('". $reviewStatus[0]["reviewID"] ."', '".
(int) $status ."', ".$db->qstr($comment).", ".$db->getCurrentDatetime().", '".
$requestUser->getID() ."')";
@ -4448,7 +4544,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */
return 0;
$queryStr = "INSERT INTO `tblDocumentApproveLog` (`approveID`, `status`,
`comment`, `date`, `userID`) ".
`comment`, `date`, `userID`) ".
"VALUES ('". $indstatus["approveID"] ."', '".
(int) $status ."', ".$db->qstr($comment).", ".$db->getCurrentDatetime().", '".
$requestUser->getID() ."')";
@ -4492,7 +4588,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */
return 0;
$queryStr = "INSERT INTO `tblDocumentApproveLog` (`approveID`, `status`,
`comment`, `date`, `userID`) ".
`comment`, `date`, `userID`) ".
"VALUES ('". $approvalStatus[0]["approveID"] ."', '".
(int) $status ."', ".$db->qstr($comment).", ".$db->getCurrentDatetime().", '".
$requestUser->getID() ."')";
@ -6086,7 +6182,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;
@ -6105,6 +6201,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;
@ -6113,22 +6217,37 @@ 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; }
/**
@ -6139,8 +6258,10 @@ class SeedDMS_Core_DocumentLink { /* {{{ */
* 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
* @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;
@ -6183,7 +6304,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;
@ -6240,6 +6361,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;
@ -6255,15 +6391,30 @@ 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; }
/*
* Set the comment of the document file
*
* @param $newComment string new comment of document
* @param string $newComment string new comment of document
*/
function setComment($newComment) { /* {{{ */
$db = $this->_document->_dms->getDB();
@ -6276,6 +6427,9 @@ class SeedDMS_Core_DocumentFile { /* {{{ */
return true;
} /* }}} */
/**
* @return string
*/
function getDate() { return $this->_date; }
/**
@ -6302,10 +6456,29 @@ class SeedDMS_Core_DocumentFile { /* {{{ */
return true;
} /* }}} */
/**
* @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; }
/*
@ -6324,16 +6497,25 @@ class SeedDMS_Core_DocumentFile { /* {{{ */
return true;
} /* }}} */
/**
* @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; }
/*
@ -6355,6 +6537,9 @@ class SeedDMS_Core_DocumentFile { /* {{{ */
return true;
} /* }}} */
/**
* @return int
*/
function isPublic() { return $this->_public; }
/*
@ -6421,18 +6606,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;
@ -6443,7 +6655,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
@ -6451,12 +6663,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;
@ -6484,6 +6702,12 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */
return true;
} /* }}} */
/**
* @param $approver
* @param $type
* @param $status
* @return bool
*/
function addApprover($approver, $type, $status) { /* {{{ */
$dms = $this->_dms;
@ -6511,6 +6735,10 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */
return true;
} /* }}} */
/**
* @param $status
* @return bool
*/
function setStatus($status) { /* {{{ */
if (!is_integer($status)) {
return false;
@ -6522,14 +6750,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;
@ -6542,6 +6780,10 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */
}
} /* }}} */
/**
* @param $type
* @return array|bool|null
*/
function getApprovers($type) { /* {{{ */
if (strcasecmp($type, "i") && strcasecmp($type, "g")) {
return false;
@ -6554,4 +6796,3 @@ class SeedDMS_Core_AddContentResultSet { /* {{{ */
}
} /* }}} */
} /* }}} */
?>

View File

@ -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;
@ -91,6 +133,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* 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
@ -129,7 +172,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* Return a folder by its id
*
* @param integer $id id of folder
* @return object/boolean instance of SeedDMS_Core_Folder if document exists, null
* @param SeedDMS_Core_DMS $dms
* @return SeedDMS_Core_Folder|bool instance of SeedDMS_Core_Folder if document exists, null
* if document does not exist, false in case of error
*/
public static function getInstance($id, $dms) { /* {{{ */
@ -144,22 +188,24 @@ 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
* @return bool
*/
public function setName($newName) { /* {{{ */
$db = $this->_dms->getDB();
@ -173,8 +219,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();
@ -222,7 +275,7 @@ 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)) {
@ -239,10 +292,10 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* Check if the folder is subfolder
*
* This function checks if the passed folder is a subfolder of the current
* folder.
* folder.
*
* @param object $subFolder potential sub folder
* @return boolean true if passes folder is a subfolder
* @param SeedDMS_Core_Folder $subfolder
* @return bool true if passes folder is a subfolder
*/
function isSubFolder($subfolder) { /* {{{ */
$target_path = $subfolder->getPath();
@ -259,7 +312,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) { /* {{{ */
@ -313,6 +366,7 @@ 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"]."'";
/** @noinspection PhpUnusedLocalVariableInspection */
$res = $db->getResult($queryStr);
}
@ -325,6 +379,7 @@ 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"]."'";
/** @noinspection PhpUnusedLocalVariableInspection */
$res = $db->getResult($queryStr);
}
@ -345,7 +400,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) { /* {{{ */
@ -360,6 +415,9 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return true;
} /* }}} */
/**
* @return bool|int
*/
function getDefaultAccess() { /* {{{ */
if ($this->inheritsAccess()) {
$res = $this->getParent();
@ -378,6 +436,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
*
* @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();
@ -450,7 +509,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);
@ -471,7 +531,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @param string $dir direction of sorting (asc or desc)
* @param integer $limit limit number of subfolders
* @param integer $offset offset in retrieved list of subfolders
* @return array list of folder objects or false in case of an error
* @return SeedDMS_Core_Folder[]|bool list of folder objects or false in case of an error
*/
function getSubFolders($orderby="", $dir="asc", $limit=0, $offset=0) { /* {{{ */
$db = $this->_dms->getDB();
@ -511,7 +571,7 @@ 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
* @return bool|SeedDMS_Core_Folder
* an error.
*/
function addSubFolder($name, $comment, $owner, $sequence, $attributes=array()) { /* {{{ */
@ -554,7 +614,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)) {
}
}
}
@ -566,7 +627,7 @@ 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)) {
@ -632,7 +693,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);
@ -645,12 +707,14 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
/**
* Check if folder has document with given name
*
* @return boolean true if document exists, false if not or in case
* @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)) {
/** @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);
@ -672,7 +736,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @param string $dir direction of sorting (asc or desc)
* @param integer $limit limit number of documents
* @param integer $offset offset in retrieved list of documents
* @return array list of documents or false in case of an error
* @return SeedDMS_Core_Document[]|bool list of documents or false in case of an error
*/
function getDocuments($orderby="", $dir="asc", $limit=0, $offset=0) { /* {{{ */
$db = $this->_dms->getDB();
@ -718,13 +782,14 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* 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 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 array with four elements 'document_count', 'folder_count'
* @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.
* 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();
@ -794,7 +859,7 @@ 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.
* 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.
*
@ -803,8 +868,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @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 SeedDMS_Core_User $keywords keywords of new document
* @param SeedDMS_Core_DocumentCategory[] $categories list of category objects
* @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
@ -812,19 +877,19 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @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 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 object $workflow
* @param SeedDMS_Core_Workflow $workflow
* @param integer $initstate initial document state (only S_RELEASED and
* S_DRAFT are allowed)
* @return array/boolean false in case of error, otherwise an array
* @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.
* 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, $initstate=S_RELEASED) { /* {{{ */
$db = $this->_dms->getDB();
@ -882,7 +947,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)) {
}
}
}
@ -946,7 +1012,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)) {
}
}
}
@ -962,6 +1029,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @return boolean true on success, false in case of an error
*/
function remove() { /* {{{ */
/** @noinspection PhpUnusedLocalVariableInspection */
$db = $this->_dms->getDB();
// Do not delete the root folder.
@ -1008,7 +1076,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
*
* @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
* @return bool|SeedDMS_Core_GroupAccess|SeedDMS_Core_UserAccess
*/
function getAccessList($mode = M_ANY, $op = O_EQ) { /* {{{ */
$db = $this->_dms->getDB();
@ -1079,6 +1147,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @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();
@ -1109,6 +1178,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* @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();
@ -1129,6 +1199,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();
@ -1185,6 +1260,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
$accessList = $this->getAccessList();
if (!$accessList) return false;
/** @var SeedDMS_Core_UserAccess $userAccess */
foreach ($accessList["users"] as $userAccess) {
if ($userAccess->getUserID() == $user->getID()) {
$mode = $userAccess->getMode();
@ -1198,6 +1274,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
/* Get the highest right defined by a group */
if($accessList['groups']) {
$mode = 0;
/** @var SeedDMS_Core_GroupAccess $groupAccess */
foreach ($accessList["groups"] as $groupAccess) {
if ($user->isMemberOfGroup($groupAccess->getGroup())) {
if ($groupAccess->getMode() > $mode)
@ -1225,7 +1302,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) { /* {{{ */
@ -1235,6 +1312,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
if (!$accessList)
return false;
/** @var SeedDMS_Core_GroupAccess $groupAccess */
foreach ($accessList["groups"] as $groupAccess) {
if ($groupAccess->getGroupID() == $group->getID()) {
$foundInACL = true;
@ -1251,13 +1329,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) { /* {{{ */
@ -1299,6 +1378,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) {
@ -1306,6 +1386,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);
@ -1313,7 +1395,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
@ -1334,6 +1416,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;
@ -1383,6 +1466,7 @@ 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;
/** @var SeedDMS_Core_GroupAccess $group */
foreach ($acl["groups"] as $group) {
if ($group->getGroupID() == $userOrGroupID) {
$found = true;
@ -1401,6 +1485,7 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return -4;
}
$found = false;
/** @var SeedDMS_Core_GroupAccess $group */
foreach ($acl["groups"] as $group) {
if ($group->getGroupID() == $userOrGroupID) {
$found = true;
@ -1434,7 +1519,7 @@ 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
@ -1442,12 +1527,12 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
*
* @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
* @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.
* -3: User is not subscribed.
* -4: Database / internal error.
* 0: Update successful.
*/
function removeNotify($userOrGroupID, $isUser, $type=0) { /* {{{ */
$db = $this->_dms->getDB();
@ -1527,9 +1612,8 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
* 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
*
* @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) { /* {{{ */
@ -1557,9 +1641,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;
@ -1698,7 +1785,6 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
return true;
} /* }}} */
/**
* Get a list of all assigned attribute defintion groups
*
@ -1817,6 +1903,23 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
unset($this->_attrdefgrpList);
return 0;
} /* }}} */
/**
* Get the min and max sequence value for documents
*
* @return bool|array array with keys 'min' and 'max', false in case of an error
*/
function getDocumentsMinMax() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT min(`sequence`) AS `min`, max(`sequence`) AS `max` FROM `tblDocuments` WHERE `folder` = " . (int) $this->_id;
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
return $resArr[0];
} /* }}} */
}
?>

View File

@ -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,11 +67,11 @@ 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 if group was found, null
* if group was not found, false in case of error
* @return SeedDMS_Core_Group|bool instance of class SeedDMS_Core_Group if group was
* found, null if group was not found, false in case of error
*/
public static function getInstance($id, $dms, $by='') { /* {{{ */
$db = $dms->getDB();
@ -92,6 +97,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();
@ -114,14 +124,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();
@ -133,8 +156,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();
@ -146,6 +176,9 @@ class SeedDMS_Core_Group { /* {{{ */
return true;
} /* }}} */
/**
* @return SeedDMS_Core_User[]|bool
*/
function getUsers() { /* {{{ */
$db = $this->_dms->getDB();
@ -162,6 +195,7 @@ class SeedDMS_Core_Group { /* {{{ */
$classnamerole = $this->_dms->getClassname('role');
$classname = $this->_dms->getClassname('user');
foreach ($resArr as $row) {
/** @var SeedDMS_Core_User $user */
$role = $classnamerole::getInstance($row['role'], $this->_dms);
$user = new $classname($row["id"], $row["login"], $row["pwd"], $row["fullName"], $row["email"], $row["language"], $row["theme"], $row["comment"], $role, $row['hidden']);
$user->setDMS($this->_dms);
@ -171,6 +205,9 @@ class SeedDMS_Core_Group { /* {{{ */
return $this->_users;
} /* }}} */
/**
* @return SeedDMS_Core_User[]|bool
*/
function getManagers() { /* {{{ */
$db = $this->_dms->getDB();
@ -185,12 +222,18 @@ class SeedDMS_Core_Group { /* {{{ */
$classname = $this->_dms->getClassname('user');
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();
@ -203,6 +246,10 @@ class SeedDMS_Core_Group { /* {{{ */
return true;
} /* }}} */
/**
* @param SeedDMS_Core_User $user
* @return bool
*/
function removeUser($user) { /* {{{ */
$db = $this->_dms->getDB();
@ -217,7 +264,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
@ -245,7 +292,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) { /* {{{ */
@ -265,7 +312,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
*/
@ -504,7 +551,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();
@ -531,7 +578,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();
@ -556,4 +603,3 @@ class SeedDMS_Core_Group { /* {{{ */
} /* }}} */
} /* }}} */
?>

View File

@ -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;
}
}
?>

View File

@ -34,16 +34,20 @@ 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;
/**
* 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
@ -67,8 +71,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 +106,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 +129,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 +160,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 +190,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 +209,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 +262,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 +293,3 @@ class SeedDMS_Core_Object { /* {{{ */
return true;
} /* }}} */
} /* }}} */
?>

View File

@ -341,7 +341,7 @@ class SeedDMS_Core_User { /* {{{ */
var $_loginFailures;
/**
* @var object home folder
* @var SeedDMS_Core_Folder home folder
*
* @access protected
*/
@ -362,16 +362,45 @@ class SeedDMS_Core_User { /* {{{ */
var $_rev_substitutes;
/**
* @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
* @param string $secret
*/
function __construct($id, $login, $pwd, $fullName, $email, $language, $theme, $comment, $role, $isHidden=0, $isDisabled=0, $pwdExpiration='', $loginFailures=0, $quota=0, $homeFolder=null, $secret='') {
$this->_id = $id;
$this->_login = $login;
@ -399,13 +428,13 @@ 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 if user was found, null
* if user was not found, false in case of error
* @return SeedDMS_Core_User|bool instance of class SeedDMS_Core_User if user was
* found, null if user was not found, false in case of error
*/
public static function getInstance($id, $dms, $by='', $email='') { /* {{{ */
$db = $dms->getDB();
@ -437,6 +466,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();
@ -453,6 +487,7 @@ class SeedDMS_Core_User { /* {{{ */
$classname = $dms->getClassname('role');
for ($i = 0; $i < count($resArr); $i++) {
/** @var SeedDMS_Core_User $user */
$role = $classname::getInstance($resArr[$i]['role'], $dms);
$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"], $role, $resArr[$i]["hidden"], $resArr[$i]["disabled"], $resArr[$i]["pwdExpiration"], $resArr[$i]["loginfailures"], $resArr[$i]["quota"], $resArr[$i]["homefolder"]);
$user->setDMS($dms);
@ -462,14 +497,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();
@ -482,8 +530,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();
@ -496,8 +551,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();
@ -510,8 +572,14 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return string
*/
function getSecret() { return $this->_secret; }
/**
* @param string $newSecret
*/
function setSecret($newSecret) { /* {{{ */
$db = $this->_dms->getDB();
@ -524,8 +592,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();
@ -543,8 +618,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();
@ -557,8 +639,15 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return string
*/
function getLanguage() { return $this->_language; }
/**
* @param $newLanguage
* @return bool
*/
function setLanguage($newLanguage) { /* {{{ */
$db = $this->_dms->getDB();
@ -571,8 +660,15 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return string
*/
function getTheme() { return $this->_theme; }
/**
* @param string $newTheme
* @return bool
*/
function setTheme($newTheme) { /* {{{ */
$db = $this->_dms->getDB();
@ -585,8 +681,15 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return string
*/
function getComment() { return $this->_comment; }
/**
* @param $newComment
* @return bool
*/
function setComment($newComment) { /* {{{ */
$db = $this->_dms->getDB();
@ -599,8 +702,15 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return string
*/
function getRole() { return $this->_role; }
/**
* @param $newrole
* @return bool
*/
function setRole($newrole) { /* {{{ */
$db = $this->_dms->getDB();
@ -615,6 +725,9 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return bool
*/
function isAdmin() { return (is_object($this->_role) ? $this->_role->isAdmin() : $this->_role == SeedDMS_Core_User::role_admin); }
/**
@ -631,6 +744,9 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return bool
*/
function isGuest() { return (is_object($this->_role) ? $this->_role->isGuest() : $this->_role == SeedDMS_Core_User::role_guest); }
/**
@ -647,8 +763,15 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return bool|int
*/
function isHidden() { return $this->_isHidden; }
/**
* @param $isHidden
* @return bool
*/
function setHidden($isHidden) { /* {{{ */
$db = $this->_dms->getDB();
@ -661,8 +784,15 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return bool|int
*/
function isDisabled() { return $this->_isDisabled; }
/**
* @param $isDisabled
* @return bool
*/
function setDisabled($isDisabled) { /* {{{ */
$db = $this->_dms->getDB();
@ -675,6 +805,9 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return bool|int
*/
function addLoginFailure() { /* {{{ */
$db = $this->_dms->getDB();
@ -686,6 +819,9 @@ class SeedDMS_Core_User { /* {{{ */
return $this->_loginFailures;
} /* }}} */
/**
* @return bool
*/
function clearLoginFailures() { /* {{{ */
$db = $this->_dms->getDB();
@ -716,8 +852,15 @@ class SeedDMS_Core_User { /* {{{ */
return $resArr[0]['sum'];
} /* }}} */
/**
* @return int
*/
function getQuota() { return $this->_quota; }
/**
* @param $quota
* @return bool
*/
function setQuota($quota) { /* {{{ */
$db = $this->_dms->getDB();
@ -730,8 +873,15 @@ class SeedDMS_Core_User { /* {{{ */
return true;
} /* }}} */
/**
* @return null|SeedDMS_Core_Folder
*/
function getHomeFolder() { return $this->_homeFolder; }
/**
* @param $homefolder
* @return bool
*/
function setHomeFolder($homefolder) { /* {{{ */
$db = $this->_dms->getDB();
@ -949,9 +1099,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
*/
@ -964,8 +1114,9 @@ class SeedDMS_Core_User { /* {{{ */
* anymore.
*/
if(!$assignToUser)
return;
$assignTo = $assignToUser->getID();
return false;
/** @noinspection PhpUnusedLocalVariableInspection */
$assignTo = $assignToUser->getID();
$db->startTransaction();
@ -1121,7 +1272,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
*/
@ -1141,7 +1292,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
*/
@ -1159,7 +1310,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();
@ -1176,6 +1327,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);
@ -1187,7 +1339,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) { /* {{{ */
@ -1218,7 +1370,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();
@ -1233,6 +1385,11 @@ class SeedDMS_Core_User { /* {{{ */
return $resArr;
} /* }}} */
/**
* @param $tmpfile
* @param $mimeType
* @return bool
*/
function setImage($tmpfile, $mimeType) { /* {{{ */
$db = $this->_dms->getDB();
@ -1254,9 +1411,7 @@ class SeedDMS_Core_User { /* {{{ */
/**
* Returns all documents of a given user
*
* @param object $user
* @return array list of documents
* @return SeedDMS_Core_Document[]|bool list of documents
*/
function getDocuments() { /* {{{ */
$db = $this->_dms->getDB();
@ -1273,6 +1428,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;
@ -1283,8 +1439,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();
@ -1301,6 +1456,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;
@ -1354,7 +1510,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();
@ -1450,7 +1606,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();
@ -1460,7 +1616,7 @@ class SeedDMS_Core_User { /* {{{ */
* latest version. This may be needed here too.
*/
$queryStr =
"SELECT `tblDocumentApprovers`.*, `tblDocumentApproveLog`.`status`, ".
"SELECT `tblDocumentApprovers`.*, `tblDocumentApproveLog`.`status`, ".
"`tblDocumentApproveLog`.`comment`, `tblDocumentApproveLog`.`date`, ".
"`tblDocumentApproveLog`.`userID` ".
"FROM `tblDocumentApprovers` ".
@ -1702,7 +1858,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();
@ -1744,7 +1900,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();
@ -1804,7 +1960,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();
@ -1827,7 +1983,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();
@ -1851,7 +2007,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();
@ -1874,7 +2030,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();
@ -1925,6 +2081,7 @@ class SeedDMS_Core_User { /* {{{ */
if (is_bool($resArr) && !$resArr) return false;
}
return false;
} /* }}} */
/**
@ -1942,7 +2099,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);
@ -1952,12 +2109,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;
} /* }}} */
/**
@ -1972,18 +2131,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) { /* {{{ */
@ -2209,7 +2370,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();
@ -2236,7 +2397,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();
@ -2258,4 +2419,3 @@ class SeedDMS_Core_User { /* {{{ */
} /* }}} */
} /* }}} */
?>

View File

@ -29,14 +29,14 @@ 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
*/
@ -50,19 +50,26 @@ class SeedDMS_Core_Workflow { /* {{{ */
var $_layoutdata;
/**
* @var name of the workflow state
* @var SeedDMS_Core_Workflow_Transition[] list of transitions
*
* @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
* @param string $layoutdata
*/
function __construct($id, $name, $initstate, $layoutdata) { /* {{{ */
$this->_id = $id;
$this->_name = $name;
@ -72,14 +79,27 @@ class SeedDMS_Core_Workflow { /* {{{ */
$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; }
/**
* @param $newName
* @return bool
*/
function setName($newName) { /* {{{ */
$db = $this->_dms->getDB();
@ -92,8 +112,15 @@ class SeedDMS_Core_Workflow { /* {{{ */
return true;
} /* }}} */
/**
* @return SeedDMS_Core_Workflow_State
*/
function getInitState() { return $this->_initstate; }
/**
* @param SeedDMS_Core_Workflow_State $state
* @return bool
*/
function setInitState($state) { /* {{{ */
$db = $this->_dms->getDB();
@ -106,8 +133,14 @@ class SeedDMS_Core_Workflow { /* {{{ */
return true;
} /* }}} */
/**
* @return string
*/
function getLayoutData() { return $this->_layoutdata; }
/**
* @param string $layoutdata
*/
function setLayoutData($newdata) { /* {{{ */
$db = $this->_dms->getDB();
@ -120,6 +153,9 @@ class SeedDMS_Core_Workflow { /* {{{ */
return true;
} /* }}} */
/**
* @return SeedDMS_Core_Workflow_Transition[]|bool
*/
function getTransitions() { /* {{{ */
$db = $this->_dms->getDB();
@ -143,7 +179,11 @@ class SeedDMS_Core_Workflow { /* {{{ */
return $this->_transitions;
} /* }}} */
/**
* @return array
*/
function getStates() { /* {{{ */
/** @noinspection PhpUnusedLocalVariableInspection */
$db = $this->_dms->getDB();
if(!$this->_transitions)
@ -164,9 +204,10 @@ class SeedDMS_Core_Workflow { /* {{{ */
* Get the transition by its id
*
* @param integer $id id of transition
* @param object transition
* @return bool|SeedDMS_Core_Workflow_Transition
*/
function getTransition($id) { /* {{{ */
/** @noinspection PhpUnusedLocalVariableInspection */
$db = $this->_dms->getDB();
if(!$this->_transitions)
@ -181,8 +222,8 @@ class SeedDMS_Core_Workflow { /* {{{ */
/**
* Get the transitions that can be triggered while being in the given state
*
* @param object $state current workflow state
* @param array list of transitions
* @param SeedDMS_Core_Workflow_State $state current workflow state
* @return SeedDMS_Core_Workflow_Transition[]|bool
*/
function getNextTransitions($state) { /* {{{ */
$db = $this->_dms->getDB();
@ -205,8 +246,8 @@ class SeedDMS_Core_Workflow { /* {{{ */
/**
* Get the transitions that lead to the given state
*
* @param object $state current workflow state
* @param array list of transitions
* @param SeedDMS_Core_Workflow_State $state current workflow state
* @return SeedDMS_Core_Workflow_Transition[]|bool
*/
function getPreviousTransitions($state) { /* {{{ */
$db = $this->_dms->getDB();
@ -229,9 +270,9 @@ class SeedDMS_Core_Workflow { /* {{{ */
/**
* 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
* @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();
@ -255,7 +296,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) { /* {{{ */
@ -265,12 +306,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();
@ -323,6 +364,10 @@ class SeedDMS_Core_Workflow { /* {{{ */
return true;
} /* }}} */
/**
* @param SeedDMS_Core_Workflow_State[] $laststates
* @return SeedDMS_Core_Workflow_State[]|bool
*/
private function penetrate($laststates) {
$state = end($laststates);
$transitions = $this->getNextTransitions($state);
@ -345,6 +390,7 @@ class SeedDMS_Core_Workflow { /* {{{ */
* @return boolean list of states if workflow contains cycles, otherwise false
*/
function checkForCycles() { /* {{{ */
/** @noinspection PhpUnusedLocalVariableInspection */
$db = $this->_dms->getDB();
$initstate = $this->getInitState();
@ -411,40 +457,48 @@ 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;
/**
* 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;
@ -454,14 +508,27 @@ class SeedDMS_Core_Workflow_State { /* {{{ */
$this->_dms = null;
}
/**
* @param $dms
*/
function setDMS($dms) {
$this->_dms = $dms;
}
/**
* @return int
*/
function getID() { return $this->_id; }
/**
* @return string
*/
function getName() { return $this->_name; }
/**
* @param string $newName
* @return bool
*/
function setName($newName) { /* {{{ */
$db = $this->_dms->getDB();
@ -474,8 +541,15 @@ class SeedDMS_Core_Workflow_State { /* {{{ */
return true;
} /* }}} */
/**
* @return int maximum
*/
function getMaxTime() { return $this->_maxtime; }
/**
* @param $maxtime
* @return bool
*/
function setMaxTime($maxtime) { /* {{{ */
$db = $this->_dms->getDB();
@ -488,8 +562,15 @@ class SeedDMS_Core_Workflow_State { /* {{{ */
return true;
} /* }}} */
/**
* @return int maximum
*/
function getPreCondFunc() { return $this->_precondfunc; }
/**
* @param $precondfunc
* @return bool
*/
function setPreCondFunc($precondfunc) { /* {{{ */
$db = $this->_dms->getDB();
@ -498,7 +579,8 @@ class SeedDMS_Core_Workflow_State { /* {{{ */
if (!$res)
return false;
$this->_maxtime = $maxtime;
/** @noinspection PhpUndefinedVariableInspection */
$this->_maxtime = $maxtime; /* @todo fix me */
return true;
} /* }}} */
@ -512,6 +594,10 @@ class SeedDMS_Core_Workflow_State { /* {{{ */
*/
function getDocumentStatus() { return $this->_documentstatus; }
/**
* @param $docstatus
* @return bool
*/
function setDocumentStatus($docstatus) { /* {{{ */
$db = $this->_dms->getDB();
@ -542,7 +628,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();
@ -608,33 +694,51 @@ 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;
/**
* SeedDMS_Core_Workflow_Action constructor.
* @param $id
* @param $name
*/
function __construct($id, $name) {
$this->_id = $id;
$this->_name = $name;
$this->_dms = null;
}
/**
* @param $dms
*/
function setDMS($dms) {
$this->_dms = $dms;
}
/**
* @return int
*/
function getID() { return $this->_id; }
/**
* @return string name
*/
function getName() { return $this->_name; }
/**
* @param $newName
* @return bool
*/
function setName($newName) { /* {{{ */
$db = $this->_dms->getDB();
@ -665,7 +769,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();
@ -731,61 +835,70 @@ 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;
/**
* 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;
@ -796,14 +909,27 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */
$this->_dms = null;
}
/**
* @param $dms
*/
function setDMS($dms) {
$this->_dms = $dms;
}
/**
* @return int
*/
function getID() { return $this->_id; }
/**
* @return SeedDMS_Core_Workflow
*/
function getWorkflow() { return $this->_workflow; }
/**
* @param SeedDMS_Core_Workflow $newWorkflow
* @return bool
*/
function setWorkflow($newWorkflow) { /* {{{ */
$db = $this->_dms->getDB();
@ -816,8 +942,16 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */
return true;
} /* }}} */
/**
* @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();
@ -830,8 +964,15 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */
return true;
} /* }}} */
/**
* @return SeedDMS_Core_Workflow_State
*/
function getNextState() { return $this->_nextstate; }
/**
* @param SeedDMS_Core_Workflow_State $newNextState
* @return bool
*/
function setNextState($newNextState) { /* {{{ */
$db = $this->_dms->getDB();
@ -844,8 +985,15 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */
return true;
} /* }}} */
/**
* @return SeedDMS_Core_Workflow_Action
*/
function getAction() { return $this->_action; }
/**
* @param SeedDMS_Core_Workflow_Action $newAction
* @return bool
*/
function setAction($newAction) { /* {{{ */
$db = $this->_dms->getDB();
@ -858,8 +1006,15 @@ class SeedDMS_Core_Workflow_Transition { /* {{{ */
return true;
} /* }}} */
/**
* @return int
*/
function getMaxTime() { return $this->_maxtime; }
/**
* @param $maxtime
* @return bool
*/
function setMaxTime($maxtime) { /* {{{ */
$db = $this->_dms->getDB();
@ -875,7 +1030,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();
@ -903,7 +1058,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();
@ -991,12 +1146,21 @@ class SeedDMS_Core_Workflow_Transition_User { /* {{{ */
*/
var $_dms;
/**
* 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;
}
/**
* @param $dms
*/
function setDMS($dms) { /* {{{ */
$this->_dms = $dms;
} /* }}} */
@ -1065,6 +1229,13 @@ class SeedDMS_Core_Workflow_Transition_Group { /* {{{ */
*/
var $_dms;
/**
* 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;
@ -1072,6 +1243,9 @@ class SeedDMS_Core_Workflow_Transition_Group { /* {{{ */
$this->_numOfUsers = $numOfUsers;
} /* }}} */
/**
* @param $dms
*/
function setDMS($dms) { /* {{{ */
$this->_dms = $dms;
} /* }}} */
@ -1178,6 +1352,17 @@ class SeedDMS_Core_Workflow_Log { /* {{{ */
*/
var $_dms;
/**
* 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;
@ -1190,26 +1375,44 @@ class SeedDMS_Core_Workflow_Log { /* {{{ */
$this->_dms = null;
}
/**
* @param $dms
*/
function setDMS($dms) { /* {{{ */
$this->_dms = $dms;
} /* }}} */
/**
* @return object
*/
function getTransition() { /* {{{ */
return $this->_transition;
} /* }}} */
/**
* @return object
*/
function getWorkflow() { /* {{{ */
return $this->_workflow;
} /* }}} */
/**
* @return object
*/
function getUser() { /* {{{ */
return $this->_user;
} /* }}} */
/**
* @return string
*/
function getComment() { /* {{{ */
return $this->_comment;
} /* }}} */
/**
* @return string
*/
function getDate() { /* {{{ */
return $this->_date;
} /* }}} */

View File

@ -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;
} /* }}} */
}
?>
}

View File

@ -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
@ -122,7 +123,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) {
@ -182,7 +183,7 @@ class SeedDMS_Core_DatabaseAccess {
* @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
* @param bool|string $database name of database
*/
function __construct($driver, $hostname, $user, $passw, $database = false) { /* {{{ */
$this->_driver = $driver;
@ -216,7 +217,7 @@ class SeedDMS_Core_DatabaseAccess {
$this->_ttcontentid = false;
$this->_ttreceiptid = false;
$this->_ttrevisionid = false;
$this->_useviews = true;
$this->_useviews = false; // turn off views, because they are much slower then temp. tables
$this->_debug = false;
} /* }}} */
@ -258,6 +259,7 @@ class SeedDMS_Core_DatabaseAccess {
$dsn = $this->_driver.":".$this->_database;
break;
}
/** @noinspection PhpUndefinedVariableInspection */
$this->_conn = new PDO($dsn, $this->_user, $this->_passw);
if (!$this->_conn)
return false;
@ -303,7 +305,7 @@ class SeedDMS_Core_DatabaseAccess {
/**
* Sanitize String used in database operations
*
* @param string text
* @param string $text
* @return string sanitized string
*/
function qstr($text) { /* {{{ */
@ -313,7 +315,7 @@ class SeedDMS_Core_DatabaseAccess {
/**
* Replace back ticks by '"'
*
* @param string text
* @param string $text
* @return string sanitized string
*/
function rbt($text) { /* {{{ */
@ -326,7 +328,8 @@ 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
* @param bool $retick
* @return array|bool data if query could be executed otherwise false
*/
function getResultArray($queryStr, $retick=true) { /* {{{ */
$resArr = array();
@ -405,7 +408,9 @@ class SeedDMS_Core_DatabaseAccess {
/**
* Return the id of the last instert record
*
* @return integer id used in last autoincrement
* @param string $tablename
* @param string $fieldname
* @return int id used in last autoincrement
*/
function getInsertID($tablename='', $fieldname='id') { /* {{{ */
if($this->_driver == 'pgsql')
@ -425,6 +430,10 @@ class SeedDMS_Core_DatabaseAccess {
/**
* Create various temporary tables to speed up and simplify sql queries
*
* @param string $tableName
* @param bool $override
* @return bool
*/
private function __createTemporaryTable($tableName, $override=false) { /* {{{ */
if (!strcasecmp($tableName, "ttreviewid")) {
@ -677,7 +686,11 @@ class SeedDMS_Core_DatabaseAccess {
} /* }}} */
/**
* Create various temporary tables to speed up and simplify sql queries
* Create various views to speed up and simplify sql queries
*
* @param string $tableName
* @param bool $override
* @return bool
*/
private function __createView($tableName, $override=false) { /* {{{ */
if (!strcasecmp($tableName, "ttreviewid")) {
@ -915,7 +928,11 @@ class SeedDMS_Core_DatabaseAccess {
} /* }}} */
/**
* Create various temporary tables to speed up and simplify sql queries
* Create various temporary tables or view to speed up and simplify sql queries
*
* @param string $tableName
* @param bool $override
* @return bool
*/
public function createTemporaryTable($tableName, $override=false) { /* {{{ */
if($this->_useviews)
@ -929,6 +946,7 @@ class SeedDMS_Core_DatabaseAccess {
* 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') { /* {{{ */
@ -997,6 +1015,7 @@ class SeedDMS_Core_DatabaseAccess {
/**
* Return sql statement for returning the current timestamp
*
* @param $field
* @return string sql code
*/
function castToText($field) { /* {{{ */
@ -1008,5 +1027,3 @@ class SeedDMS_Core_DatabaseAccess {
return $field;
} /* }}} */
}
?>

View File

@ -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;
} /* }}} */
}
?>
}

View File

@ -12,11 +12,11 @@
<email>uwe@steinmann.cx</email>
<active>yes</active>
</lead>
<date>2018-02-01</date>
<date>2018-02-27</date>
<time>09:19:24</time>
<version>
<release>6.0.3</release>
<api>6.0.3</api>
<release>6.0.5</release>
<api>6.0.5</api>
</version>
<stability>
<release>stable</release>
@ -24,13 +24,6 @@
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
pass 0 as default to getObjects()
SeedDMS_Core_AttributeDefinition::getStatistics() returns propper values for each item in a value set
SeedDMS_Core_DMS::getDocumentList() returns list of documents without a receiver
add lists of drafts and obsolete docs in SeedDMS_Core_DMS::getDocumentList()
add fast sql statement to SeedDMS_Core_Document::getReceiptStatus() if limit=1
add callback onCheckAccessDocument to SeedDMS_Core_Document::getAccessMode()
add new document status 'needs correction' (S_NEEDS_CORRECTION)
</notes>
<contents>
<dir baseinstalldir="SeedDMS" name="/">
@ -1224,7 +1217,7 @@ do not sort some temporary tables anymore, because it causes an error in mysql i
</notes>
</release>
<release>
<date>2017-09-05</date>
<date>2018-02-14</date>
<time>06:38:12</time>
<version>
<release>4.3.37</release>
@ -1236,6 +1229,7 @@ do not sort some temporary tables anymore, because it causes an error in mysql i
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- SeedDMS_Core_DMS::search() finds documents without a status log
</notes>
</release>
<release>
@ -1567,7 +1561,7 @@ returns just users which are not disabled
</notes>
</release>
<release>
<date>2018-01-18</date>
<date>2018-12-08</date>
<time>09:19:24</time>
<version>
<release>5.1.6</release>
@ -1579,6 +1573,9 @@ returns just users which are not disabled
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add SeedDMS_Core_Folder::getDocumentsMinMax()
add lots of DocBlocks from merge request #8
add SeedDMS_Core_AttributeDefinition::removeValue()
</notes>
</release>
<release>
@ -1656,5 +1653,45 @@ are any waiting or pending revisions at all
- getTimeline() also returns data for documents with a scheduled revision
</notes>
</release>
<release>
<date>2018-01-23</date>
<time>09:19:24</time>
<version>
<release>6.0.3</release>
<api>6.0.3</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
pass 0 as default to getObjects()
SeedDMS_Core_AttributeDefinition::getStatistics() returns propper values for each item in a value set
SeedDMS_Core_DMS::getDocumentList() returns list of documents without a receiver
</notes>
</release>
<release>
<date>2018-02-14</date>
<time>09:19:24</time>
<version>
<release>6.0.4</release>
<api>6.0.4</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add lists of drafts and obsolete docs in SeedDMS_Core_DMS::getDocumentList()
add fast sql statement to SeedDMS_Core_Document::getReceiptStatus() if limit=1
add callback onCheckAccessDocument to SeedDMS_Core_Document::getAccessMode()
add new document status 'needs correction' (S_NEEDS_CORRECTION)
do not use views as a replacement for temp. tables anymore, because they are much
slower.
add SeedDMS_Core_DocumentContent::getInstance()
</notes>
</release>
</changelog>
</package>

View File

@ -24,8 +24,17 @@
*/
class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document {
/**
* @var string
*/
protected $errormsg;
/**
* @param $cmd
* @param int $timeout
* @return string
* @throws Exception
*/
static function execWithTimeout($cmd, $timeout=2) { /* {{{ */
$descriptorspec = array(
0 => array("pipe", "r"),
@ -71,6 +80,11 @@ 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
* @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) { /* {{{ */
$this->errormsg = '';

View File

@ -83,5 +83,12 @@ class SeedDMS_Controller_AttributeMgr extends SeedDMS_Controller_Common {
return true;
} /* }}} */
public function removeattrvalue() { /* {{{ */
$attrdef = $this->params['attrdef'];
$attrval = $this->params['attrval'];
//$attrdef->getObjects($attrval);
return $attrdef->removeValue($attrval);
} /* }}} */
}

View File

@ -113,7 +113,7 @@ $notifier = new SeedDMS_NotificationService();
if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) {
if(method_exists($notificationObj, 'preAddService')) {
$notificationObj->preAddService($notifier);
$notificationObj->preAddService($dms, $notifier);
}
}
}
@ -125,7 +125,7 @@ if($settings->_enableEmail) {
if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) {
if(method_exists($notificationObj, 'postAddService')) {
$notificationObj->postAddService($notifier);
$notificationObj->postAddService($dms, $notifier);
}
}
}

View File

@ -110,7 +110,7 @@ class SeedDMS_AccessOperation {
if(get_class($document) == $this->dms->getClassname('document')) {
if($latestContent = $document->getLatestContent()) {
$status = $latestContent->getStatus();
if ((($this->settings->_enableVersionModification && ($document->getAccessMode($this->user) == M_ALL)) || $this->user->isAdmin()) && ($status["status"]==S_DRAFT || $status["status"]==S_RELEASED || $status["status"]==S_REJECTED || $status["status"]==S_OBSOLETE)) {
if ((($this->settings->_enableVersionModification && ($document->getAccessMode($this->user) == M_ALL)) || $this->user->isAdmin()) && ($status["status"]==S_DRAFT || $status["status"]==S_RELEASED || $status["status"]==S_REJECTED || $status["status"]==S_OBSOLETE || $status["status"]==S_NEEDS_CORRECTION)) {
return true;
}
}
@ -225,7 +225,7 @@ class SeedDMS_AccessOperation {
if(get_class($document) == $this->dms->getClassname('document')) {
if($latestContent = $document->getLatestContent()) {
$status = $latestContent->getStatus();
if ((($document->getAccessMode($this->user) == M_ALL) || $this->user->isAdmin()) && ($status["status"]!=S_OBSOLETE)) {
if ((($document->getAccessMode($this->user) >= M_READWRITE) || $this->user->isAdmin()) && ($status["status"]!=S_OBSOLETE)) {
return true;
}
}
@ -293,7 +293,7 @@ class SeedDMS_AccessOperation {
if(get_class($document) == $this->dms->getClassname('document')) {
if($latestContent = $document->getLatestContent()) {
$status = $latestContent->getStatus();
if ($status["status"]==S_DRAFT_REV) {
if ($document->getAccessMode($this->user) >= M_READ && $status["status"]==S_DRAFT_REV) {
return true;
}
}
@ -309,7 +309,7 @@ class SeedDMS_AccessOperation {
*/
function mayUpdateReview($document, $updateUser) { /* {{{ */
if(get_class($document) == 'SeedDMS_Core_Document') {
if($this->settings->_enableUpdateRevApp && ($updateUser == $this->user) && !$document->hasExpired()) {
if($this->settings->_enableUpdateRevApp && ($updateUser == $this->user) && $document->getAccessMode($this->user) >= M_READ && !$document->hasExpired()) {
return true;
}
}
@ -324,7 +324,7 @@ class SeedDMS_AccessOperation {
*/
function mayUpdateApproval($document, $updateUser) { /* {{{ */
if(get_class($document) == 'SeedDMS_Core_Document') {
if($this->settings->_enableUpdateRevApp && ($updateUser == $this->user) && !$document->hasExpired()) {
if($this->settings->_enableUpdateRevApp && ($updateUser == $this->user) && $document->getAccessMode($this->user) >= M_READ && !$document->hasExpired()) {
return true;
}
}
@ -344,7 +344,7 @@ class SeedDMS_AccessOperation {
if(get_class($document) == $this->dms->getClassname('document')) {
if($latestContent = $document->getLatestContent()) {
$status = $latestContent->getStatus();
if ($status["status"]==S_DRAFT_APP) {
if ($document->getAccessMode($this->user) >= M_READ && $status["status"]==S_DRAFT_APP) {
return true;
}
}
@ -363,7 +363,7 @@ class SeedDMS_AccessOperation {
if(get_class($document) == $this->dms->getClassname('document')) {
if($latestContent = $document->getLatestContent()) {
$status = $latestContent->getStatus();
if ($status["status"]==S_RELEASED) {
if ($document->getAccessMode($this->user) >= M_READ && $status["status"]==S_RELEASED) {
return true;
}
}
@ -379,7 +379,7 @@ class SeedDMS_AccessOperation {
*/
function mayUpdateReceipt($document, $updateUser) { /* {{{ */
if(get_class($document) == 'SeedDMS_Core_Document') {
if($this->settings->_enableUpdateReceipt && ($updateUser == $this->user) && !$document->hasExpired()) {
if($this->settings->_enableUpdateReceipt && ($updateUser == $this->user) && $document->getAccessMode($this->user) >= M_READ && !$document->hasExpired()) {
return true;
}
}
@ -397,7 +397,7 @@ class SeedDMS_AccessOperation {
if(get_class($document) == $this->dms->getClassname('document')) {
if($latestContent = $document->getLatestContent()) {
$status = $latestContent->getStatus();
if ($status["status"]!=S_OBSOLETE) {
if ($document->getAccessMode($this->user) >= M_READ && $status["status"]!=S_OBSOLETE) {
return true;
}
}

View File

@ -186,6 +186,8 @@ class Settings { /* {{{ */
var $_enableAcknowledgeWorkflow = true;
// enable/disable revision workflow
var $_enableRevisionWorkflow = true;
// Allow to set just a reviewer in tradional workflow
var $_allowReviewerOnly = true;
// enable/disable log system
var $_logFileEnable = true;
// the log file rotation
@ -236,6 +238,8 @@ class Settings { /* {{{ */
var $_sortUsersInList = '';
// Sort method for forders and documents ('n' (name) or '')
var $_sortFoldersDefault = '';
// Where to insert new documents ('start' or 'end')
var $_defaultDocPosition = 'end';
// Set valid IP for admin logins
// if enabled admin can login only by specified IP addres
var $_adminIP = "";
@ -484,6 +488,7 @@ class Settings { /* {{{ */
$this->_sortFoldersDefault = strval($tab["sortFoldersDefault"]);
$this->_expandFolderTree = intval($tab["expandFolderTree"]);
$this->_libraryFolder = intval($tab["libraryFolder"]);
$this->_defaultDocPosition = strval($tab["defaultDocPosition"]);
// XML Path: /configuration/site/calendar
$node = $xml->xpath('/configuration/site/calendar');
@ -644,6 +649,7 @@ class Settings { /* {{{ */
$this->_workflowMode = strval($tab["workflowMode"]);
$this->_enableAcknowledgeWorkflow = strval($tab["enableAcknowledgeWorkflow"]);
$this->_enableRevisionWorkflow = strval($tab["enableRevisionWorkflow"]);
$this->_allowReviewerOnly = Settings::boolval($tab["allowReviewerOnly"]);
$this->_enableVersionDeletion = Settings::boolval($tab["enableVersionDeletion"]);
$this->_enableVersionModification = Settings::boolval($tab["enableVersionModification"]);
$this->_enableDuplicateDocNames = Settings::boolval($tab["enableDuplicateDocNames"]);
@ -815,6 +821,7 @@ class Settings { /* {{{ */
$this->setXMLAttributValue($node, "sortUsersInList", $this->_sortUsersInList);
$this->setXMLAttributValue($node, "sortFoldersDefault", $this->_sortFoldersDefault);
$this->setXMLAttributValue($node, "libraryFolder", $this->_libraryFolder);
$this->setXMLAttributValue($node, "defaultDocPosition", $this->_defaultDocPosition);
// XML Path: /configuration/site/calendar
$node = $this->getXMLNode($xml, '/configuration/site', 'calendar');
@ -958,6 +965,7 @@ class Settings { /* {{{ */
$this->setXMLAttributValue($node, "workflowMode", $this->_workflowMode);
$this->setXMLAttributValue($node, "enableAcknowledgeWorkflow", $this->_enableAcknowledgeWorkflow);
$this->setXMLAttributValue($node, "enableRevisionWorkflow", $this->_enableRevisionWorkflow);
$this->setXMLAttributValue($node, "allowReviewerOnly", $this->_allowReviewerOnly);
$this->setXMLAttributValue($node, "enableVersionDeletion", $this->_enableVersionDeletion);
$this->setXMLAttributValue($node, "enableVersionModification", $this->_enableVersionModification);
$this->setXMLAttributValue($node, "enableDuplicateDocNames", $this->_enableDuplicateDocNames);

View File

@ -76,7 +76,7 @@ function getLanguages() { /* {{{ */
* @param string $defaulttext text used if no translation can be found
* @param string $lang use this language instead of the currently set lang
*/
function getMLText($key, $replace = array(), $defaulttext = "", $lang="") { /* {{{ */
function getMLText($key, $replace = array(), $defaulttext = null, $lang="") { /* {{{ */
GLOBAL $settings, $LANG, $session, $MISSING_LANG;
$trantext = '';
@ -92,7 +92,7 @@ function getMLText($key, $replace = array(), $defaulttext = "", $lang="") { /* {
}
if(!isset($LANG[$lang][$key]) || !$LANG[$lang][$key]) {
if (!$defaulttext) {
if ($defaulttext === null) {
$MISSING_LANG[$key] = $lang; //$_SERVER['SCRIPT_NAME'];
if(!empty($LANG[$settings->_language][$key])) {
$tmpText = $LANG[$settings->_language][$key];

View File

@ -20,7 +20,7 @@
class SeedDMS_Version {
public $_number = "6.0.3";
public $_number = "6.0.5";
private $_string = "SeedDMS";
function __construct() {

View File

@ -255,6 +255,7 @@ CREATE TABLE `tblDocumentApprovers` (
UNIQUE KEY `documentID` (`documentID`,`version`,`type`,`required`),
CONSTRAINT `tblDocumentApprovers_document` FOREIGN KEY (`documentID`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX `indDocumentApproversRequired` ON `tblDocumentApprovers` (`required`);
-- --------------------------------------------------------
@ -468,6 +469,8 @@ CREATE TABLE `tblDocumentReceiptLog` (
`date` datetime NOT NULL,
`userID` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`receiptLogID`),
KEY `tblDocumentReceiptLog_receipt` (`receiptID`),
KEY `tblDocumentReceiptLog_user` (`userID`),
CONSTRAINT `tblDocumentReceiptLog_recipient` FOREIGN KEY (`receiptID`) REFERENCES `tblDocumentRecipients` (`receiptID`) ON DELETE CASCADE,
CONSTRAINT `tblDocumentReceiptLog_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@ -505,6 +508,8 @@ CREATE TABLE `tblDocumentRevisionLog` (
`date` datetime NOT NULL,
`userID` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`revisionLogID`),
KEY `tblDocumentRevisionLog_revision` (`revisionID`),
KEY `tblDocumentRevisionLog_user` (`userID`),
CONSTRAINT `tblDocumentRevisionLog_revision` FOREIGN KEY (`revisionID`) REFERENCES `tblDocumentRevisors` (`revisionID`) ON DELETE CASCADE,
CONSTRAINT `tblDocumentRevisionLog_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@ -677,7 +682,6 @@ CREATE TABLE `tblMandatoryApprovers` (
PRIMARY KEY (`userID`,`approverUserID`,`approverGroupID`),
CONSTRAINT `tblMandatoryApprovers_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX `indDocumentApproversRequired` ON `tblDocumentApprovers` (`required`);
-- --------------------------------------------------------

View File

@ -1,6 +1,6 @@
--
--
-- Table structure for table `tblACLs`
--
--
CREATE TABLE `tblACLs` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -13,9 +13,9 @@ CREATE TABLE `tblACLs` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblCategory`
--
--
CREATE TABLE `tblCategory` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -24,9 +24,9 @@ CREATE TABLE `tblCategory` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblAttributeDefinitions`
--
--
CREATE TABLE `tblAttributeDefinitions` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -43,9 +43,9 @@ CREATE TABLE `tblAttributeDefinitions` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblUsers`
--
--
CREATE TABLE `tblRoles` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -57,9 +57,9 @@ CREATE TABLE `tblRoles` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblUsers`
--
--
CREATE TABLE `tblUsers` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -83,9 +83,9 @@ CREATE TABLE `tblUsers` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblUserSubstitutes`
--
--
CREATE TABLE `tblUserSubstitutes` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -96,9 +96,9 @@ CREATE TABLE `tblUserSubstitutes` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblUserPasswordRequest`
--
--
CREATE TABLE `tblUserPasswordRequest` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -109,9 +109,9 @@ CREATE TABLE `tblUserPasswordRequest` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblUserPasswordHistory`
--
--
CREATE TABLE `tblUserPasswordHistory` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -122,9 +122,9 @@ CREATE TABLE `tblUserPasswordHistory` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblUserImages`
--
--
CREATE TABLE `tblUserImages` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -135,9 +135,9 @@ CREATE TABLE `tblUserImages` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblFolders`
--
--
CREATE TABLE `tblFolders` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -154,9 +154,9 @@ CREATE TABLE `tblFolders` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblFolderAttributes`
--
--
CREATE TABLE `tblFolderAttributes` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -168,9 +168,9 @@ CREATE TABLE `tblFolderAttributes` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocuments`
--
--
CREATE TABLE `tblDocuments` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -190,9 +190,9 @@ CREATE TABLE `tblDocuments` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentAttributes`
--
--
CREATE TABLE `tblDocumentAttributes` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -204,9 +204,9 @@ CREATE TABLE `tblDocumentAttributes` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentApprovers`
--
--
CREATE TABLE `tblDocumentApprovers` (
`approveID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -220,9 +220,9 @@ CREATE INDEX `indDocumentApproversRequired` ON `tblDocumentApprovers` (`required
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentApproveLog`
--
--
CREATE TABLE `tblDocumentApproveLog` (
`approveLogID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -232,13 +232,13 @@ CREATE TABLE `tblDocumentApproveLog` (
`date` TEXT NOT NULL,
`userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ;
CREATE INDEX `indDocumentApproveLogReviewID` ON `tblDocumentApproveLog` (`approveID`);
CREATE INDEX `indDocumentApproveLogApproveID` ON `tblDocumentApproveLog` (`approveID`);
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentContent`
--
--
CREATE TABLE `tblDocumentContent` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -259,9 +259,9 @@ CREATE TABLE `tblDocumentContent` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentContentAttributes`
--
--
CREATE TABLE `tblDocumentContentAttributes` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -273,9 +273,9 @@ CREATE TABLE `tblDocumentContentAttributes` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentLinks`
--
--
CREATE TABLE `tblDocumentLinks` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -287,9 +287,9 @@ CREATE TABLE `tblDocumentLinks` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentFiles`
--
--
CREATE TABLE `tblDocumentFiles` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -308,9 +308,9 @@ CREATE TABLE `tblDocumentFiles` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentLocks`
--
--
CREATE TABLE `tblDocumentLocks` (
`document` INTEGER REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE,
@ -319,9 +319,9 @@ CREATE TABLE `tblDocumentLocks` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentCheckOuts`
--
--
CREATE TABLE `tblDocumentCheckOuts` (
`document` INTEGER REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE,
@ -334,9 +334,9 @@ CREATE TABLE `tblDocumentCheckOuts` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentReviewers`
--
--
CREATE TABLE `tblDocumentReviewers` (
`reviewID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -350,9 +350,9 @@ CREATE INDEX `indDocumentReviewersRequired` ON `tblDocumentReviewers` (`required
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentReviewLog`
--
--
CREATE TABLE `tblDocumentReviewLog` (
`reviewLogID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -366,9 +366,9 @@ CREATE INDEX `indDocumentReviewLogReviewID` ON `tblDocumentReviewLog` (`reviewID
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentRecipients`
--
--
CREATE TABLE `tblDocumentRecipients` (
`receiptID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -382,9 +382,9 @@ CREATE INDEX `indDocumentRecipientsRequired` ON `tblDocumentRecipients` (`requir
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentReceiptLog`
--
--
CREATE TABLE `tblDocumentReceiptLog` (
`receiptLogID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -398,9 +398,9 @@ CREATE INDEX `indDocumentReceiptLogReceiptID` ON `tblDocumentReceiptLog` (`recei
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentRevisors`
--
--
CREATE TABLE `tblDocumentRevisors` (
`revisionID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -415,9 +415,9 @@ CREATE INDEX `indDocumentRevisorsRequired` ON `tblDocumentRevisors` (`required`)
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentRevisionLog`
--
--
CREATE TABLE `tblDocumentRevisionLog` (
`revisionLogID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -431,9 +431,9 @@ CREATE INDEX `indDocumentRevisionLogRevisionID` ON `tblDocumentRevisionLog` (`re
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentStatus`
--
--
CREATE TABLE `tblDocumentStatus` (
`statusID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -444,9 +444,9 @@ CREATE TABLE `tblDocumentStatus` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentStatusLog`
--
--
CREATE TABLE `tblDocumentStatusLog` (
`statusLogID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -460,9 +460,9 @@ CREATE INDEX `indDocumentStatusLogStatusID` ON `tblDocumentStatusLog` (`StatusID
-- --------------------------------------------------------
--
--
-- Table structure for table `tblGroups`
--
--
CREATE TABLE `tblGroups` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -472,9 +472,9 @@ CREATE TABLE `tblGroups` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblGroupMembers`
--
--
CREATE TABLE `tblGroupMembers` (
`groupID` INTEGER NOT NULL default '0' REFERENCES `tblGroups` (`id`) ON DELETE CASCADE,
@ -485,9 +485,9 @@ CREATE TABLE `tblGroupMembers` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblKeywordCategories`
--
--
CREATE TABLE `tblKeywordCategories` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -497,9 +497,9 @@ CREATE TABLE `tblKeywordCategories` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblKeywords`
--
--
CREATE TABLE `tblKeywords` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -509,9 +509,9 @@ CREATE TABLE `tblKeywords` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblDocumentCategory`
--
--
CREATE TABLE `tblDocumentCategory` (
`categoryID` INTEGER NOT NULL default '0' REFERENCES `tblCategory` (`id`) ON DELETE CASCADE,
@ -520,9 +520,9 @@ CREATE TABLE `tblDocumentCategory` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblNotify`
--
--
CREATE TABLE `tblNotify` (
`target` INTEGER NOT NULL default '0',
@ -534,9 +534,9 @@ CREATE TABLE `tblNotify` (
-- --------------------------------------------------------
--
--
-- Table structure for table `tblSessions`
--
--
CREATE TABLE `tblSessions` (
`id` varchar(50) PRIMARY KEY,
@ -551,9 +551,9 @@ CREATE TABLE `tblSessions` (
-- --------------------------------------------------------
--
-- Table structure for mandatory reviewers
--
--
-- Table structure for table `tblMandatoryReviewers`
--
CREATE TABLE `tblMandatoryReviewers` (
`userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE,
@ -564,9 +564,9 @@ CREATE TABLE `tblMandatoryReviewers` (
-- --------------------------------------------------------
--
-- Table structure for mandatory approvers
--
--
-- Table structure for table `tblMandatoryApprovers`
--
CREATE TABLE `tblMandatoryApprovers` (
`userID` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE,
@ -577,9 +577,9 @@ CREATE TABLE `tblMandatoryApprovers` (
-- --------------------------------------------------------
--
-- Table structure for events (calendar)
--
--
-- Table structure for table `tblEvents`
--
CREATE TABLE `tblEvents` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -593,9 +593,9 @@ CREATE TABLE `tblEvents` (
-- --------------------------------------------------------
--
-- Table structure for workflow states
--
--
-- Table structure for table `tblWorkflowStates`
--
CREATE TABLE `tblWorkflowStates` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -608,9 +608,9 @@ CREATE TABLE `tblWorkflowStates` (
-- --------------------------------------------------------
--
-- Table structure for workflow actions
--
--
-- Table structure for table `tblWorkflowActions`
--
CREATE TABLE `tblWorkflowActions` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -619,9 +619,9 @@ CREATE TABLE `tblWorkflowActions` (
-- --------------------------------------------------------
--
-- Table structure for workflows
--
--
-- Table structure for table `tblWorkflows`
--
CREATE TABLE `tblWorkflows` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -632,9 +632,9 @@ CREATE TABLE `tblWorkflows` (
-- --------------------------------------------------------
--
-- Table structure for workflow transitions
--
--
-- Table structure for table `tblWorkflowTransitions`
--
CREATE TABLE `tblWorkflowTransitions` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -647,9 +647,9 @@ CREATE TABLE `tblWorkflowTransitions` (
-- --------------------------------------------------------
--
-- Table structure for workflow transition users
--
--
-- Table structure for table `tblWorkflowTransitionUsers`
--
CREATE TABLE `tblWorkflowTransitionUsers` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -659,9 +659,9 @@ CREATE TABLE `tblWorkflowTransitionUsers` (
-- --------------------------------------------------------
--
-- Table structure for workflow transition groups
--
--
-- Table structure for table `tblWorkflowTransitionGroups`
--
CREATE TABLE `tblWorkflowTransitionGroups` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -672,9 +672,9 @@ CREATE TABLE `tblWorkflowTransitionGroups` (
-- --------------------------------------------------------
--
-- Table structure for workflow log
--
--
-- Table structure for table `tblWorkflowLog`
--
CREATE TABLE `tblWorkflowLog` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -689,9 +689,9 @@ CREATE TABLE `tblWorkflowLog` (
-- --------------------------------------------------------
--
-- Table structure for workflow document relation
--
--
-- Table structure for table `tblWorkflowDocumentContent`
--
CREATE TABLE `tblWorkflowDocumentContent` (
`parentworkflow` INTEGER DEFAULT 0,
@ -704,9 +704,9 @@ CREATE TABLE `tblWorkflowDocumentContent` (
-- --------------------------------------------------------
--
-- Table structure for mandatory workflows
--
--
-- Table structure for table `tblWorkflowMandatoryWorkflow`
--
CREATE TABLE `tblWorkflowMandatoryWorkflow` (
`userid` INTEGER default NULL REFERENCES `tblUsers` (`id`) ON DELETE CASCADE,
@ -716,9 +716,9 @@ CREATE TABLE `tblWorkflowMandatoryWorkflow` (
-- --------------------------------------------------------
--
--
-- Table structure for transmittal
--
--
CREATE TABLE tblTransmittals (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -731,9 +731,9 @@ CREATE TABLE tblTransmittals (
-- --------------------------------------------------------
--
--
-- Table structure for transmittal item
--
--
CREATE TABLE `tblTransmittalItems` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -746,9 +746,9 @@ CREATE TABLE `tblTransmittalItems` (
-- --------------------------------------------------------
--
--
-- Table structure for access request objects
--
--
CREATE TABLE `tblAros` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -761,9 +761,9 @@ CREATE TABLE `tblAros` (
-- --------------------------------------------------------
--
--
-- Table structure for access control objects
--
--
CREATE TABLE `tblAcos` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -775,9 +775,9 @@ CREATE TABLE `tblAcos` (
-- --------------------------------------------------------
--
--
-- Table structure for acos/aros relation
--
--
CREATE TABLE `tblArosAcos` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -792,9 +792,9 @@ CREATE TABLE `tblArosAcos` (
-- --------------------------------------------------------
--
-- Table structure for version
--
--
-- Table structure for table `tblVersion`
--
CREATE TABLE `tblVersion` (
`date` TEXT NOT NULL,

View File

@ -123,7 +123,7 @@ function fileExistsInIncludePath($file) { /* {{{ */
* Load default settings + set
*/
define("SEEDDMS_INSTALL", "on");
define("SEEDDMS_VERSION", "6.0.3");
define("SEEDDMS_VERSION", "6.0.5");
require_once('../inc/inc.ClassSettings.php');

View File

@ -30,6 +30,7 @@ CREATE TABLE `tblDocumentRecipients` (
`required` INTEGER NOT NULL default '0',
UNIQUE (`documentID`,`version`,`type`,`required`)
) ;
CREATE INDEX `indDocumentRecipientsRequired` ON `tblDocumentRecipients` (`required`);
CREATE TABLE `tblDocumentReceiptLog` (
`receiptLogID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -39,6 +40,7 @@ CREATE TABLE `tblDocumentReceiptLog` (
`date` TEXT NOT NULL,
`userID` INTEGER NOT NULL default 0 REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ;
CREATE INDEX `indDocumentReceiptLogReceiptID` ON `tblDocumentReceiptLog` (`receiptID`);
CREATE TABLE `tblDocumentRevisors` (
`revisionID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -49,6 +51,7 @@ CREATE TABLE `tblDocumentRevisors` (
`startdate` TEXT default NULL,
UNIQUE (`documentID`,`version`,`type`,`required`)
) ;
CREATE INDEX `indDocumentRevisorsRequired` ON `tblDocumentRevisors` (`required`);
CREATE TABLE `tblDocumentRevisionLog` (
`revisionLogID` INTEGER PRIMARY KEY AUTOINCREMENT,
@ -58,8 +61,9 @@ CREATE TABLE `tblDocumentRevisionLog` (
`date` TEXT NOT NULL,
`userID` INTEGER NOT NULL default 0 REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ;
CREATE INDEX `indDocumentRevisionLogRevisionID` ON `tblDocumentRevisionLog` (`revisionID`);
CREATE TABLE tblTransmittals (
CREATE TABLE `tblTransmittals` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` text NOT NULL,
`comment` text NOT NULL,
@ -144,6 +148,12 @@ CREATE TABLE `tblArosAcos` (
UNIQUE (aco, aro)
) ;
CREATE INDEX `indDocumentStatusLogStatusID` ON `tblDocumentStatusLog` (`StatusID`);
CREATE INDEX `indDocumentApproversRequired` ON `tblDocumentApprovers` (`required`);
CREATE INDEX `indDocumentApproveLogApproveID` ON `tblDocumentApproveLog` (`approveID`);
CREATE INDEX `indDocumentReviewersRequired` ON `tblDocumentReviewers` (`required`);
CREATE INDEX `indDocumentReviewLogReviewID` ON `tblDocumentReviewLog` (`reviewID`);
UPDATE tblVersion set major=6, minor=0, subminor=0;
COMMIT;

View File

@ -1,15 +1,15 @@
START TRANSACTION;
ALTER TABLE `tblDocumentContent` ADD COLUMN `revisiondate` datetime default NULL;
ALTER TABLE `tblDocumentContent` ADD COLUMN `revisiondate` datetime DEFAULT NULL;
ALTER TABLE `tblUsers` ADD COLUMN `secret` varchar(50) default NULL AFTER `pwd`;
ALTER TABLE `tblUsers` ADD COLUMN `secret` varchar(50) DEFAULT NULL AFTER `pwd`;
ALTER TABLE `tblWorkflows` ADD COLUMN `layoutdata` text default NULL AFTER `initstate`;
ALTER TABLE `tblWorkflows` ADD COLUMN `layoutdata` text DEFAULT NULL AFTER `initstate`;
CREATE TABLE `tblUserSubstitutes` (
`id` int(11) NOT NULL auto_increment,
`user` int(11) default null,
`substitute` int(11) default null,
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` int(11) DEFAULT null,
`substitute` int(11) DEFAULT null,
PRIMARY KEY (`id`),
UNIQUE (`user`, `substitute`),
CONSTRAINT `tblUserSubstitutes_user` FOREIGN KEY (`user`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE,
@ -17,80 +17,86 @@ CREATE TABLE `tblUserSubstitutes` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblDocumentCheckOuts` (
`document` int(11) NOT NULL default '0',
`version` smallint(5) unsigned NOT NULL default '0',
`userID` int(11) NOT NULL default '0',
`document` int(11) NOT NULL DEFAULT '0',
`version` smallint(5) unsigned NOT NULL DEFAULT '0',
`userID` int(11) NOT NULL DEFAULT '0',
`date` datetime NOT NULL,
`filename` varchar(255) NOT NULL default '',
PRIMARY KEY (`document`),
`filename` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`document`),
CONSTRAINT `tblDocumentCheckOuts_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE,
CONSTRAINT `tblDocumentCheckOuts_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblDocumentRecipients` (
`receiptID` int(11) NOT NULL auto_increment,
`documentID` int(11) NOT NULL default '0',
`version` smallint(5) unsigned NOT NULL default '0',
`type` tinyint(4) NOT NULL default '0',
`required` int(11) NOT NULL default '0',
PRIMARY KEY (`receiptID`),
`receiptID` int(11) NOT NULL AUTO_INCREMENT,
`documentID` int(11) NOT NULL DEFAULT '0',
`version` smallint(5) unsigned NOT NULL DEFAULT '0',
`type` tinyint(4) NOT NULL DEFAULT '0',
`required` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`receiptID`),
UNIQUE KEY `documentID` (`documentID`,`version`,`type`,`required`),
CONSTRAINT `tblDocumentRecipients_document` FOREIGN KEY (`documentID`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX `indDocumentRecipientsRequired` ON `tblDocumentRecipients` (`required`);
CREATE TABLE `tblDocumentReceiptLog` (
`receiptLogID` int(11) NOT NULL auto_increment,
`receiptID` int(11) NOT NULL default '0',
`status` tinyint(4) NOT NULL default '0',
`receiptLogID` int(11) NOT NULL AUTO_INCREMENT,
`receiptID` int(11) NOT NULL DEFAULT '0',
`status` tinyint(4) NOT NULL DEFAULT '0',
`comment` text NOT NULL,
`date` datetime NOT NULL,
`userID` int(11) NOT NULL default '0',
PRIMARY KEY (`receiptLogID`),
`userID` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`receiptLogID`),
KEY `tblDocumentReceiptLog_receipt` (`receiptID`),
KEY `tblDocumentReceiptLog_user` (`userID`),
CONSTRAINT `tblDocumentReceiptLog_recipient` FOREIGN KEY (`receiptID`) REFERENCES `tblDocumentRecipients` (`receiptID`) ON DELETE CASCADE,
CONSTRAINT `tblDocumentReceiptLog_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblDocumentRevisors` (
`revisionID` int(11) NOT NULL auto_increment,
`documentID` int(11) NOT NULL default '0',
`version` smallint(5) unsigned NOT NULL default '0',
`type` tinyint(4) NOT NULL default '0',
`required` int(11) NOT NULL default '0',
`startdate` datetime default NULL,
PRIMARY KEY (`revisionID`),
`revisionID` int(11) NOT NULL AUTO_INCREMENT,
`documentID` int(11) NOT NULL DEFAULT '0',
`version` smallint(5) unsigned NOT NULL DEFAULT '0',
`type` tinyint(4) NOT NULL DEFAULT '0',
`required` int(11) NOT NULL DEFAULT '0',
`startdate` datetime DEFAULT NULL,
PRIMARY KEY (`revisionID`),
UNIQUE KEY `documentID` (`documentID`,`version`,`type`,`required`),
CONSTRAINT `tblDocumentRevisors_document` FOREIGN KEY (`documentID`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX `indDocumentRevisorsRequired` ON `tblDocumentRevisors` (`required`);
CREATE TABLE `tblDocumentRevisionLog` (
`revisionLogID` int(11) NOT NULL auto_increment,
`revisionID` int(11) NOT NULL default '0',
`status` tinyint(4) NOT NULL default '0',
`revisionLogID` int(11) NOT NULL AUTO_INCREMENT,
`revisionID` int(11) NOT NULL DEFAULT '0',
`status` tinyint(4) NOT NULL DEFAULT '0',
`comment` text NOT NULL,
`date` datetime NOT NULL,
`userID` int(11) NOT NULL default '0',
PRIMARY KEY (`revisionLogID`),
`userID` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`revisionLogID`),
KEY `tblDocumentRevisionLog_revision` (`revisionID`),
KEY `tblDocumentRevisionLog_user` (`userID`),
CONSTRAINT `tblDocumentRevisionLog_revision` FOREIGN KEY (`revisionID`) REFERENCES `tblDocumentRevisors` (`revisionID`) ON DELETE CASCADE,
CONSTRAINT `tblDocumentRevisionLog_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblTransmittals` (
`id` int(11) NOT NULL auto_increment,
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`comment` text NOT NULL,
`userID` int(11) NOT NULL default '0',
`date` datetime default NULL,
`public` tinyint(1) NOT NULL default '0',
`userID` int(11) NOT NULL DEFAULT '0',
`date` datetime DEFAULT NULL,
`public` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
CONSTRAINT `tblTransmittals_user` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblTransmittalItems` (
`id` int(11) NOT NULL auto_increment,
`transmittal` int(11) NOT NULL DEFAULT '0',
`document` int(11) default NULL,
`version` smallint(5) unsigned NOT NULL default '0',
`date` datetime default NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
`transmittal` int(11) NOT NULL DEFAULT '0',
`document` int(11) DEFAULT NULL,
`version` smallint(5) unsigned NOT NULL DEFAULT '0',
`date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE (transmittal, document, version),
CONSTRAINT `tblTransmittalItems_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE,
@ -98,10 +104,10 @@ CREATE TABLE `tblTransmittalItems` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblRoles` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) default NULL,
`role` smallint(1) NOT NULL default '0',
`noaccess` varchar(30) NOT NULL default '',
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`role` smallint(1) NOT NULL DEFAULT '0',
`noaccess` varchar(30) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@ -150,5 +156,3 @@ CREATE TABLE `tblArosAcos` (
UPDATE tblVersion set major=6, minor=0, subminor=0;
COMMIT;

View File

@ -262,6 +262,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'تأكيد كلمة السر',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'هل تود حقا ازالة الملف "[arkname]"?<br>كن حذرا: هذا الاجراء لايمكن التراجع فيه',
'confirm_rm_document' => 'هل تود حقا ازالة المستند \'[documentname]\'?<br>كن حذرا: هذا الاجراء لايمكن التراجع فيه',
'confirm_rm_dump' => 'هل تود حقا ازالة الملف "[dumpname]"?<br>كن حذرا: هذا الاجراء لايمكن التراجع فيه',
@ -987,6 +988,7 @@ URL: [url]',
'rewind_workflow_warning' => 'لو قمت باعادة تشغيل مسار العمل لحالته الاصلية، سيتم مسح سجلات مسار العمل للمستند ولايمكن استعادته',
'rm_attrdef' => 'ازالة تعريف سمة',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'ازالة القسم',
'rm_document' => 'ازالة المستند',
'rm_document_category' => 'ازالة القسم',
@ -1047,7 +1049,9 @@ URL: [url]',
'seconds' => 'ثواني',
'selection' => 'اختيار',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'اضغط لاختيار قسم',
'select_group' => '',
'select_groups' => 'اضغط لاختيار مجموعة',
'select_grp_approvers' => 'اضغط لاختيار مجموعة الموافقون',
'select_grp_ind_approvers' => '',
@ -1065,7 +1069,9 @@ URL: [url]',
'select_ind_reviewers' => 'اضغط لاختيار مراجع فردي',
'select_ind_revisors' => '',
'select_one' => 'اختر واحد',
'select_user' => '',
'select_users' => 'اضغط لاختيار المستخدم',
'select_value' => '',
'select_workflow' => 'اختر مسار العمل',
'send_email' => '',
'send_login_data' => '',
@ -1134,6 +1140,10 @@ URL: [url]',
'settings_dbVersion' => '',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => '',
@ -1412,6 +1422,7 @@ URL: [url]',
'sk_SK' => 'السلوفاكية',
'space_used_on_data_folder' => 'المساحة المستخدمة لمجلد البيانات',
'splash_added_to_clipboard' => 'ﺖﻣ ﺎﻠﻨﺴﺧ ﻒﻳ ﺎﻠﺣﺎﻔﻇﺓ',
'splash_add_access' => '',
'splash_add_attribute' => '',
'splash_add_group' => '',
'splash_add_group_member' => '',
@ -1421,12 +1432,14 @@ URL: [url]',
'splash_add_user' => '',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => '',
'splash_delete_access' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',
'splash_document_edited' => '',
'splash_document_indexed' => '',
'splash_document_locked' => 'تم قفل المستند',
'splash_document_unlocked' => 'تم الغاء قفل المستند',
'splash_edit_access' => '',
'splash_edit_attribute' => '',
'splash_edit_event' => '',
'splash_edit_group' => '',
@ -1437,14 +1450,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => '',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => '',
'splash_invalid_searchterm' => '',
'splash_moved_clipboard' => '',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => '',
'splash_rm_attribute' => '',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'تم حذف المستند',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'تم حذف المجلد',
@ -1458,7 +1474,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => '',
'splash_set_default_access' => '',
'splash_substituted_user' => '',
'splash_switched_back_user' => '',
'splash_toogle_group_manager' => '',

View File

@ -247,6 +247,7 @@ $text = array(
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Подтвердете паролата',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Изтрий файл "[arkname]"?<br>Действието е перманентно',
'confirm_rm_document' => 'Изтрий документ "[documentname]"?<br>Действието е перманентно',
'confirm_rm_dump' => 'Изтрий файл "[dumpname]"?<br>Действието е перманентно',
@ -859,6 +860,7 @@ $text = array(
'rewind_workflow_warning' => 'Ако превъртите процеса до неговото начало, целия log на процеса за този документ ще бъде изтрит и нема връщане.',
'rm_attrdef' => 'Премахни дефиниция на атрибути',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Премахни категория',
'rm_document' => 'Премахни документ',
'rm_document_category' => 'Премахни категория',
@ -912,7 +914,9 @@ $text = array(
'seconds' => 'секунди',
'selection' => 'Избор',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Изберете категория',
'select_group' => '',
'select_groups' => 'Кликни да избереш групи',
'select_grp_approvers' => 'Кликни да избереш група утвърждаващи',
'select_grp_ind_approvers' => '',
@ -930,7 +934,9 @@ $text = array(
'select_ind_reviewers' => 'Кликни да избереш рецензент',
'select_ind_revisors' => '',
'select_one' => 'Избери един',
'select_user' => '',
'select_users' => 'Кликни да избереш потребители',
'select_value' => '',
'select_workflow' => 'Избери процес',
'send_email' => '',
'send_login_data' => '',
@ -999,6 +1005,10 @@ $text = array(
'settings_dbVersion' => 'Схема БД остаряла',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => '',
@ -1277,6 +1287,7 @@ $text = array(
'sk_SK' => 'Словашки',
'space_used_on_data_folder' => 'Размер на каталога с данните',
'splash_added_to_clipboard' => 'Добавено към клипборда',
'splash_add_access' => '',
'splash_add_attribute' => '',
'splash_add_group' => '',
'splash_add_group_member' => '',
@ -1286,12 +1297,14 @@ $text = array(
'splash_add_user' => '',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => '',
'splash_delete_access' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',
'splash_document_edited' => '',
'splash_document_indexed' => '',
'splash_document_locked' => 'Документът е заключен',
'splash_document_unlocked' => 'Документа е отключен',
'splash_edit_access' => '',
'splash_edit_attribute' => '',
'splash_edit_event' => '',
'splash_edit_group' => '',
@ -1302,14 +1315,17 @@ $text = array(
'splash_error_send_download_link' => '',
'splash_folder_edited' => '',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => '',
'splash_invalid_searchterm' => '',
'splash_moved_clipboard' => '',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => '',
'splash_rm_attribute' => '',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Документът е преместен',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Папката е изтрита',
@ -1323,7 +1339,9 @@ $text = array(
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => '',
'splash_set_default_access' => '',
'splash_substituted_user' => '',
'splash_switched_back_user' => '',
'splash_toogle_group_manager' => '',

View File

@ -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)
// Translators: Admin (738)
$text = array(
'2_factor_auth' => '',
@ -252,6 +252,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Confirmar contrasenya',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => '¿Vol realment eliminar el fitxer "[arkname]"?<br />Atenció: aquesta acció no es pot desfer.',
'confirm_rm_document' => '¿Vol realment eliminar el document \'[documentname]\'?<br/>Atenció: aquesta acció no es pot desfer.',
'confirm_rm_dump' => '¿Vol realment eliminar el fitxer "[dumpname]"?<br />Atenció: aquesta acció no es pot desfer.',
@ -407,7 +408,7 @@ URL: [url]',
'email_header' => 'Aquest es un missatge automàtic del servidor de DMS.',
'email_not_given' => '',
'empty_attribute_group_list' => '',
'empty_folder_list' => '',
'empty_folder_list' => 'Sense documents o carpetes',
'empty_notify_list' => 'No hi ha entrades',
'en_GB' => 'Anglès (Regne Unit)',
'equal_transition_states' => '',
@ -528,7 +529,7 @@ URL: [url]',
'individuals' => 'Individuals',
'indivіduals_in_groups' => '',
'info_recipients_tab_not_released' => '',
'inherited' => '',
'inherited' => 'Heredat',
'inherits_access_copy_msg' => 'Copiar llista d\'accés heretat',
'inherits_access_empty_msg' => 'Començar amb una llista d\'accés buida',
'inherits_access_msg' => 'Accés heretat',
@ -603,7 +604,7 @@ URL: [url]',
'linked_to_this_version' => '',
'link_alt_updatedocument' => '',
'link_to_version' => '',
'list_access_rights' => '',
'list_access_rights' => 'Llista tots els tipus d\'accés...',
'list_contains_no_access_docs' => '',
'list_hooks' => '',
'local_file' => 'Arxiu local',
@ -864,6 +865,7 @@ URL: [url]',
'rewind_workflow_warning' => '',
'rm_attrdef' => '',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Eliminar categoria',
'rm_document' => 'Eliminar document',
'rm_document_category' => '',
@ -917,7 +919,9 @@ URL: [url]',
'seconds' => '',
'selection' => 'Selecció',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Prem per seleccionar la categoria',
'select_group' => '',
'select_groups' => '',
'select_grp_approvers' => '',
'select_grp_ind_approvers' => '',
@ -935,7 +939,9 @@ URL: [url]',
'select_ind_reviewers' => '',
'select_ind_revisors' => '',
'select_one' => 'Seleccionar un',
'select_user' => '',
'select_users' => 'Prem per seleccionar els usuaris',
'select_value' => '',
'select_workflow' => '',
'send_email' => '',
'send_login_data' => '',
@ -1004,6 +1010,10 @@ URL: [url]',
'settings_dbVersion' => '',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => '',
@ -1282,6 +1292,7 @@ URL: [url]',
'sk_SK' => 'Eslovac',
'space_used_on_data_folder' => 'Espai utilitzat a la carpeta de dades',
'splash_added_to_clipboard' => 'Emmagatzemat al portapapers',
'splash_add_access' => '',
'splash_add_attribute' => '',
'splash_add_group' => '',
'splash_add_group_member' => '',
@ -1291,12 +1302,14 @@ URL: [url]',
'splash_add_user' => '',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => '',
'splash_delete_access' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',
'splash_document_edited' => '',
'splash_document_indexed' => '',
'splash_document_locked' => 'Document blocat',
'splash_document_unlocked' => 'Document desblocat',
'splash_edit_access' => '',
'splash_edit_attribute' => '',
'splash_edit_event' => '',
'splash_edit_group' => '',
@ -1307,14 +1320,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => '',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => '',
'splash_invalid_searchterm' => '',
'splash_moved_clipboard' => '',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => '',
'splash_rm_attribute' => '',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Document esborrat',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Carpeta esborrada',
@ -1328,7 +1344,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => '',
'splash_set_default_access' => '',
'splash_substituted_user' => '',
'splash_switched_back_user' => '',
'splash_toogle_group_manager' => '',

View File

@ -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 (737), kreml (455)
// Translators: Admin (738), kreml (455)
$text = array(
'2_factor_auth' => '',
@ -269,6 +269,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Potvrzení hesla',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Skutečně chcete odstranit soubor "[arkname]"?<br>Pozor: Akci nelze vrátit zpět.',
'confirm_rm_document' => 'Skutečně chcete odstranit dokument \'[documentname]\'?<br>Buďte opatrní: Tuto činnost není možné vrátit zpět.',
'confirm_rm_dump' => 'Skutečně chcete odstranit soubor "[dumpname]"?<br>Pozor: Akce je nevratná.',
@ -996,6 +997,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Pokud spustíte znovu pracovní postup, potom záznam o dosavadním průběhu bude trvale smazán',
'rm_attrdef' => 'Odstranit definici atributu',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Smazat kategorii',
'rm_document' => 'Odstranit dokument',
'rm_document_category' => 'Vymazat kategorii',
@ -1056,7 +1058,9 @@ URL: [url]',
'seconds' => 'sekundy',
'selection' => 'Výběr',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Kliknutím vyberte kategorii',
'select_group' => '',
'select_groups' => 'Kliknutím vyberte skupiny',
'select_grp_approvers' => 'Kliknutím vyberte skupinu schvalovatele',
'select_grp_ind_approvers' => '',
@ -1074,7 +1078,9 @@ URL: [url]',
'select_ind_reviewers' => 'Klepnutím vyberte jednotlivého posuzovatele',
'select_ind_revisors' => '',
'select_one' => 'Vyberte jeden',
'select_user' => '',
'select_users' => 'Kliknutím vyberte uživatele',
'select_value' => 'vyber hodnotu',
'select_workflow' => 'Vyberte postup práce',
'send_email' => '',
'send_login_data' => '',
@ -1143,6 +1149,10 @@ URL: [url]',
'settings_dbVersion' => '',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => '',
@ -1421,6 +1431,7 @@ URL: [url]',
'sk_SK' => 'Slovenština',
'space_used_on_data_folder' => 'Použité místo pro data složky',
'splash_added_to_clipboard' => 'Přidáno do schránky',
'splash_add_access' => '',
'splash_add_attribute' => 'Přidán nový atribut',
'splash_add_group' => 'Přidána nová skupina',
'splash_add_group_member' => 'Přidán nový člen skupiny',
@ -1430,12 +1441,14 @@ URL: [url]',
'splash_add_user' => 'Přidán nový uživatel',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Schránka vymazána',
'splash_delete_access' => '',
'splash_document_added' => 'Dokument přidán',
'splash_document_checkedout' => '',
'splash_document_edited' => 'Dokument uložen',
'splash_document_indexed' => '',
'splash_document_locked' => 'Dokument zamčen',
'splash_document_unlocked' => 'Dokument odemčen',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Atribut uložen',
'splash_edit_event' => '',
'splash_edit_group' => 'Skupina uložena',
@ -1446,14 +1459,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Změny složky uloženy',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Neplatné ID složky',
'splash_invalid_searchterm' => 'Neplatný vyhledávací dotaz',
'splash_moved_clipboard' => 'Schránka přenesena do aktuální složky',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Odstraněno ze schránky',
'splash_rm_attribute' => 'Atribut odstraněn',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Dokument odstraněn',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Složka smazána',
@ -1467,7 +1483,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Nastavení uloženo',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Zaměněný uživatel',
'splash_switched_back_user' => 'Přepnuto zpět na původního uživatele',
'splash_toogle_group_manager' => 'Manažer skupiny přepnut',

View File

@ -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 (2528), dgrutsch (22)
// Translators: Admin (2545), dgrutsch (22)
$text = array(
'2_factor_auth' => '2-Faktor Authentifizierung',
@ -274,6 +274,7 @@ URL: [url]',
'confirm_move_document' => 'Dokument wirklich verschieben?',
'confirm_move_folder' => 'Ordner wirklich verschieben?',
'confirm_pwd' => 'Passwort-Bestätigung',
'confirm_rm_attr_value' => 'Möchten Sie wirklich den Attributwert löschen?',
'confirm_rm_backup' => 'Möchten Sie wirklich das Backup "[arkname]" löschen?<br />Beachten Sie, dass diese Operation nicht rückgängig gemacht werden kann.',
'confirm_rm_document' => 'Wollen Sie das Dokument \'[documentname]\' wirklich löschen?<br>Achtung: Dieser Vorgang kann nicht rückgängig gemacht werden.',
'confirm_rm_dump' => 'Möchten Sie wirklich den DB dump "[dumpname]" löschen?<br />Beachten Sie, dass diese Operation nicht rückgängig gemacht werden kann.',
@ -1057,6 +1058,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Wenn Sie einen Workflow in den Anfangszustand zurückversetzen, dann werden alle bisherigen Aktionen und Kommentare unwiederbringlich gelöscht.',
'rm_attrdef' => 'Attributdefinition löschen',
'rm_attrdefgroup' => 'Diese Attributgruppe löschen',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Kategorie löschen',
'rm_document' => 'Löschen',
'rm_document_category' => 'Lösche Kategorie',
@ -1117,7 +1119,9 @@ URL: [url]',
'seconds' => 'Sekunden',
'selection' => 'Auswahl',
'select_attrdefgrp_show' => 'Anzeigeort auswählen',
'select_attribute_value' => 'Attributwert auswählen',
'select_category' => 'Klicken zur Auswahl einer Kategorie',
'select_group' => 'Gruppe auswählen',
'select_groups' => 'Klicken zur Auswahl einer Gruppe',
'select_grp_approvers' => 'Klicken zur Auswahl einer Freigabegruppe',
'select_grp_ind_approvers' => 'Klicken zur Auswahl einer Gruppe',
@ -1135,7 +1139,9 @@ URL: [url]',
'select_ind_reviewers' => 'Klicken zur Auswahl eines Prüfers',
'select_ind_revisors' => 'Klicken zur Auswahl eines Wiederholungsprüfers',
'select_one' => 'Bitte wählen',
'select_user' => 'Benutzer auswählen',
'select_users' => 'Klicken zur Auswahl eines Benutzers',
'select_value' => 'Wert auswählen',
'select_workflow' => 'Workflow auswählen',
'send_email' => 'E-Mail verschicken',
'send_login_data' => 'Sende Login-Daten',
@ -1209,6 +1215,10 @@ Name: [username]
'settings_dbVersion' => 'Datenbankschema zu alt',
'settings_defaultAccessDocs' => 'Standardberechtigung für neue Dokumente',
'settings_defaultAccessDocs_desc' => 'Beim Erstellen eines neuen Dokuments wird dies als Standardberechtigung gesetzt.',
'settings_defaultDocPosition' => 'Position eines Dokuments beim Anlegen',
'settings_defaultDocPosition_desc' => 'Dies ist die voreingestellte Position eines Dokuments innerhalb eines Ordners, wenn dieses angelegt wird.',
'settings_defaultDocPosition_val_end' => 'Ende',
'settings_defaultDocPosition_val_start' => 'Anfang',
'settings_defaultSearchMethod' => 'Voreingestellte Suchmethode',
'settings_defaultSearchMethod_desc' => 'Voreingestellte Suchmethode, wenn über das Suchfeld in der Menüleiste gesucht wird.',
'settings_defaultSearchMethod_valdatabase' => 'Datenbank',
@ -1487,6 +1497,7 @@ Name: [username]
'sk_SK' => 'Slovakisch',
'space_used_on_data_folder' => 'Benutzter Plattenplatz',
'splash_added_to_clipboard' => 'Der Zwischenablage hinzugefügt',
'splash_add_access' => 'Zugriffsrecht hinzugefügt',
'splash_add_attribute' => 'Neues Attribut hinzugefügt',
'splash_add_group' => 'Neue Gruppe hinzugefügt',
'splash_add_group_member' => 'Neues Gruppenmitglied hinzugefügt',
@ -1496,12 +1507,14 @@ Name: [username]
'splash_add_user' => 'Neuen Benutzer hinzugefügt',
'splash_cleared_cache' => 'Cache geleert',
'splash_cleared_clipboard' => 'Zwischenablage geleert',
'splash_delete_access' => 'Zugriffsrecht gelöscht',
'splash_document_added' => 'Dokument hinzugefügt',
'splash_document_checkedout' => 'Dokument ausgecheckt',
'splash_document_edited' => 'Dokument gespeichert',
'splash_document_indexed' => 'Dokument \'[name]\' indiziert.',
'splash_document_locked' => 'Dokument gesperrt',
'splash_document_unlocked' => 'Dokumentensperre aufgehoben',
'splash_edit_access' => 'Zugriffsrecht verändert',
'splash_edit_attribute' => 'Attribut gespeichert',
'splash_edit_event' => 'Ereignis gespeichert',
'splash_edit_group' => 'Gruppe gespeichert',
@ -1512,14 +1525,17 @@ Name: [username]
'splash_error_send_download_link' => 'Fehler beim Verschicken des Download-Links',
'splash_folder_edited' => 'Änderungen am Ordner gespeichert',
'splash_importfs' => '[docs] Dokumente und [folders] Ordner importiert',
'splash_inherit_access' => 'Zugriffsrechte werden geerbt',
'splash_invalid_folder_id' => 'Ungültige Ordner-ID',
'splash_invalid_searchterm' => 'Ungültiger Suchbegriff',
'splash_moved_clipboard' => 'Inhalt der Zwischenablage in aktuellen Ordner verschoben',
'splash_move_document' => 'Dokument verschoben',
'splash_move_folder' => 'Ordner verschoben',
'splash_notinherit_access' => 'Zugriffsrechte werden nicht mehr geerbt',
'splash_receipt_update_success' => 'Empfangsbestätigung hinzugefügt',
'splash_removed_from_clipboard' => 'Aus der Zwischenablage entfernt',
'splash_rm_attribute' => 'Attribut gelöscht',
'splash_rm_attr_value' => 'Attributwert entfernt',
'splash_rm_document' => 'Dokument gelöscht',
'splash_rm_download_link' => 'Download-Link gelöscht',
'splash_rm_folder' => 'Ordner gelöscht',
@ -1533,7 +1549,9 @@ Name: [username]
'splash_save_user_data' => 'Benutzerdaten gespeichert',
'splash_send_download_link' => 'Download-Link per E-Mail verschickt.',
'splash_send_login_data' => 'Login-Daten verschickt',
'splash_setowner' => 'Neuen Besitzer gesetzt',
'splash_settings_saved' => 'Einstellungen gesichert',
'splash_set_default_access' => 'Default-Zugriffsrecht gesetzt',
'splash_substituted_user' => 'Benutzer gewechselt',
'splash_switched_back_user' => 'Zum ursprünglichen Benutzer zurückgekehrt',
'splash_toogle_group_manager' => 'Gruppenverwalter gewechselt',

View File

@ -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 (229)
// Translators: Admin (230)
$text = array(
'2_factor_auth' => '',
@ -247,6 +247,7 @@ $text = array(
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Επιβεβαίωση κωδικού',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => '',
'confirm_rm_document' => '',
'confirm_rm_dump' => '',
@ -870,6 +871,7 @@ URL: [url]',
'rewind_workflow_warning' => '',
'rm_attrdef' => '',
'rm_attrdefgroup' => '',
'rm_attr_value' => 'Wert entfernen',
'rm_default_keyword_category' => '',
'rm_document' => 'Διαγραφή εγγράφου',
'rm_document_category' => 'Διαγραφή κατηγορίας',
@ -923,7 +925,9 @@ URL: [url]',
'seconds' => 'δεύτερα',
'selection' => 'Επιλογή',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Επιλογή κατηγορίας',
'select_group' => '',
'select_groups' => '',
'select_grp_approvers' => '',
'select_grp_ind_approvers' => '',
@ -941,7 +945,9 @@ URL: [url]',
'select_ind_reviewers' => '',
'select_ind_revisors' => '',
'select_one' => '',
'select_user' => '',
'select_users' => '',
'select_value' => '',
'select_workflow' => '',
'send_email' => '',
'send_login_data' => '',
@ -1010,6 +1016,10 @@ URL: [url]',
'settings_dbVersion' => '',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => '',
@ -1288,6 +1298,7 @@ URL: [url]',
'sk_SK' => '',
'space_used_on_data_folder' => '',
'splash_added_to_clipboard' => '',
'splash_add_access' => '',
'splash_add_attribute' => '',
'splash_add_group' => '',
'splash_add_group_member' => '',
@ -1297,12 +1308,14 @@ URL: [url]',
'splash_add_user' => '',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => '',
'splash_delete_access' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',
'splash_document_edited' => '',
'splash_document_indexed' => '',
'splash_document_locked' => '',
'splash_document_unlocked' => '',
'splash_edit_access' => '',
'splash_edit_attribute' => '',
'splash_edit_event' => '',
'splash_edit_group' => '',
@ -1313,14 +1326,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => '',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => '',
'splash_invalid_searchterm' => '',
'splash_moved_clipboard' => '',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => '',
'splash_rm_attribute' => '',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Το έγγραφο αφαιρέθηκε',
'splash_rm_download_link' => '',
'splash_rm_folder' => '',
@ -1334,7 +1350,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => '',
'splash_set_default_access' => '',
'splash_substituted_user' => '',
'splash_switched_back_user' => '',
'splash_toogle_group_manager' => '',

View File

@ -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 (1650), archonwang (3), dgrutsch (9), netixw (14)
// Translators: Admin (1668), archonwang (3), dgrutsch (9), netixw (14)
$text = array(
'2_factor_auth' => '2-factor authentication',
@ -274,6 +274,7 @@ URL: [url]',
'confirm_move_document' => 'Please confirm moving the document.',
'confirm_move_folder' => 'Please confirm moving the folder.',
'confirm_pwd' => 'Confirm Password',
'confirm_rm_attr_value' => 'Do you really want to delete the attribute value?',
'confirm_rm_backup' => 'Do you really want to remove the file "[arkname]"?<br>Be careful: This action cannot be undone.',
'confirm_rm_document' => 'Do you really want to remove the document \'[documentname]\'?<br>Be careful: This action cannot be undone.',
'confirm_rm_dump' => 'Do you really want to remove the file "[dumpname]"?<br>Be careful: This action cannot be undone.',
@ -1052,6 +1053,7 @@ URL: [url]',
'rewind_workflow_warning' => 'If you rewind a workflow to its initial state, then the whole workflow log for this document will be deleted and cannot be recovered.',
'rm_attrdef' => 'Remove attribute definition',
'rm_attrdefgroup' => 'Remove this attribute group',
'rm_attr_value' => 'Remove value',
'rm_default_keyword_category' => 'Remove category',
'rm_document' => 'Remove document',
'rm_document_category' => 'Remove category',
@ -1112,7 +1114,9 @@ URL: [url]',
'seconds' => 'seconds',
'selection' => 'Selection',
'select_attrdefgrp_show' => 'Choose when to show',
'select_attribute_value' => 'Select attribute value',
'select_category' => 'Click to select category',
'select_group' => 'Select group',
'select_groups' => 'Click to select groups',
'select_grp_approvers' => 'Click to select group approver',
'select_grp_ind_approvers' => 'Click to select group',
@ -1130,7 +1134,9 @@ URL: [url]',
'select_ind_reviewers' => 'Click to select individual reviewer',
'select_ind_revisors' => 'Click to select individual revisors',
'select_one' => 'Select one',
'select_user' => 'Select user',
'select_users' => 'Click to select users',
'select_value' => 'Select value',
'select_workflow' => 'Select workflow',
'send_email' => 'Send email',
'send_login_data' => 'Send login data',
@ -1204,6 +1210,10 @@ Name: [username]
'settings_dbVersion' => 'Database schema too old',
'settings_defaultAccessDocs' => 'Default access for new documents',
'settings_defaultAccessDocs_desc' => 'When a new document is created, this will be the default access right.',
'settings_defaultDocPosition' => 'Position of document when created',
'settings_defaultDocPosition_desc' => 'This is the default position within a folder when a document is created.',
'settings_defaultDocPosition_val_end' => 'end',
'settings_defaultDocPosition_val_start' => 'start',
'settings_defaultSearchMethod' => 'Default search method',
'settings_defaultSearchMethod_desc' => 'Default search method, when a search is started by the search form in the main menu.',
'settings_defaultSearchMethod_valdatabase' => 'database',
@ -1482,6 +1492,7 @@ Name: [username]
'sk_SK' => 'Slovak',
'space_used_on_data_folder' => 'Space used on data folder',
'splash_added_to_clipboard' => 'Added to clipboard',
'splash_add_access' => 'Access right added',
'splash_add_attribute' => 'New attribute added',
'splash_add_group' => 'New group added',
'splash_add_group_member' => 'New group member added',
@ -1491,12 +1502,14 @@ Name: [username]
'splash_add_user' => 'New user added',
'splash_cleared_cache' => 'Cache cleared',
'splash_cleared_clipboard' => 'Clipboard cleared',
'splash_delete_access' => 'Access right deleted',
'splash_document_added' => 'Document added',
'splash_document_checkedout' => 'Document checked out',
'splash_document_edited' => 'Document saved',
'splash_document_indexed' => 'Document \'[name]\' indexed.',
'splash_document_locked' => 'Document locked',
'splash_document_unlocked' => 'Document unlocked',
'splash_edit_access' => 'Access right changed',
'splash_edit_attribute' => 'Attribute saved',
'splash_edit_event' => 'Event saved',
'splash_edit_group' => 'Group saved',
@ -1507,14 +1520,17 @@ Name: [username]
'splash_error_send_download_link' => 'Error while sending download link',
'splash_folder_edited' => 'Save folder changes',
'splash_importfs' => 'Imported [docs] documents and [folders] folders',
'splash_inherit_access' => 'Access right will be inherited',
'splash_invalid_folder_id' => 'Invalid folder ID',
'splash_invalid_searchterm' => 'Invalid search term',
'splash_moved_clipboard' => 'Clipboard moved into current folder',
'splash_move_document' => 'Document moved',
'splash_move_folder' => 'Folder moved',
'splash_notinherit_access' => 'Access rights no longer inherited',
'splash_receipt_update_success' => 'Reception added successfully',
'splash_removed_from_clipboard' => 'Removed from clipboard',
'splash_rm_attribute' => 'Attribute removed',
'splash_rm_attr_value' => 'Attribute value removed',
'splash_rm_document' => 'Document removed',
'splash_rm_download_link' => 'Removed download link',
'splash_rm_folder' => 'Folder deleted',
@ -1528,7 +1544,9 @@ Name: [username]
'splash_save_user_data' => 'User data saved',
'splash_send_download_link' => 'Download link sent by email.',
'splash_send_login_data' => 'Login data sent',
'splash_setowner' => 'Set new owner',
'splash_settings_saved' => 'Settings saved',
'splash_set_default_access' => 'Default access right set',
'splash_substituted_user' => 'Substituted user',
'splash_switched_back_user' => 'Switched back to original user',
'splash_toogle_group_manager' => 'Group manager toogled',

View File

@ -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 (1053), angel (123), francisco (2), jaimem (14)
// Translators: acabello (20), Admin (1056), angel (123), francisco (2), jaimem (14)
$text = array(
'2_factor_auth' => '',
@ -269,6 +269,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Confirmar contraseña',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => '¿Desea realmente eliminar el fichero "[arkname]"?<br />Atención: Esta acción no se puede deshacer.',
'confirm_rm_document' => '¿Desea realmente eliminar el documento \'[documentname]\'?<br />Atención: Esta acción no se puede deshacer.',
'confirm_rm_dump' => '¿Desea realmente eliminar el fichero "[dumpname]"?<br />Atención: Esta acción no se puede deshacer.',
@ -595,7 +596,7 @@ URL: [url]',
'index_error' => '',
'index_folder' => 'Índice de carpetas',
'index_pending' => '',
'index_waiting' => '',
'index_waiting' => 'Esperando',
'individuals' => 'Individuales',
'indivіduals_in_groups' => '',
'info_recipients_tab_not_released' => '',
@ -1002,6 +1003,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Si su flujo de trabajo fue retrocedido a su estado inicial, todo el log del flujo de trabajo de este documento será borrado y no se podrá recuperar.',
'rm_attrdef' => 'Eliminar definición de atributo',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Eliminar categoría',
'rm_document' => 'Eliminar documento',
'rm_document_category' => 'Eliminar categoría',
@ -1062,7 +1064,9 @@ URL: [url]',
'seconds' => 'segundos',
'selection' => 'Selección',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Haga Click para seleccionar categoría',
'select_group' => '',
'select_groups' => 'Haga Click para seleccionar grupos',
'select_grp_approvers' => 'Haga Click para seleccionar grupo de aprobadores',
'select_grp_ind_approvers' => '',
@ -1080,7 +1084,9 @@ URL: [url]',
'select_ind_reviewers' => 'Haga Click para seleccionar revisor individual',
'select_ind_revisors' => '',
'select_one' => 'Seleccionar uno',
'select_user' => '',
'select_users' => 'Haga Click para seleccionar usuarios',
'select_value' => 'Selecciona valor',
'select_workflow' => 'Selecionar Flujo de Trabajo',
'send_email' => '',
'send_login_data' => '',
@ -1149,6 +1155,10 @@ URL: [url]',
'settings_dbVersion' => 'Esquema de base de datos demasiado antiguo',
'settings_defaultAccessDocs' => 'Acceso por defecto de nuevos documentos',
'settings_defaultAccessDocs_desc' => 'Cuando un nuevo documento sea creado, este sera el acceso por defecto.',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => 'Método de búsqueda por defecto',
'settings_defaultSearchMethod_desc' => 'Método de búsqueda por defecto, cuando se inicia una búsqueda mediante el formulario en el menú principal',
'settings_defaultSearchMethod_valdatabase' => 'base de datos',
@ -1427,6 +1437,7 @@ URL: [url]',
'sk_SK' => 'Slovaco',
'space_used_on_data_folder' => 'Espacio usado en la carpeta de datos',
'splash_added_to_clipboard' => 'Agregado al portapapeles',
'splash_add_access' => '',
'splash_add_attribute' => 'Nuevo atributo agregado',
'splash_add_group' => 'Nuevo grupo agregado',
'splash_add_group_member' => 'Nuevo miembro del grupo agregado',
@ -1436,12 +1447,14 @@ URL: [url]',
'splash_add_user' => 'Nuevo usuario agregado',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Portapapeles limpiado',
'splash_delete_access' => '',
'splash_document_added' => 'Documento añadido',
'splash_document_checkedout' => '',
'splash_document_edited' => 'Documento guardado',
'splash_document_indexed' => '',
'splash_document_locked' => 'Documento bloqueado',
'splash_document_unlocked' => 'Documento desbloqueado',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Atributo guardado',
'splash_edit_event' => '',
'splash_edit_group' => 'Grupo guardado',
@ -1452,14 +1465,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Cambios a la carpeta guardados',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'ID de carpeta inválido',
'splash_invalid_searchterm' => 'Término de búsqueda inválido',
'splash_moved_clipboard' => 'Portapapeles movido a la carpeta actual',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Eliminado del portapapeles',
'splash_rm_attribute' => 'Atributo eliminado',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Documento eliminado',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Carpeta eliminada',
@ -1473,7 +1489,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Configuración guardada',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Usuario sustituido',
'splash_switched_back_user' => 'Cambió de nuevo al usuario original',
'splash_toogle_group_manager' => 'Administrador de grupo activado',
@ -1560,7 +1578,7 @@ URL: [url]',
'to_before_from' => 'La fecha de finalización no debe ser anterior a la de inicio',
'transfer_document' => 'Transferir documento',
'transfer_no_read_access' => '',
'transfer_no_write_access' => '',
'transfer_no_write_access' => 'El usuario no tiene acceso de escritura en la carpeta',
'transfer_objects' => '',
'transfer_objects_to_user' => '',
'transfer_to_user' => '',

View File

@ -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 (1070), jeromerobert (50), lonnnew (9), Oudiceval (477)
// Translators: Admin (1079), jeromerobert (50), lonnnew (9), Oudiceval (508)
$text = array(
'2_factor_auth' => 'Authentification forte',
@ -228,7 +228,7 @@ URL: [url]',
'change_password' => 'Changer de mot de passe',
'change_password_message' => 'Votre mot de passe a été changé.',
'change_recipients' => 'Définir destinataires',
'change_revisors' => '',
'change_revisors' => 'Définir les réviseurs',
'change_status' => 'Modifier le statut',
'charts' => 'Graphiques',
'chart_docsaccumulated_title' => 'Nombre de documents',
@ -274,6 +274,7 @@ URL: [url]',
'confirm_move_document' => 'Veuillez confirmer le déplacement du document.',
'confirm_move_folder' => 'Veuillez confirmer le déplacement du dossier.',
'confirm_pwd' => 'Confirmer le mot de passe',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Voulez-vous vraiment supprimer le fichier "[arkname]"?<br>Attention: Cette action ne peut pas être annulée.',
'confirm_rm_document' => 'Voulez-vous réellement supprimer le document \'[documentname]\'?<br>Attention : cette action ne peut être annulée.',
'confirm_rm_dump' => 'Voulez-vous vraiment supprimer le fichier "[dumpname]"?<br>Attention: Cette action ne peut pas être annulée.',
@ -320,7 +321,7 @@ URL: [url]',
'disclaimer' => 'Cet espace est protégé. Son accès est strictement réservé aux utilisateurs autorisés.<br/>Tout accès non autorisé est punissable par les lois internationales.',
'discspace' => 'Espace disque',
'docs_in_reception_no_access' => '',
'docs_in_revision_no_access' => '',
'docs_in_revision_no_access' => 'Documents en révision sans accès du réviseur',
'document' => 'Document',
'documentcontent' => 'Version de document',
'documents' => 'Documents',
@ -395,8 +396,13 @@ Utilisateur: [username]
URL: [url]',
'document_status_changed_email_subject' => '[sitename]: [name] - Statut du document modifié',
'document_title' => 'Document \'[documentname]\'',
'document_transfered_email_body' => '',
'document_transfered_email_subject' => '',
'document_transfered_email_body' => 'Transfert dun document à un autre utilisateur
Document : [name]
Nouveau propriétaire : [newuser]
Dossier parent : [folder_path]
Utilisateur : [username]
URL : [url]',
'document_transfered_email_subject' => '[sitename] : [name] - Transfert dun document',
'document_updated_email' => 'Document mis à jour',
'document_updated_email_body' => 'Document mis à jour
Document: [name]
@ -478,11 +484,11 @@ Le lien est valide jusquau [valid].
'error_no_document_selected' => 'Aucun document sélectionné',
'error_no_folder_selected' => 'Aucun dossier sélectionné',
'error_occured' => 'Une erreur s\'est produite',
'error_remove_document' => '',
'error_remove_folder' => '',
'error_remove_document' => 'Erreur lors de la suppression du document',
'error_remove_folder' => 'Erreur lors de la suppression du dossier',
'error_remove_permission' => 'Erreur lors de la suppression de permission',
'error_toogle_permission' => 'Erreur lors de la modification de permission',
'error_transfer_document' => '',
'error_transfer_document' => 'Erreur lors du transfert du document',
'es_ES' => 'Espagnol',
'event_details' => 'Détails de l\'événement',
'exclude_items' => 'Exclure des élements',
@ -639,7 +645,7 @@ URL: [url]',
'invalid_user_id' => 'Identifiant utilisateur invalide',
'invalid_version' => 'Version de document invalide',
'in_folder' => 'Dans',
'in_revision' => '',
'in_revision' => 'En révision',
'in_workflow' => 'Dans le workflow',
'is_disabled' => 'Compte désactivé',
'is_hidden' => 'Cacher de la liste utilisateur',
@ -816,8 +822,8 @@ URL: [url]',
'no_previous_versions' => 'Aucune autre version trouvée',
'no_receipt_needed' => 'Il ny a actuellement aucun document nécessitant une confirmation de réception.',
'no_review_needed' => 'Aucune vérification en attente',
'no_revision_needed' => '',
'no_revision_planed' => '',
'no_revision_needed' => 'Aucune révision en attente',
'no_revision_planed' => 'Aucune révision de document prévue',
'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é ! Cela peut être causé par le paramètre allow_url_fopen défini à 0 dans votre configuration PHP.',
@ -871,14 +877,14 @@ En cas de problème persistant, veuillez contacter votre administrateur.',
'pending_approvals' => 'Approbations en attente',
'pending_receipt' => 'Réceptions en attente',
'pending_reviews' => 'Vérifications en attente',
'pending_revision' => '',
'pending_revision' => 'Révisions en attente',
'pending_workflows' => 'Workflows en attente',
'personal_default_keywords' => 'Mots-clés personnels',
'pl_PL' => 'Polonais',
'possible_substitutes' => 'Substituts',
'preset_expires' => 'Expiration prédéfinie',
'preview' => 'Aperçu',
'preview_converters' => '',
'preview_converters' => 'Aperçu de la conversion de document',
'preview_images' => 'Miniatures',
'preview_markdown' => 'Prévisualisation',
'preview_pdf' => '',
@ -1001,13 +1007,18 @@ URL : [url]',
'revisions_not_touched' => '',
'revisions_pending' => '[no_revisions] révisions à venir en attente',
'revisions_rejected' => '[no_revisions] révisions déjà rejetées',
'revisions_without_group' => 'Approbations sans groupe',
'revisions_without_user' => 'Approbations sans utilisateur',
'revision_date' => '',
'revisions_without_group' => 'Révisions sans groupe',
'revisions_without_user' => 'Révisions sans utilisateur',
'revision_date' => 'Date de révision',
'revision_log' => 'Journal des révisions',
'revision_request_email_body' => '',
'revision_request_email_subject' => '',
'revision_status' => '',
'revision_request_email_body' => 'Demande de révision
Document : [name]
Version : [version]
Dossier parent : [folder_path]
Utilisateur : [username]
URL : [url]',
'revision_request_email_subject' => '[sitename] : [name] - Demande de révision',
'revision_status' => 'État',
'revision_submit_email_body' => '',
'revision_submit_email_subject' => '',
'revisors' => '',
@ -1019,6 +1030,7 @@ URL : [url]',
'rewind_workflow_warning' => 'Si vous remonter à l\'état initial du workflow, le log de workflow de ce document sera supprimé et impossible à récupérer.',
'rm_attrdef' => 'Retirer définition d\'attribut',
'rm_attrdefgroup' => 'Supprimer ce groupe dattributs',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Supprimer la catégorie',
'rm_document' => 'Supprimer le document',
'rm_document_category' => 'Supprimer la catégorie',
@ -1079,14 +1091,16 @@ URL : [url]',
'seconds' => 'secondes',
'selection' => 'Sélection',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Cliquer pour choisir une catégorie',
'select_group' => '',
'select_groups' => 'Cliquer pour choisir un groupe',
'select_grp_approvers' => 'Cliquer pour choisir un groupe d\'approbateur',
'select_grp_ind_approvers' => '',
'select_grp_ind_notification' => '',
'select_grp_ind_recipients' => '',
'select_grp_ind_approvers' => 'Cliquer pour choisir un groupe',
'select_grp_ind_notification' => 'Cliquer pour choisir un groupe',
'select_grp_ind_recipients' => 'Cliquer pour choisir un groupe',
'select_grp_ind_reviewers' => 'Cliquer pour choisir un groupe dexaminateurs',
'select_grp_ind_revisors' => '',
'select_grp_ind_revisors' => 'Cliquer pour choisir un groupe',
'select_grp_notification' => 'Cliquer pour sélectionner une notification de groupe',
'select_grp_recipients' => '',
'select_grp_reviewers' => 'Cliquer pour choisir un groupe dexaminateurs',
@ -1097,7 +1111,9 @@ URL : [url]',
'select_ind_reviewers' => 'Cliquer pour choisir un examinateur individuel',
'select_ind_revisors' => '',
'select_one' => 'Selectionner',
'select_user' => '',
'select_users' => 'Cliquer pour choisir un utilisateur',
'select_value' => 'Sélectionner une valeur',
'select_workflow' => 'Choisir un workflow',
'send_email' => 'Envoyer un e-mail',
'send_login_data' => 'Envoyer les informations de connexion',
@ -1171,6 +1187,10 @@ Nom : [username]
'settings_dbVersion' => 'Schéma de base de données trop ancien',
'settings_defaultAccessDocs' => 'Accès par défaut des nouveaux documents',
'settings_defaultAccessDocs_desc' => 'Lors de la création dun nouveau document, ce droit daccès sera appliqué par défaut.',
'settings_defaultDocPosition' => 'Position du document à la création',
'settings_defaultDocPosition_desc' => 'C\'est la position par défaut dans un dossier lors de la création d\'un document.',
'settings_defaultDocPosition_val_end' => 'fin',
'settings_defaultDocPosition_val_start' => 'début',
'settings_defaultSearchMethod' => 'Méthode de recherche par défaut',
'settings_defaultSearchMethod_desc' => 'Méthode de recherche par défaut, lorsque la recherche est exécutée depuis le moteur de recherche du menu principal',
'settings_defaultSearchMethod_valdatabase' => 'base de données',
@ -1241,8 +1261,8 @@ Nom : [username]
'settings_enablePasswordForgotten_desc' => 'Si vous voulez permettre à l\'utilisateur de définir un nouveau mot de passe et l\'envoyer par mail, cochez cette option.',
'settings_enableRecursiveCount' => 'Décompte de documents/répertoires recursif',
'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_enableRevisionWorkflow' => 'Activer la révision des documents',
'settings_enableRevisionWorkflow_desc' => 'Activer afin de pouvoir lancer un flux de travail pour réviser un document après une période donnée.',
'settings_enableSelfReceipt' => '',
'settings_enableSelfReceipt_desc' => '',
'settings_enableSelfRevApp' => 'Autoriser vérification/approbation par lutilisateur actuel',
@ -1286,8 +1306,8 @@ Nom : [username]
'settings_guestID_desc' => 'ID de l\'invité utilisé lorsque vous êtes connecté en tant qu\'invité (la plupart du temps pas besoin de changer)',
'settings_httpRoot' => 'Http Root',
'settings_httpRoot_desc' => 'Le chemin relatif dans l\'URL, après le nom de domaine. Ne pas inclure le préfixe http:// ou le nom d\'hôte Internet. Par exemple Si l\'URL complète est http://www.example.com/letodms/, mettez \'/letodms/\'. Si l\'URL est http://www.example.com/, mettez \'/\'',
'settings_incItemsPerPage' => '',
'settings_incItemsPerPage_desc' => '',
'settings_incItemsPerPage' => 'Nombre d\'entrées chargées à la fin de la page',
'settings_incItemsPerPage_desc' => 'Si le nombre de dossiers et de documents est limité, le nombre d\'objets supplémentaires chargés sera défini lors du défilement vers le bas de la page du dossier d\'affichage. Mettre à 0, chargera le même nombre d\'objets qu\'a été initialement chargé.',
'settings_initialDocumentStatus' => 'État initial dun document',
'settings_initialDocumentStatus_desc' => 'État du document défini lors de lajout',
'settings_initialDocumentStatus_draft' => 'ébauche',
@ -1318,8 +1338,8 @@ Nom : [username]
'settings_maxDirID_desc' => 'Nombre maximum de sous-répertoires par le répertoire parent. Par défaut: 0.',
'settings_maxExecutionTime' => 'Temps d\'exécution max (s)',
'settings_maxExecutionTime_desc' => 'Ceci définit la durée maximale en secondes q\'un script est autorisé à exécuter avant de se terminer par l\'analyse syntaxique',
'settings_maxItemsPerPage' => '',
'settings_maxItemsPerPage_desc' => '',
'settings_maxItemsPerPage' => 'Nombre déléments max. sur une page',
'settings_maxItemsPerPage_desc' => 'Limite le nombre de dossiers et de documents affichés sur la page du dossier de visualisation. D\'autres objets seront chargés lors du défilement jusqu\'à la fin de la page. Réglez sur 0 pour toujours afficher tous les objets.',
'settings_maxRecursiveCount' => 'Nombre maximal de document/dossier récursif',
'settings_maxRecursiveCount_desc' => 'Nombre maximum de documents et répertoires dont l\'accès sera vérifié, lors d\'un décompte récursif. Si ce nombre est dépassé, le nombre de documents et répertoires affichés sera approximé.',
'settings_maxSizeForFullText' => 'Taille maximum pour l\'indexation instantanée',
@ -1449,6 +1469,7 @@ Nom : [username]
'sk_SK' => 'Slovaque',
'space_used_on_data_folder' => 'Espace utilisé dans le répertoire de données',
'splash_added_to_clipboard' => 'Ajouté au presse-papier',
'splash_add_access' => '',
'splash_add_attribute' => 'Attribut ajouté',
'splash_add_group' => 'Nouveau groupe ajouté',
'splash_add_group_member' => 'Nouveau membre ajouté au groupe',
@ -1458,12 +1479,14 @@ Nom : [username]
'splash_add_user' => 'Nouvel utilisateur ajouté',
'splash_cleared_cache' => 'Cache vidé',
'splash_cleared_clipboard' => 'Presse-papier vidé',
'splash_delete_access' => '',
'splash_document_added' => 'Document ajouté',
'splash_document_checkedout' => 'Document bloqué',
'splash_document_edited' => 'Document sauvegardé',
'splash_document_indexed' => 'Document « [name] » indexé.',
'splash_document_locked' => 'Document vérouillé',
'splash_document_unlocked' => 'Document déverrouillé',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Attribut modifié',
'splash_edit_event' => 'Événement modifié',
'splash_edit_group' => 'Groupe modifié',
@ -1474,14 +1497,17 @@ Nom : [username]
'splash_error_send_download_link' => 'Erreur lors de lenvoi du lien de téléchargement',
'splash_folder_edited' => 'Dossier modifié',
'splash_importfs' => '[docs] documents et [folders] dossiers importés',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Identifiant de répertoire invalide',
'splash_invalid_searchterm' => 'Recherche invalide',
'splash_moved_clipboard' => 'Presse-papier déplacé dans le répertoire courant',
'splash_move_document' => 'Document déplacé',
'splash_move_folder' => 'Dossier déplacé',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => 'Réception ajoutée avec succès',
'splash_removed_from_clipboard' => 'Enlevé du presse-papiers',
'splash_rm_attribute' => 'Attribut supprimé',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Document supprimé',
'splash_rm_download_link' => 'Lien de téléchargement supprimé',
'splash_rm_folder' => 'Dossier supprimé',
@ -1495,11 +1521,13 @@ Nom : [username]
'splash_save_user_data' => 'Données utilisateur enregistrées',
'splash_send_download_link' => 'Lien de téléchargement envoyé par e-mail',
'splash_send_login_data' => 'Informations de connexion envoyées',
'splash_setowner' => '',
'splash_settings_saved' => 'Configuration sauvegardée',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Utilisateur de substitution',
'splash_switched_back_user' => 'Revenu à l\'utilisateur initial',
'splash_toogle_group_manager' => 'Responsable de groupe changé',
'splash_transfer_document' => '',
'splash_transfer_document' => 'Document transféré',
'splash_transfer_objects' => 'Objets transférés',
'state_and_next_state' => 'État initial/suivant',
'statistic' => 'Statistiques',
@ -1520,7 +1548,7 @@ Nom : [username]
'status_reviewer_removed' => 'Examinateur retiré du processus',
'status_revised' => '',
'status_revision_rejected' => 'Rejeté',
'status_revision_sleeping' => '',
'status_revision_sleeping' => 'en attente',
'status_revisor_removed' => '',
'status_unknown' => 'Inconnu',
'storage_size' => 'Taille occupée',
@ -1531,7 +1559,7 @@ Nom : [username]
'submit_password_forgotten' => 'Envoyer',
'submit_receipt' => 'Confirmer la réception',
'submit_review' => 'Soumettre la vérification',
'submit_revision' => '',
'submit_revision' => 'Soumettre la révision',
'submit_userinfo' => 'Soumettre info',
'subsribe_timelinefeed' => 'Sabonner au flux RSS',
'substitute_to_user' => 'Basculer sur \'[username]\'',
@ -1581,8 +1609,8 @@ Nom : [username]
'toggle_qrcode' => 'Afficher/masquer le QR code',
'to_before_from' => 'La date de fin ne peut pas être avant la date de début.',
'transfer_document' => 'Transférer le document',
'transfer_no_read_access' => '',
'transfer_no_write_access' => 'L\'utilisateur n\'a pas accès à ce répertoire',
'transfer_no_read_access' => 'Lutilisateur na pas le droit de lecture dans ce dossier',
'transfer_no_write_access' => 'Lutilisateur na pas le droit décriture dans ce dossier',
'transfer_objects' => 'Transférer des objets',
'transfer_objects_to_user' => 'Nouveau propriétaire',
'transfer_to_user' => 'Transférer vers un utilisateur',

View File

@ -274,6 +274,7 @@ Internet poveznica: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Potvrdi lozinku',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Da li zaista želite ukloniti datoteku "[arkname]"?<br>Oprez: ova radnja nije povratna.',
'confirm_rm_document' => 'Da li zaista želite ukloniti dokument \'[documentname]\'?<br>Oprez: ova radnja nije povratna.',
'confirm_rm_dump' => 'Da li zaista želite ukloniti datoteku "[dumpname]"?<br>Oprez: ova radnja nije povratna.',
@ -1023,6 +1024,7 @@ Internet poveznica: [url]',
'rewind_workflow_warning' => 'Ako vratite tok radan u njegovo početno, prijašnji zapisi o tijeku rada za ovaj dokument bit će izbrisani i ne mogu se vratiti.',
'rm_attrdef' => 'Uklonite definiciju atributa',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Uklonite kategoriju',
'rm_document' => 'Ukloni dokument',
'rm_document_category' => 'Uklonite kategoriju',
@ -1083,7 +1085,9 @@ Internet poveznica: [url]',
'seconds' => 'sekunde',
'selection' => 'Odabir',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Kliknite za odabir kategorije',
'select_group' => '',
'select_groups' => 'Kliknite za odabir grupa',
'select_grp_approvers' => 'Kliknite za odabir validatora grupe',
'select_grp_ind_approvers' => '',
@ -1101,7 +1105,9 @@ Internet poveznica: [url]',
'select_ind_reviewers' => 'Kliknite za odabir pojedinačnog recezenta',
'select_ind_revisors' => 'Kliknite za odabir pojedinačnog revizora',
'select_one' => 'Odaberite jednog',
'select_user' => '',
'select_users' => 'Kliknite za odabir korisnika',
'select_value' => '',
'select_workflow' => 'Odaberite tok rada',
'send_email' => '',
'send_login_data' => '',
@ -1170,6 +1176,10 @@ Internet poveznica: [url]',
'settings_dbVersion' => 'Shema baze podataka je prestara',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => 'Zadana metoda pretrage',
'settings_defaultSearchMethod_desc' => 'Zadana metoda pretrage, kada se pretraživanje pokreće putem formulara iz glavnog izbornika',
'settings_defaultSearchMethod_valdatabase' => 'baza podataka',
@ -1448,6 +1458,7 @@ Internet poveznica: [url]',
'sk_SK' => 'Slovački',
'space_used_on_data_folder' => 'Prostor iskorišten na podatkovnoj mapi',
'splash_added_to_clipboard' => 'Dodano u međuspremnik',
'splash_add_access' => '',
'splash_add_attribute' => 'Dodan novi atribut',
'splash_add_group' => 'Dodana nova grupa',
'splash_add_group_member' => 'Dodan novi član grupe',
@ -1457,12 +1468,14 @@ Internet poveznica: [url]',
'splash_add_user' => 'Dodan novi korisnik',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Očišćen međuspremnik',
'splash_delete_access' => '',
'splash_document_added' => 'Dokument dodan',
'splash_document_checkedout' => 'Dokument odjavljen',
'splash_document_edited' => 'Dokument pohranjen',
'splash_document_indexed' => '',
'splash_document_locked' => 'Dokument zaključan',
'splash_document_unlocked' => 'Dokument otključan',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Atribut pohranjen',
'splash_edit_event' => '',
'splash_edit_group' => 'Groupa pohranjena',
@ -1473,14 +1486,17 @@ Internet poveznica: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Pohrani izmjene mape',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Nevažeći ID mape',
'splash_invalid_searchterm' => 'Nevažeći traženi pojam',
'splash_moved_clipboard' => 'Međuspremnik je premješten u trenutnu mapu',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Uklonjeno iz međuspremnika',
'splash_rm_attribute' => 'Atribut uklonjen',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Dokument uklonjen',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Mapa izbrisana',
@ -1494,7 +1510,9 @@ Internet poveznica: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Postavke pohranjene',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Zamjenski korisnik',
'splash_switched_back_user' => 'Prebačeno nazad na izvornog korisnika',
'splash_toogle_group_manager' => 'Zamjenjen upravitelj grupe',

View File

@ -269,6 +269,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Jelszó megerősítése',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Biztosan el kívánja távolítani ezt az állományt "[arkname]"?<br>Legyen óvatos: Ez a művelet nem vonható vissza.',
'confirm_rm_document' => 'Biztosan el kívánja távolítani ezt a dokumentumot \'[documentname]\'?<br> Legyen óvatos: Ezt a műveletet nem vonható vissza.',
'confirm_rm_dump' => 'Biztosan el kívánja távolítani ezt az állományt "[dumpname]"?<br>Legyen óvatos: Ez a művelet nem vonható vissza.',
@ -1002,6 +1003,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Ha visszajátssza a munkafolyamatot a kezdeti állapotába, akkor a teljes munkafolyamat napló törlésre kerül és többé nem lehet helyreállítani.',
'rm_attrdef' => 'Jellemző meghatározás eltávolítása',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Kategória eltávolítása',
'rm_document' => 'Dokumentum eltávolítása',
'rm_document_category' => 'Kategória eltávolítása',
@ -1061,7 +1063,9 @@ URL: [url]',
'seconds' => 'másodperc',
'selection' => 'Selection',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Kattintson a kategória kiválasztásához',
'select_group' => '',
'select_groups' => 'Kattintson a csoportok kijelöléséhez',
'select_grp_approvers' => 'Kattintson a csoport jóváhagyó kijelöléséhez',
'select_grp_ind_approvers' => '',
@ -1079,7 +1083,9 @@ URL: [url]',
'select_ind_reviewers' => 'Kattintson az önálló felülvizsgáló kijelöléséhez',
'select_ind_revisors' => '',
'select_one' => 'Vßlasszon egyet',
'select_user' => '',
'select_users' => 'Kattintson a felhasználó kiválasztásához',
'select_value' => '',
'select_workflow' => 'Munkafolyamat választás',
'send_email' => '',
'send_login_data' => '',
@ -1148,6 +1154,10 @@ URL: [url]',
'settings_dbVersion' => 'Adatbázis séma túl régi',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => 'Alapértelmezett keresési módszer',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => 'adatbázis',
@ -1426,6 +1436,7 @@ URL: [url]',
'sk_SK' => 'Szlovák',
'space_used_on_data_folder' => 'Használt terület az adat mappában',
'splash_added_to_clipboard' => 'Vágólaphoz hozzáadva',
'splash_add_access' => '',
'splash_add_attribute' => 'Új jellemző hozzáadva',
'splash_add_group' => 'Új csoport hozzáadva',
'splash_add_group_member' => 'Új csoporttag hozzáadva',
@ -1435,12 +1446,14 @@ URL: [url]',
'splash_add_user' => 'Új felhasználó hozzáadva',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Vágólap törölve',
'splash_delete_access' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',
'splash_document_edited' => 'Dokumentum elmentve',
'splash_document_indexed' => '',
'splash_document_locked' => 'Dokumentum zárolva',
'splash_document_unlocked' => 'Dokumentum zárolás feloldva',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Jellemző mentve',
'splash_edit_event' => '',
'splash_edit_group' => 'Csoport mentve',
@ -1451,14 +1464,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Mappa változásainak mentése',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Érvénytelen mappa azonosító',
'splash_invalid_searchterm' => 'Érvénytelen keresési feltétel',
'splash_moved_clipboard' => 'Vágólap tartalom áthelyezve az aktuális mappába',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Eltávolítva a vágólapról',
'splash_rm_attribute' => 'Jellemző eltávolítva',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Dokumentum eltávolítva',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Mappa törölve',
@ -1472,7 +1488,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Beállítások elmentve',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Helyettesített felhasználó',
'splash_switched_back_user' => 'Visszaváltva az eredeti felhasználóra',
'splash_toogle_group_manager' => 'Csoport kezelő kiválasztva',

View File

@ -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 (1588), rickr (144), s.pnt (26)
// Translators: Admin (1592), rickr (144), s.pnt (26)
$text = array(
'2_factor_auth' => 'Autorizzazione a due fattori',
@ -275,6 +275,7 @@ URL: [url]',
'confirm_move_document' => 'Conferma lo spostamento del documento.',
'confirm_move_folder' => 'Si prega di confermare lo spostamento della cartella.',
'confirm_pwd' => 'Conferma la password',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Vuoi davvero rimuovere il file "[arkname]"? Attenzione: questa operazione non può essere annullata.',
'confirm_rm_document' => 'Vuoi veramente eliminare il documento "[documentname]"? Attenzione: questa operazione non può essere annullata.',
'confirm_rm_dump' => 'Vuoi davvero rimuovere il file "[dumpname]"? Attenzione: questa operazione non può essere annullata.',
@ -601,7 +602,7 @@ URL: [url]',
'index_error' => '',
'index_folder' => 'Indicizza cartella',
'index_pending' => '',
'index_waiting' => '',
'index_waiting' => 'Attendi',
'individuals' => 'Singoli',
'indivіduals_in_groups' => 'I membri de la gruppo',
'info_recipients_tab_not_released' => '',
@ -1035,6 +1036,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Se si inverte un flusso di lavoro al suo stato iniziale ogni traccia del flusso di lavoro originale per questo documento sarà cancellata permanentemente.',
'rm_attrdef' => 'Rimuovi attributo',
'rm_attrdefgroup' => 'Rimuovere questo gruppo di attributi',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Rimuovi categoria',
'rm_document' => 'Rimuovi documento',
'rm_document_category' => 'Rimuovi categoria',
@ -1095,7 +1097,9 @@ URL: [url]',
'seconds' => 'secondi',
'selection' => 'Selezione',
'select_attrdefgrp_show' => 'Scegli quando mostrare',
'select_attribute_value' => '',
'select_category' => 'Clicca per selezionare la categoria',
'select_group' => '',
'select_groups' => 'Clicca per selezionare i gruppi',
'select_grp_approvers' => 'Seleziona gruppo approvatore',
'select_grp_ind_approvers' => 'Fare clic per scegliere il gruppo',
@ -1113,7 +1117,9 @@ URL: [url]',
'select_ind_reviewers' => 'Seleziona revisore',
'select_ind_revisors' => 'Seleziona singoli revisori',
'select_one' => 'Seleziona uno',
'select_user' => '',
'select_users' => 'Clicca per selezionare gli utenti',
'select_value' => 'Selezionare un valore',
'select_workflow' => 'Seleziona il flusso di lavoro',
'send_email' => '',
'send_login_data' => '',
@ -1182,6 +1188,10 @@ URL: [url]',
'settings_dbVersion' => 'Schema del database obsoleto',
'settings_defaultAccessDocs' => 'Diritto di accesso per i nuovi documenti',
'settings_defaultAccessDocs_desc' => 'Quando si crea un nuovo documento, questo sarà il diritto di accesso predefinito',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => 'fine',
'settings_defaultDocPosition_val_start' => 'inizio',
'settings_defaultSearchMethod' => 'Metodo di ricerca predefinito',
'settings_defaultSearchMethod_desc' => 'Metodo di ricerca predefinito, quando la ricerca viene avviata dal modulo di ricerca nel menu principale.',
'settings_defaultSearchMethod_valdatabase' => 'database',
@ -1460,6 +1470,7 @@ URL: [url]',
'sk_SK' => 'Slovacco',
'space_used_on_data_folder' => 'Spazio utilizzato dai dati',
'splash_added_to_clipboard' => 'Aggiunto agli appunti',
'splash_add_access' => '',
'splash_add_attribute' => 'Attributo aggiunto',
'splash_add_group' => 'Gruppo aggiunto',
'splash_add_group_member' => 'Membro aggiunto al gruppo',
@ -1469,12 +1480,14 @@ URL: [url]',
'splash_add_user' => 'Utente aggiunto',
'splash_cleared_cache' => 'Cache cancellata',
'splash_cleared_clipboard' => 'Appunti cancellati',
'splash_delete_access' => '',
'splash_document_added' => 'Documento aggiunto',
'splash_document_checkedout' => 'Documento approvato',
'splash_document_edited' => 'Documento modificato',
'splash_document_indexed' => '',
'splash_document_locked' => 'Documento bloccato',
'splash_document_unlocked' => 'Documento sbloccato',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Attributo modificato',
'splash_edit_event' => '',
'splash_edit_group' => 'Gruppo modificato',
@ -1485,14 +1498,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Cartella modificata',
'splash_importfs' => 'Importati [Documenti] documenti e cartelle [cartelle]',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'ID cartella non valido',
'splash_invalid_searchterm' => 'Termine di ricerca non valido',
'splash_moved_clipboard' => 'Appunti trasferiti nella cartella corrente',
'splash_move_document' => 'Documento spostato',
'splash_move_folder' => 'Cartella spostato',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Rimosso dagli appunti',
'splash_rm_attribute' => 'Attributo rimosso',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Documento rimosso',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Cartella eliminata',
@ -1506,7 +1522,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Impostazioni salvate',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Utente sostituito',
'splash_switched_back_user' => 'Ritorno all\'utente originale',
'splash_toogle_group_manager' => 'Amministratore di gruppo invertito',

View File

@ -276,6 +276,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => '암호 확인',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => '정말로 "[arkname]" 파일을 지울까요?
<br>주의: 행동은 되돌릴 없습니다.',
'confirm_rm_document' => '정말로 "[documentname]" 문서를 지울까요?<br>주의: 이 행동은 되돌릴 수 없습니다.',
@ -1017,6 +1018,7 @@ URL: [url]',
'rewind_workflow_warning' => '당신이 초기 상태로 워크플로를 뒤로 경우, 이 문서의 전체 워크플로우 로그가 삭제되며 복구 할 수 없습니다.',
'rm_attrdef' => '속성 정의 제거',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => '범주 제거',
'rm_document' => '문서 지우기',
'rm_document_category' => '카테고리 제거',
@ -1077,7 +1079,9 @@ URL : [url]',
'seconds' => '초',
'selection' => '선택',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => '범주를 선택합니다',
'select_group' => '',
'select_groups' => '그룹을 선택합니다',
'select_grp_approvers' => '그룹 승인을 선택합니다',
'select_grp_ind_approvers' => '그룹 승인 선택',
@ -1095,7 +1099,9 @@ URL : [url]',
'select_ind_reviewers' => '클릭하여 개별 검토자를 고릅니다.',
'select_ind_revisors' => '개별 감사를 선택합니다',
'select_one' => '선택',
'select_user' => '',
'select_users' => '사용자를 선택합니다',
'select_value' => '',
'select_workflow' => '선택 워크플로우',
'send_email' => '전자우편 보내기',
'send_login_data' => '',
@ -1164,6 +1170,10 @@ URL : [url]',
'settings_dbVersion' => '오래된 데이터베이스 스키마',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '기본 검색 방법 설정',
'settings_defaultSearchMethod_desc' => '기본 검색 설정',
'settings_defaultSearchMethod_valdatabase' => '기본 검색 방법 설정',
@ -1442,6 +1452,7 @@ URL : [url]',
'sk_SK' => '슬로바키아어',
'space_used_on_data_folder' => '데이터 폴더에 사용되는 공간',
'splash_added_to_clipboard' => '클립 보드에 추가',
'splash_add_access' => '',
'splash_add_attribute' => '새로운 속성 추가',
'splash_add_group' => '새 그룹이 추가',
'splash_add_group_member' => '새 그룹 구성원 추가',
@ -1451,12 +1462,14 @@ URL : [url]',
'splash_add_user' => '새 사용자 추가',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => '클립 보드 비우기',
'splash_delete_access' => '',
'splash_document_added' => '문서를 추가',
'splash_document_checkedout' => '문서 체크아웃',
'splash_document_edited' => '문서 저장',
'splash_document_indexed' => '',
'splash_document_locked' => '문서 잠김',
'splash_document_unlocked' => '문서 잠금 해제',
'splash_edit_access' => '',
'splash_edit_attribute' => '속성 저장',
'splash_edit_event' => '',
'splash_edit_group' => '그룹 저장',
@ -1467,14 +1480,17 @@ URL : [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => '저장 폴더 변경',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => '잘못된 폴더 ID',
'splash_invalid_searchterm' => '잘못된 검색 범위',
'splash_moved_clipboard' => '클립 보드가 현재 폴더로 이동',
'splash_move_document' => '문서 옮겨짐',
'splash_move_folder' => '폴더 옮겨짐',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => '클립 보드에서 제거',
'splash_rm_attribute' => '속성 제거',
'splash_rm_attr_value' => '',
'splash_rm_document' => '문서 삭제',
'splash_rm_download_link' => '',
'splash_rm_folder' => '폴더 삭제',
@ -1488,7 +1504,9 @@ URL : [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => '설정 저장',
'splash_set_default_access' => '',
'splash_substituted_user' => '전환된 사용자',
'splash_switched_back_user' => '원래 사용자로 전환',
'splash_toogle_group_manager' => '그룹 관리자 전환',

View File

@ -267,6 +267,7 @@ URL: [url]',
'confirm_move_document' => 'Bevestig verplaatsing van document',
'confirm_move_folder' => 'Bevestig de verplaatsing van de map',
'confirm_pwd' => 'Bevestig wachtwoord',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Weet U zeker dat U het bestand "[arkname]" wilt verwijderen?<br>Let op: deze handeling kan niet ongedaan worden gemaakt.',
'confirm_rm_document' => 'Weet U zeker dat U het document \'[documentname]\' wilt verwijderen?<br>Pas op: deze handeling kan niet ongedaan worden gemaakt.',
'confirm_rm_dump' => 'Weet U zeker dat U het bestand "[dumpname]" wilt verwijderen?<br>Let op: deze handeling kan niet ongedaan worden gemaakt.',
@ -1038,6 +1039,7 @@ URL: [url]',
'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 kenmerkdefinitie',
'rm_attrdefgroup' => 'Verwijder kenmerkdefinitie-groep',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Verwijder categorie',
'rm_document' => 'Verwijder document',
'rm_document_category' => 'Verwijder categorie',
@ -1098,7 +1100,9 @@ URL: [url]',
'seconds' => 'seconden',
'selection' => 'Selectie',
'select_attrdefgrp_show' => 'Toon attribut definities-groep',
'select_attribute_value' => '',
'select_category' => 'klik om categorie te selecteren',
'select_group' => '',
'select_groups' => 'Klik om groep te selecteren',
'select_grp_approvers' => 'Klik om beoordelaars te selecteren',
'select_grp_ind_approvers' => 'Klik om beoordelaars te selecteren',
@ -1116,7 +1120,9 @@ URL: [url]',
'select_ind_reviewers' => 'Klik om individuele beoordelaar te selecteren',
'select_ind_revisors' => 'Klik voor individuele herziners',
'select_one' => 'Selecteer een',
'select_user' => '',
'select_users' => 'Klik om gebruikers te selecteren',
'select_value' => '',
'select_workflow' => 'Selecteer workflow',
'send_email' => 'Verstuur email',
'send_login_data' => 'Verstuur Login-data',
@ -1194,6 +1200,10 @@ Name: [username]
'settings_dbVersion' => 'Database schema te oud',
'settings_defaultAccessDocs' => 'Standaard toegangsrechten voor nieuwe documenten',
'settings_defaultAccessDocs_desc' => 'Als een nieuw document wordt gecreëerd, worden dit de nieuwe toegangsrechten.',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => 'Standaard zoekmethode',
'settings_defaultSearchMethod_desc' => 'Default zoekmethode = op documentnaam / fulltext-search',
'settings_defaultSearchMethod_valdatabase' => 'Default zoekmethode (Documentnaam)',
@ -1472,6 +1482,7 @@ Name: [username]
'sk_SK' => 'Slowaaks',
'space_used_on_data_folder' => 'Gebruikte diskomvang in data map',
'splash_added_to_clipboard' => 'Toegevoegd aan klembord',
'splash_add_access' => '',
'splash_add_attribute' => 'Nieuw attribuut toegevoegd',
'splash_add_group' => 'Nieuwe groep toegevoegd',
'splash_add_group_member' => 'Nieuwe groepslid toegevoegd',
@ -1481,12 +1492,14 @@ Name: [username]
'splash_add_user' => 'Nieuwe gebruiker toegevoegd',
'splash_cleared_cache' => 'Cache leeggemaakt',
'splash_cleared_clipboard' => 'Klembord leeg gemaakt',
'splash_delete_access' => '',
'splash_document_added' => 'Nieuw document toegevoegd',
'splash_document_checkedout' => 'Document in gebruik genomen',
'splash_document_edited' => 'Document opgeslagen',
'splash_document_indexed' => 'Document geïndexeerd',
'splash_document_locked' => 'Document vergrendeld',
'splash_document_unlocked' => 'Document ontgrendeld',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Attribuut opgeslagen',
'splash_edit_event' => 'Gebeurtenis opgeslagen',
'splash_edit_group' => 'Groep opgeslagen',
@ -1497,14 +1510,17 @@ Name: [username]
'splash_error_send_download_link' => 'Fout bij verzenden download-link',
'splash_folder_edited' => 'Opslaan mapwijzigingen',
'splash_importfs' => 'Geïmporteerd: [docs] documenten en [folders] mappen',
'splash_inherit_access' => '',
'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_notinherit_access' => '',
'splash_receipt_update_success' => 'Ontvangst succesvol toegevoegd',
'splash_removed_from_clipboard' => 'Verwijderd van het klembord',
'splash_rm_attribute' => 'Attribuut verwijderd',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Document verwijderd',
'splash_rm_download_link' => 'Download-link verwijderd',
'splash_rm_folder' => 'Map verwijderd',
@ -1518,7 +1534,9 @@ Name: [username]
'splash_save_user_data' => 'Gebruikersgegevens opgeslagen',
'splash_send_download_link' => 'Download-link verzonden',
'splash_send_login_data' => 'Login-gegevens verzonden',
'splash_setowner' => '',
'splash_settings_saved' => 'Instellingen opgeslagen',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Invallers gebruiker',
'splash_switched_back_user' => 'Teruggeschakeld naar de oorspronkelijke gebruiker',
'splash_toogle_group_manager' => 'Group manager toogled',

View File

@ -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 (786), netixw (84), romi (93), uGn (112)
// Translators: Admin (787), netixw (84), romi (93), uGn (112)
$text = array(
'2_factor_auth' => '',
@ -262,6 +262,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Potwierdź hasło',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Czy rzeczywiście chcesz usunąć plik "[arkname]"?<br>Ostrożnie: Ta operacja nie może być cofnięta.',
'confirm_rm_document' => 'Czy rzeczywiście chcesz usunąć dokument \'[documentname]\'?<br>Ostrożnie: Ta operacja nie może być cofnięta.',
'confirm_rm_dump' => 'Czy rzeczywiście chcesz usunąć plik "[dumpname]"?<br>Ostrożnie: Ta operacja nie może być cofnięta.',
@ -981,6 +982,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Jeżeli przewiniesz proces do stanu początkowego, to cały log dla tego dokumentu zostanie usunięty bezpowrotnie.',
'rm_attrdef' => 'Usuń definicję atrybutu',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Usuń kategorię',
'rm_document' => 'Usuń dokument',
'rm_document_category' => 'Usuń kategorię',
@ -1041,7 +1043,9 @@ URL: [url]',
'seconds' => 'sekund',
'selection' => 'Wybierz',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Kliknij by wybrać kategorię',
'select_group' => '',
'select_groups' => 'Kliknij by wybrać grupy',
'select_grp_approvers' => 'Kliknij by wybrać grupę zatwierdzającą',
'select_grp_ind_approvers' => '',
@ -1059,7 +1063,9 @@ URL: [url]',
'select_ind_reviewers' => 'Kliknij by wybrać recenzenta',
'select_ind_revisors' => '',
'select_one' => 'Wybierz',
'select_user' => '',
'select_users' => 'Kliknij by wybrać użytkowników',
'select_value' => 'Wybrać wartość',
'select_workflow' => 'Wybierz proces',
'send_email' => '',
'send_login_data' => '',
@ -1128,6 +1134,10 @@ URL: [url]',
'settings_dbVersion' => 'Schemat bazy danych jest za stary',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => 'baza danych',
@ -1406,6 +1416,7 @@ URL: [url]',
'sk_SK' => 'słowacki',
'space_used_on_data_folder' => 'Przestrzeń zajęta przez folder danych',
'splash_added_to_clipboard' => 'Dodano do schowka',
'splash_add_access' => '',
'splash_add_attribute' => 'Dodano nowy atrybut',
'splash_add_group' => 'Dodano nową grupę',
'splash_add_group_member' => 'Dodano nowego członka grupy',
@ -1415,12 +1426,14 @@ URL: [url]',
'splash_add_user' => 'Dodano nowego użytkownika',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Wyczyszczono schowek',
'splash_delete_access' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',
'splash_document_edited' => 'Dokument został zapisany',
'splash_document_indexed' => '',
'splash_document_locked' => 'Dokument zablokowany',
'splash_document_unlocked' => 'Odblokowano dokument',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Zapisano atrybuty',
'splash_edit_event' => '',
'splash_edit_group' => 'Grupa zapisana',
@ -1431,14 +1444,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Zapisz zmiany folderu',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Nieprawidłowy identyfikator folderu',
'splash_invalid_searchterm' => 'Nieprawidłowa wartość wyszukiwania',
'splash_moved_clipboard' => 'Schowek został przeniesiony do bieżącego folderu',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Usunięto ze schowka',
'splash_rm_attribute' => 'Usunięto atrybut',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Dokument usunięto',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Folder usunięty',
@ -1452,7 +1468,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Zmiany zapisano',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Zmieniono użytkownika',
'splash_switched_back_user' => 'Przełączono z powrotem do oryginalnego użytkownika',
'splash_toogle_group_manager' => 'Przełączono grupę menadżerów',

View File

@ -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 (967), flaviove (627), lfcristofoli (352)
// Translators: Admin (972), flaviove (627), lfcristofoli (352)
$text = array(
'2_factor_auth' => '',
@ -269,6 +269,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Confirme Senha',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Do you really want to remove the file "[arkname]"?<br>Be careful: This action cannot be undone.',
'confirm_rm_document' => 'Deseja realmente remover o documento \'[documentname]\'?<br>Por favor, tenha cuidado porque esta ação não poderá ser desfeita.',
'confirm_rm_dump' => 'Do you really want to remove the file "[dumpname]"?<br>Be careful: This action cannot be undone.',
@ -999,6 +1000,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Se você voltar um fluxo de trabalho ao seu estado inicial, então o log todo o fluxo de trabalho para este documento será eliminado e não poderá ser recuperado.',
'rm_attrdef' => 'Remover definição de atributo',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Apague esta categoria',
'rm_document' => 'Remove documento',
'rm_document_category' => 'Remover categoria',
@ -1059,7 +1061,9 @@ URL: [url]',
'seconds' => 'segundos',
'selection' => 'Selection',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Clique para selecionar a categoria',
'select_group' => '',
'select_groups' => 'Clique para selecionar os grupos',
'select_grp_approvers' => 'Clique para selecionar o grupo aprovador',
'select_grp_ind_approvers' => '',
@ -1077,7 +1081,9 @@ URL: [url]',
'select_ind_reviewers' => 'Clique para selecionar revisor individual',
'select_ind_revisors' => '',
'select_one' => 'Selecione um',
'select_user' => '',
'select_users' => 'Clique para selecionar os usuários',
'select_value' => 'Selecionar opção',
'select_workflow' => 'Selecione o fluxo de trabalho',
'send_email' => '',
'send_login_data' => '',
@ -1146,6 +1152,10 @@ URL: [url]',
'settings_dbVersion' => 'Esquema de banco de dados muito antigo',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => 'Forma padrão para buscas',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => 'Banco de Dados',
@ -1424,6 +1434,7 @@ URL: [url]',
'sk_SK' => 'Eslovaco',
'space_used_on_data_folder' => 'Space used on data folder',
'splash_added_to_clipboard' => 'Adicionado a área de transferência',
'splash_add_access' => '',
'splash_add_attribute' => 'Novo atributo adicionado',
'splash_add_group' => 'Novo grupo adicionado',
'splash_add_group_member' => 'Novo membro do grupo adicionado',
@ -1433,12 +1444,14 @@ URL: [url]',
'splash_add_user' => 'Novo usuário adicionado',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Área de transferência limpada',
'splash_delete_access' => '',
'splash_document_added' => 'Documento inserido',
'splash_document_checkedout' => '',
'splash_document_edited' => 'Documento salvo',
'splash_document_indexed' => '',
'splash_document_locked' => 'Documento bloqueado',
'splash_document_unlocked' => 'Documento desbloqueado',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Atributo salvo',
'splash_edit_event' => '',
'splash_edit_group' => 'Grupo salvo',
@ -1449,14 +1462,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Salvar modificação de pastas',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'ID de pasta inválida',
'splash_invalid_searchterm' => 'Termo de pesquisa inválido',
'splash_moved_clipboard' => 'Área de transferência movida para a pasta corrente',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Remover da área de transferência',
'splash_rm_attribute' => 'Atributo removido',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Documento removido',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Pasta excluida',
@ -1470,7 +1486,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Configurações salvas',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Usuário substituido',
'splash_switched_back_user' => 'Comutada de volta ao usuário original',
'splash_toogle_group_manager' => 'Gerente Grupo alternado',
@ -1492,7 +1510,7 @@ URL: [url]',
'status_recipient_removed' => '',
'status_reviewed' => '',
'status_reviewer_rejected' => '',
'status_reviewer_removed' => '',
'status_reviewer_removed' => 'Revisor removido do processo',
'status_revised' => '',
'status_revision_rejected' => '',
'status_revision_sleeping' => '',
@ -1521,7 +1539,7 @@ URL: [url]',
'switched_to' => 'Comutado para',
'takeOverAttributeValue' => '',
'takeOverGrpApprover' => '',
'takeOverGrpReviewer' => '',
'takeOverGrpReviewer' => 'Assuma o grupo de revisores da última versão.',
'takeOverIndApprover' => '',
'takeOverIndReviewer' => '',
'tasks' => '',
@ -1556,8 +1574,8 @@ URL: [url]',
'toggle_qrcode' => '',
'to_before_from' => 'A data de término não pode ser anterior a data de início',
'transfer_document' => 'Transferir documento',
'transfer_no_read_access' => '',
'transfer_no_write_access' => '',
'transfer_no_read_access' => 'O usuário não possui acesso de leitura na pasta',
'transfer_no_write_access' => 'O usuário não possui acesso de escrita na pasta',
'transfer_objects' => '',
'transfer_objects_to_user' => '',
'transfer_to_user' => '',

View File

@ -274,6 +274,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Confirmă parola',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Sigur doriți să eliminați fișierul "[arkname]"?<br>Fiți atenți: Această acțiune nu poate fi anulată.',
'confirm_rm_document' => 'Sigur doriți să eliminați documentul \'[documentname]\'?<br>Fiți atenți: Această acțiune nu poate fi anulată.',
'confirm_rm_dump' => 'Sigur doriți să eliminați fișierul "[dumpname]"?<br>Fiți atenți: Această acțiune nu poate fi anulată.',
@ -1024,6 +1025,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Dacă derulati înapoi un workflow la starea inițială, atunci tot log-ul workflow-ului pentru acest document vor fi șters și nu va mai putea fi recuperat.',
'rm_attrdef' => 'Eliminați definiție atribut',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Eliminați categorie',
'rm_document' => 'Eliminați document',
'rm_document_category' => 'Eliminați categorie',
@ -1084,7 +1086,9 @@ URL: [url]',
'seconds' => 'secunde',
'selection' => 'Selecție',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Click pentru a selecta categoria',
'select_group' => '',
'select_groups' => 'Click pentru a selecta grupuri',
'select_grp_approvers' => 'Click pentru a selecta grupul de aprobatori',
'select_grp_ind_approvers' => '',
@ -1102,7 +1106,9 @@ URL: [url]',
'select_ind_reviewers' => 'Click pentru a selecta un revizuitor individual',
'select_ind_revisors' => 'Faceti click pentru a selecta retrimitori individuali',
'select_one' => 'Selectați unul',
'select_user' => '',
'select_users' => 'Click pentru a selecta utilizatori',
'select_value' => '',
'select_workflow' => 'Selectați workflow',
'send_email' => '',
'send_login_data' => '',
@ -1171,6 +1177,10 @@ URL: [url]',
'settings_dbVersion' => 'Schema bazei de date este prea veche',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => 'metoda de cautare implicita',
'settings_defaultSearchMethod_desc' => 'Metoda de cautare implicita cand cautarea a fost initiata prin formularul de cautare din meniul principal',
'settings_defaultSearchMethod_valdatabase' => 'baza de date',
@ -1449,6 +1459,7 @@ URL: [url]',
'sk_SK' => 'Slovacă',
'space_used_on_data_folder' => 'Spatiu folosit în folderul de date',
'splash_added_to_clipboard' => 'Adăugat la clipboard',
'splash_add_access' => '',
'splash_add_attribute' => 'Atribut nou adăugat',
'splash_add_group' => 'Grup nou adăugat',
'splash_add_group_member' => 'Membru grup nou adăugat',
@ -1458,12 +1469,14 @@ URL: [url]',
'splash_add_user' => 'Utilizator nou adăugat',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Clipboard golit',
'splash_delete_access' => '',
'splash_document_added' => 'Document adăugat',
'splash_document_checkedout' => 'Document verificat',
'splash_document_edited' => 'Document salvat',
'splash_document_indexed' => '',
'splash_document_locked' => 'Document blocat',
'splash_document_unlocked' => 'Document deblocat',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Atribut salvat',
'splash_edit_event' => '',
'splash_edit_group' => 'Grup salvat',
@ -1474,14 +1487,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Salvați modificările folderului',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'ID folder invalid',
'splash_invalid_searchterm' => 'Termen de căutare invalid',
'splash_moved_clipboard' => 'Clipboard mutat în folderul curent',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Eliminat din clipboard',
'splash_rm_attribute' => 'Atribut eliminat',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Document eliminat',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Folder șters',
@ -1495,7 +1511,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Setări salvate',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Utilizator substituit',
'splash_switched_back_user' => 'Comutat înapoi la utilizatorul original',
'splash_toogle_group_manager' => 'Comută Managerul de grup',

View File

@ -274,6 +274,7 @@ URL: [url]',
'confirm_move_document' => 'Подтвердить перемещение документа',
'confirm_move_folder' => 'Подтвердить перемещение папки',
'confirm_pwd' => 'Подтвердите пароль',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Удалить файл «[arkname]»?<br>Действие <b>необратимо</b>',
'confirm_rm_document' => 'Удалить документ «[documentname]»?<br>Действие <b>необратимо</b>',
'confirm_rm_dump' => 'Удалить файл «[dumpname]»?<br>Действие <b>необратимо</b>',
@ -1031,6 +1032,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Если вы начнёте процесс с начала, то весь журнал процесса для этого документа будет очищен и его невозможно будет восстановить.',
'rm_attrdef' => 'Удалить определение атрибута',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Удалить метку',
'rm_document' => 'Удалить документ',
'rm_document_category' => 'Удалить категорию',
@ -1091,7 +1093,9 @@ URL: [url]',
'seconds' => 'секунды',
'selection' => 'Выбор',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Выберите категорию',
'select_group' => '',
'select_groups' => 'Выберите группы',
'select_grp_approvers' => 'Выберите утверждающую группу',
'select_grp_ind_approvers' => 'Выберите группу',
@ -1109,7 +1113,9 @@ URL: [url]',
'select_ind_reviewers' => 'Выберите индивидуального рецензента',
'select_ind_revisors' => 'Выберите индивидуального ревизора',
'select_one' => 'Выберите',
'select_user' => '',
'select_users' => 'Выберите пользователей',
'select_value' => '',
'select_workflow' => 'Выберите процесс',
'send_email' => '',
'send_login_data' => '',
@ -1178,6 +1184,10 @@ URL: [url]',
'settings_dbVersion' => 'Схема БД устарела',
'settings_defaultAccessDocs' => 'Права доступа к новому документу по умолчанию',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => 'Метод поиска по умолчанию',
'settings_defaultSearchMethod_desc' => 'Метод поиска по умолчанию, когда поиск начинается с поисковой формы главного меню.',
'settings_defaultSearchMethod_valdatabase' => 'база данных',
@ -1456,6 +1466,7 @@ URL: [url]',
'sk_SK' => 'Slovak',
'space_used_on_data_folder' => 'Размер каталога данных',
'splash_added_to_clipboard' => 'Добавлено в буфер обмена',
'splash_add_access' => '',
'splash_add_attribute' => 'Добавлен новый атрибут',
'splash_add_group' => 'Добавлена новая группа',
'splash_add_group_member' => 'Добавлен новый член группы',
@ -1465,12 +1476,14 @@ URL: [url]',
'splash_add_user' => 'Добавлен новый пользователь',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Буфер обмена очищен',
'splash_delete_access' => '',
'splash_document_added' => 'Добавлен документ',
'splash_document_checkedout' => 'Документ отправлен на обработку',
'splash_document_edited' => 'Документ сохранён',
'splash_document_indexed' => '',
'splash_document_locked' => 'Документ заблокирован',
'splash_document_unlocked' => 'Документ разблокирован',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Атрибут сохранён',
'splash_edit_event' => '',
'splash_edit_group' => 'Группа сохранена',
@ -1481,14 +1494,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Изменения каталога сохранены',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Неверный идентификатор каталога',
'splash_invalid_searchterm' => 'Неверный поисковый запрос',
'splash_moved_clipboard' => 'Буфер обмена перенесён в текущий каталог',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Удалён из буфера обмена',
'splash_rm_attribute' => 'Атрибут удалён',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Документ удалён',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Папка удалена',
@ -1502,7 +1518,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Настройки сохранены',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Пользователь переключён',
'splash_switched_back_user' => 'Переключён на исходного пользователя',
'splash_toogle_group_manager' => 'Изменён менеджер группы',

View File

@ -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 (556), destinqo (19), pS2017 (508)
// Translators: Admin (564), destinqo (19), pS2017 (508)
$text = array(
'2_factor_auth' => '2-faktorové overovanie',
@ -101,7 +101,7 @@ URL: [url]',
'approval_deletion_email_subject' => '',
'approval_file' => 'Súbor',
'approval_group' => 'Skupina schválenia',
'approval_log' => '',
'approval_log' => 'Denník schvaľovania',
'approval_request_email' => 'Poziadavka na schvalenie',
'approval_request_email_body' => '',
'approval_request_email_subject' => '',
@ -251,6 +251,7 @@ URL: [url]',
'confirm_move_document' => 'Potvrďte presunutie dokumentu.',
'confirm_move_folder' => 'Potvrďte presunutie zložky.',
'confirm_pwd' => 'Potvrdenie hesla',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Skutočne si prajete odstrániť zálohu "[arkname]"?<br>Buďte opatrní, táto akcia je nezvratná.',
'confirm_rm_document' => 'Naozaj chcete odstrániť dokument \'[documentname]\'?<br>Buďte opatrní: Túto činnosť nemožno vrátiť späť.',
'confirm_rm_dump' => 'Skutočne si prajete odstrániť "[dumpname]"?<br>Buďte opatrní, táto akcia je nezvratná.',
@ -274,7 +275,7 @@ URL: [url]',
'copied_to_checkout_as' => '',
'create_download_link' => 'Vytvoriť odkaz na stiahnutie',
'create_fulltext_index' => 'Vytvoriť fulltext index',
'create_fulltext_index_warning' => '',
'create_fulltext_index_warning' => 'Chystáte sa obnoviť fulltext index, čo môže dlho trvať a môže znížiť výkon systému. Ak chcete pokračovať, potvrďte svoju voľbu.',
'creation_date' => 'Vytvorené',
'cs_CZ' => 'Čestina',
'current_password' => '',
@ -518,7 +519,7 @@ URL: [url]',
'include_content' => 'Zahrnúť obsah',
'include_documents' => 'Vrátane súborov',
'include_subdirectories' => 'Vrátane podzložiek',
'indexing_tasks_in_queue' => '',
'indexing_tasks_in_queue' => 'Indexovacích úloh vo fronte',
'index_done' => 'Hotovo',
'index_error' => 'Chyba',
'index_folder' => 'Indexovať zložku',
@ -724,7 +725,7 @@ URL: [url]',
'only_jpg_user_images' => 'Ako obrázky používateľov je možné použiť iba obrázky .jpg',
'order_by_sequence_off' => '',
'original_filename' => 'Pôvodný názov súboru',
'overall_indexing_progress' => '',
'overall_indexing_progress' => 'Celkový priebeh indexovania',
'owner' => 'Vlastník',
'ownership_changed_email' => 'Majitel zmeneny',
'ownership_changed_email_body' => '',
@ -829,7 +830,7 @@ URL: [url]',
'review_deletion_email_subject' => '',
'review_file' => 'Súbor',
'review_group' => 'Skupina kontroly',
'review_log' => '',
'review_log' => 'Denník recenzií',
'review_request_email' => 'Poziadavka na recenziu',
'review_request_email_body' => '',
'review_request_email_subject' => '',
@ -863,6 +864,7 @@ URL: [url]',
'rewind_workflow_warning' => '',
'rm_attrdef' => 'Odstrániť definíciu atribútu',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Zmazať kategóriu',
'rm_document' => 'Odstrániť dokument',
'rm_document_category' => 'Odstrániť kategóriu',
@ -916,7 +918,9 @@ URL: [url]',
'seconds' => 'sekundy',
'selection' => 'Výber',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Vyber kategóriu',
'select_group' => '',
'select_groups' => '',
'select_grp_approvers' => '',
'select_grp_ind_approvers' => 'Kliknutím vyberte skupinu',
@ -934,7 +938,9 @@ URL: [url]',
'select_ind_reviewers' => 'Kliknutím vyberte individuálneho recenzenta',
'select_ind_revisors' => '',
'select_one' => 'Vyberte jeden',
'select_user' => '',
'select_users' => 'Kliknutím vyberte používateľov',
'select_value' => '',
'select_workflow' => '',
'send_email' => 'Poslať E-mail',
'send_login_data' => 'Poslať prihlasovacie údaje',
@ -1003,6 +1009,10 @@ URL: [url]',
'settings_dbVersion' => '',
'settings_defaultAccessDocs' => 'Štandardný prístup pre nové dokumenty',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => 'databáza',
@ -1281,6 +1291,7 @@ URL: [url]',
'sk_SK' => 'Slovenčina',
'space_used_on_data_folder' => 'Space used on data folder',
'splash_added_to_clipboard' => 'Pridané do schránky',
'splash_add_access' => '',
'splash_add_attribute' => 'Bol pridaný nový atribút',
'splash_add_group' => 'Bola pridaná nová skupina',
'splash_add_group_member' => '',
@ -1290,12 +1301,14 @@ URL: [url]',
'splash_add_user' => 'Pridaný nový používateľ',
'splash_cleared_cache' => 'Vymazanie vyrovnávacej pamäte',
'splash_cleared_clipboard' => 'Schránka bola vymazaná',
'splash_delete_access' => '',
'splash_document_added' => 'Dokument bol pridaný',
'splash_document_checkedout' => '',
'splash_document_edited' => 'Dokument bol uložený',
'splash_document_indexed' => 'Dokument \'[name]\' bol indexovaný.',
'splash_document_locked' => 'Dokument uzamknutý',
'splash_document_unlocked' => 'Dokument odomknutý',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Atribút bol uložený',
'splash_edit_event' => 'Udalosť bola uložená',
'splash_edit_group' => 'Skupina bola uložená',
@ -1306,14 +1319,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Uložiť zmeny zložky',
'splash_importfs' => 'Importované dokumenty [docs] a zložky [folders]',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Neplatné ID zložky',
'splash_invalid_searchterm' => '',
'splash_moved_clipboard' => 'Schránka sa presunula do aktuálnej zložky',
'splash_move_document' => 'Dokument bol presunutý',
'splash_move_folder' => 'Zložka bola presunutá',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Odstránené zo schránky',
'splash_rm_attribute' => 'Atribút bol odstránený',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Dokument odstránený',
'splash_rm_download_link' => 'Odkaz na prevzatie bol odstránený',
'splash_rm_folder' => 'Zložka zmazaná',
@ -1327,7 +1343,9 @@ URL: [url]',
'splash_save_user_data' => 'Používateľské údaje boli uložené',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Nastavenia boli uložené',
'splash_set_default_access' => '',
'splash_substituted_user' => '',
'splash_switched_back_user' => '',
'splash_toogle_group_manager' => '',
@ -1412,9 +1430,9 @@ URL: [url]',
'toggle_manager' => 'Prepnúť stav manager',
'toggle_qrcode' => 'Ukázať/skryť QR kód',
'to_before_from' => '',
'transfer_document' => '',
'transfer_no_read_access' => '',
'transfer_no_write_access' => '',
'transfer_document' => 'Zmeniť vlastníka',
'transfer_no_read_access' => 'Používateľ nemá práva na čítanie v adresári',
'transfer_no_write_access' => 'Používateľ nemá práva na zapisovanie v adresári',
'transfer_objects' => 'Prenesené objekty',
'transfer_objects_to_user' => 'Nový vlastník',
'transfer_to_user' => '',

View File

@ -275,6 +275,7 @@ URL: [url]',
'confirm_move_document' => 'Vänligen bekräfta flytt av dokumentet.',
'confirm_move_folder' => 'Vänligen bekräfta flytt av katalogen.',
'confirm_pwd' => 'Bekräfta lösenord',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Vill du verkligen ta bort filen "[arkname]"?<br>OBS! Om filen tas bort, kan den inte återskapas!',
'confirm_rm_document' => 'Vill du verkligen ta bort dokumentet \'[documentname]\'?<br>OBS! Om dokumentet tas bort, kan det inte återskapas!',
'confirm_rm_dump' => 'Vill du verkligen ta bort filen "[dumpname]"?<br>OBS! Om filen tas bort, kan den inte återskapas!',
@ -1039,6 +1040,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Om du återställer ett arbetsflöde till sin ursprungliga status, kommer hela loggboken för dokumentets arbetsflöde att raderas och kan då inte återställas.',
'rm_attrdef' => 'Ta bort attributdefinition',
'rm_attrdefgroup' => 'Ta bort denna attributgrupp',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Ta bort kategori',
'rm_document' => 'Ta bort',
'rm_document_category' => 'Ta bort kategori',
@ -1099,7 +1101,9 @@ URL: [url]',
'seconds' => 'sekunder',
'selection' => 'Urval',
'select_attrdefgrp_show' => 'Välj visingsalternativ',
'select_attribute_value' => '',
'select_category' => 'Klicka för att välja en kategori',
'select_group' => '',
'select_groups' => 'Välj grupper',
'select_grp_approvers' => 'Välj en grupp som ska godkänna',
'select_grp_ind_approvers' => 'Klicka för att välja grupp',
@ -1117,7 +1121,9 @@ URL: [url]',
'select_ind_reviewers' => 'Välj en person som ska granska',
'select_ind_revisors' => 'Klicka för att välja individuell reviderare',
'select_one' => 'Välj',
'select_user' => '',
'select_users' => 'Välj användare',
'select_value' => '',
'select_workflow' => 'Välj arbetsflöde',
'send_email' => 'Skicka e-post',
'send_login_data' => 'Skicka inloggningsuppgifter',
@ -1191,6 +1197,10 @@ Kommentar: [comment]',
'settings_dbVersion' => 'Databasschemat för gammalt',
'settings_defaultAccessDocs' => 'Standardåtkomst för nya dokument',
'settings_defaultAccessDocs_desc' => 'När ett nytt dokument skapas, används denna behörighet som standard.',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => 'Standard sökmetod',
'settings_defaultSearchMethod_desc' => 'Standard sökmetod, när en sökning startas i sökformuläret i huvudmenyn.',
'settings_defaultSearchMethod_valdatabase' => 'databas',
@ -1469,6 +1479,7 @@ Kommentar: [comment]',
'sk_SK' => 'Slovakiska',
'space_used_on_data_folder' => 'Utrymme använt i datakatalogen',
'splash_added_to_clipboard' => 'Tillagt till urklipp',
'splash_add_access' => '',
'splash_add_attribute' => 'Nytt attribut tillagt',
'splash_add_group' => 'Ny grupp tillagd',
'splash_add_group_member' => 'Ny gruppmedlem tillagt',
@ -1478,12 +1489,14 @@ Kommentar: [comment]',
'splash_add_user' => 'Ny användare tillagd',
'splash_cleared_cache' => 'Cachen är rensad',
'splash_cleared_clipboard' => 'Urklipp rensat',
'splash_delete_access' => '',
'splash_document_added' => 'Dokument tillagt',
'splash_document_checkedout' => 'Dokument utcheckat',
'splash_document_edited' => 'Dokument sparat',
'splash_document_indexed' => 'Dokument \'[name]\' indexerat.',
'splash_document_locked' => 'Dokument låst',
'splash_document_unlocked' => 'Dokument upplåst',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Attribut sparat',
'splash_edit_event' => 'Händelse sparad',
'splash_edit_group' => 'Grupp sparad',
@ -1494,14 +1507,17 @@ Kommentar: [comment]',
'splash_error_send_download_link' => 'Fel vid sändning av nedladdningslänk',
'splash_folder_edited' => 'Spara ändringar i katalog',
'splash_importfs' => 'Importerade [docs] dokument och [folders] kataloger',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Ogiltigt katalog-ID',
'splash_invalid_searchterm' => 'Ogiltigt sökord',
'splash_moved_clipboard' => 'Urklipp flyttades till aktuell katalog',
'splash_move_document' => 'Dokumentet flyttat',
'splash_move_folder' => 'Katalogen flyttad',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => 'Meddelande tillagt',
'splash_removed_from_clipboard' => 'Borttaget från urklipp',
'splash_rm_attribute' => 'Attribut har tagits bort',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Dokument borttaget',
'splash_rm_download_link' => 'Nedladdningslänk borttagen',
'splash_rm_folder' => 'Katalog raderad',
@ -1515,7 +1531,9 @@ Kommentar: [comment]',
'splash_save_user_data' => 'Användarinställningar sparade',
'splash_send_download_link' => 'Nedladdningslänk skickad via e-post.',
'splash_send_login_data' => 'Inloggningsuppgifter skickade',
'splash_setowner' => '',
'splash_settings_saved' => 'Inställningar sparat',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Bytt användare',
'splash_switched_back_user' => 'Byt tillbaka till original användare',
'splash_toogle_group_manager' => 'Gruppmanager har ändrats',

View File

@ -268,6 +268,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Parolayı Onayla',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => '"[arkname]" dosyasını silmeyi onaylıyor musunuz?<br>Dikkatli olun: Bu eylemin geri dönüşü yoktur.',
'confirm_rm_document' => '\'[documentname]\' Dokümanını silmeyi onaylıyor musunuz?<br>Dikkatli olun: Bu eylemin geri dönüşü yoktur.',
'confirm_rm_dump' => '"[dumpname]" dosyasını silmeyi onaylıyor musunuz??<br>Dikkatli olun: Bu eylemin geri dönüşü yoktur.',
@ -1003,6 +1004,7 @@ URL: [url]',
'rewind_workflow_warning' => 'İş akışını başlangıç durumuna geri alırsanız tüm iş akış kayıtları geri dönüşümü olmadan silinecektir.',
'rm_attrdef' => 'Nitelik tanımını sil',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Kategoriyi sil',
'rm_document' => 'Dokümanı sil',
'rm_document_category' => 'Kategoriyi sil',
@ -1063,7 +1065,9 @@ URL: [url]',
'seconds' => 'saniye',
'selection' => 'Seçim',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Kategori seçmek için tıklayın',
'select_group' => '',
'select_groups' => 'Grup seçmek için tıklayın',
'select_grp_approvers' => 'Grup onaylayıcı seçmek için tıklayın',
'select_grp_ind_approvers' => '',
@ -1081,7 +1085,9 @@ URL: [url]',
'select_ind_reviewers' => 'Biresysel kontrol edeni seçmek için tıklayın',
'select_ind_revisors' => '',
'select_one' => 'Birini seçiniz',
'select_user' => '',
'select_users' => 'Kullanıcı seçmek için tıklayın',
'select_value' => '',
'select_workflow' => 'İş akışı seç',
'send_email' => '',
'send_login_data' => '',
@ -1150,6 +1156,10 @@ URL: [url]',
'settings_dbVersion' => 'Veritabanı yapısı çok eski',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => '',
@ -1428,6 +1438,7 @@ URL: [url]',
'sk_SK' => 'Slovakça',
'space_used_on_data_folder' => 'Data klasörü kullanılan alan',
'splash_added_to_clipboard' => 'Panoya eklendi',
'splash_add_access' => '',
'splash_add_attribute' => 'Yeni nitelik eklendi',
'splash_add_group' => 'Yeni grup eklendi',
'splash_add_group_member' => 'Yeni grup üyesi eklendi',
@ -1437,12 +1448,14 @@ URL: [url]',
'splash_add_user' => 'Yeni kullanıcı eklendi',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Pano temizlendi',
'splash_delete_access' => '',
'splash_document_added' => 'Doküman eklendi',
'splash_document_checkedout' => '',
'splash_document_edited' => 'Doküman kaydedildi',
'splash_document_indexed' => '',
'splash_document_locked' => 'Doküman kilitlendi',
'splash_document_unlocked' => 'Doküman kiliti açıldı',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Nitelik kaydedildi',
'splash_edit_event' => '',
'splash_edit_group' => 'Grup kaydedildi',
@ -1453,14 +1466,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Klasör değişiklikleri kaydedildi',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Hatalı klasör ID',
'splash_invalid_searchterm' => 'Hatalı arama terimi',
'splash_moved_clipboard' => 'Pano mevcut klasöre taşındı',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Panodan silindi',
'splash_rm_attribute' => 'Nitelik silindi',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Doküman silindi',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Klasör silindi',
@ -1474,7 +1490,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Ayarlar kaydedildi',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Yerine geçilen kullanıcı',
'splash_switched_back_user' => 'Orijinal kullanıcıya geri dönüldü',
'splash_toogle_group_manager' => 'Grup yöneticisi değişti',

View File

@ -274,6 +274,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => 'Підтвердіть пароль',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => 'Видалити файл «[arkname]»?<br>Дія <b>незворотня</b>',
'confirm_rm_document' => 'Видалити документ «[documentname]»?<br>Дія <b>незворотня</b>',
'confirm_rm_dump' => 'Видалити файл «[dumpname]»?<br>Дія <b>незворотня</b>',
@ -1024,6 +1025,7 @@ URL: [url]',
'rewind_workflow_warning' => 'Якщо ви почнете процес спочатку, то весь журнал процесу для цього процесу буде очищено і його неможливо буде відновити.',
'rm_attrdef' => 'Видалити визначення атрибуту',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => 'Видалити категорію',
'rm_document' => 'Видалити документ',
'rm_document_category' => 'Видалити категорію',
@ -1084,7 +1086,9 @@ URL: [url]',
'seconds' => 'секунди',
'selection' => 'Вибір',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => 'Оберіть категорію',
'select_group' => '',
'select_groups' => 'Оберіть групи',
'select_grp_approvers' => 'Оберіть групу затверджувачів',
'select_grp_ind_approvers' => 'Оберіть групу',
@ -1102,7 +1106,9 @@ URL: [url]',
'select_ind_reviewers' => 'Оберіть індивідуального рецензента',
'select_ind_revisors' => 'Оберіть індивідуального ревізора',
'select_one' => 'Оберіть',
'select_user' => '',
'select_users' => 'Оберіть користувачів',
'select_value' => '',
'select_workflow' => 'Оберіть процес',
'send_email' => '',
'send_login_data' => '',
@ -1171,6 +1177,10 @@ URL: [url]',
'settings_dbVersion' => 'Схема БД застаріла',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => 'Метод пошуку за замовчуванням',
'settings_defaultSearchMethod_desc' => 'Метод пошуку за замовчуванням, коли пошук починається з пошукової форми головного меню.',
'settings_defaultSearchMethod_valdatabase' => 'база даних',
@ -1449,6 +1459,7 @@ URL: [url]',
'sk_SK' => 'Slovak',
'space_used_on_data_folder' => 'Розмір каталогу даних',
'splash_added_to_clipboard' => 'Додано до буферу обміну',
'splash_add_access' => '',
'splash_add_attribute' => 'Додано новий атрибут',
'splash_add_group' => 'Додана нова група',
'splash_add_group_member' => 'Додано нового члена групи',
@ -1458,12 +1469,14 @@ URL: [url]',
'splash_add_user' => 'Додано нового користувача',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => 'Буфер обміну очищено',
'splash_delete_access' => '',
'splash_document_added' => 'Додано документ',
'splash_document_checkedout' => 'Документ відправлено на опрацювання',
'splash_document_edited' => 'Документ збережено',
'splash_document_indexed' => '',
'splash_document_locked' => 'Документ заблоковано',
'splash_document_unlocked' => 'Документ розблоковано',
'splash_edit_access' => '',
'splash_edit_attribute' => 'Атрибут збережено',
'splash_edit_event' => '',
'splash_edit_group' => 'Групу збережено',
@ -1474,14 +1487,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => 'Зміни каталогу збережено',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => 'Невірний ідентифікатор каталогу',
'splash_invalid_searchterm' => 'Невірний пошуковий запит',
'splash_moved_clipboard' => 'Буфер обміну перенесено в поточний каталог',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => 'Видалити з буферу обміну',
'splash_rm_attribute' => 'Атрибут видалено',
'splash_rm_attr_value' => '',
'splash_rm_document' => 'Документ видалено',
'splash_rm_download_link' => '',
'splash_rm_folder' => 'Папку видалено',
@ -1495,7 +1511,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => 'Налаштування збережено',
'splash_set_default_access' => '',
'splash_substituted_user' => 'Користувача переключено',
'splash_switched_back_user' => 'Переключено на початкового користувача',
'splash_toogle_group_manager' => 'Змінено менеджера групи',

View File

@ -268,6 +268,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '请确认移动文件夹',
'confirm_pwd' => '确认密码',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => '您确定要删除"[arkname]"备份文档?<br>请注意:此动作执行后不能撤销.',
'confirm_rm_document' => '您确定要删除\'[documentname]\'文档?<br>请注意:此动作执行后不能撤销.',
'confirm_rm_dump' => '您确定要删除"[dumpname]"转储文件?<br>请注意:此动作执行后不能撤销.',
@ -1002,6 +1003,7 @@ URL: [url]',
'rewind_workflow_warning' => '',
'rm_attrdef' => '去掉属性定义',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => '删除类别',
'rm_document' => '删除文档',
'rm_document_category' => '删除分类',
@ -1062,7 +1064,9 @@ URL: [url]',
'seconds' => '秒',
'selection' => '选择',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => '选中分类',
'select_group' => '',
'select_groups' => '点击选择组',
'select_grp_approvers' => '点击选择组审批组',
'select_grp_ind_approvers' => '点击选择组',
@ -1080,7 +1084,9 @@ URL: [url]',
'select_ind_reviewers' => '点击选择审核人',
'select_ind_revisors' => '',
'select_one' => '选择一个',
'select_user' => '',
'select_users' => '点击选择用户',
'select_value' => '',
'select_workflow' => '选择工作流',
'send_email' => '发送邮件',
'send_login_data' => '发送登录数据',
@ -1154,6 +1160,10 @@ URL: [url]',
'settings_dbVersion' => '',
'settings_defaultAccessDocs' => '新增文档时默认访问控制',
'settings_defaultAccessDocs_desc' => '创建新文档时的默认访问权限',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '默认搜索模式',
'settings_defaultSearchMethod_desc' => '在主菜单中启动检索时,设置默认的搜索方式',
'settings_defaultSearchMethod_valdatabase' => '数据库',
@ -1432,6 +1442,7 @@ URL: [url]',
'sk_SK' => '斯洛伐克语',
'space_used_on_data_folder' => '数据文件夹使用空间',
'splash_added_to_clipboard' => '已复制',
'splash_add_access' => '',
'splash_add_attribute' => '属性已添加',
'splash_add_group' => '组已添加',
'splash_add_group_member' => '组成员已添加',
@ -1441,12 +1452,14 @@ URL: [url]',
'splash_add_user' => '用户已添加',
'splash_cleared_cache' => 'Cache 缓存已清理',
'splash_cleared_clipboard' => '剪贴板已清空',
'splash_delete_access' => '',
'splash_document_added' => '文档已添加',
'splash_document_checkedout' => '文档已签出',
'splash_document_edited' => '文档已保存',
'splash_document_indexed' => '文档 \'[name]\' 已索引。',
'splash_document_locked' => '文档已被锁定',
'splash_document_unlocked' => '已解锁的文档',
'splash_edit_access' => '',
'splash_edit_attribute' => '属性已保存',
'splash_edit_event' => '事件已保存',
'splash_edit_group' => '组已保存',
@ -1457,14 +1470,17 @@ URL: [url]',
'splash_error_send_download_link' => '发送下载链接时报错',
'splash_folder_edited' => '更新文件夹',
'splash_importfs' => '已导入文档 [docs] 和文件夹 [folders]',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => '非法的文件夹 ID',
'splash_invalid_searchterm' => '无效的搜索项',
'splash_moved_clipboard' => '',
'splash_move_document' => '文档已迁移',
'splash_move_folder' => '文件夹已迁移',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => '已从剪切板删除',
'splash_rm_attribute' => '属性已移除',
'splash_rm_attr_value' => '',
'splash_rm_document' => '文档已被移除',
'splash_rm_download_link' => '下载链接已移除',
'splash_rm_folder' => '已删除的文件夹',
@ -1478,7 +1494,9 @@ URL: [url]',
'splash_save_user_data' => '用户数据已保存',
'splash_send_download_link' => '下载链接已通过邮件发送。',
'splash_send_login_data' => '登录数据已发送',
'splash_setowner' => '',
'splash_settings_saved' => '设置已保存',
'splash_set_default_access' => '',
'splash_substituted_user' => '',
'splash_switched_back_user' => '',
'splash_toogle_group_manager' => '',

View File

@ -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 (2387)
// Translators: Admin (2394)
$text = array(
'2_factor_auth' => '',
@ -171,7 +171,7 @@ URL: [url]',
'at_least_n_users_of_group' => '',
'august' => '八 月',
'authentication' => '',
'author' => '',
'author' => '作者',
'automatic_status_update' => '自動狀態變化',
'back' => '返回',
'backup_list' => '備份列表',
@ -251,6 +251,7 @@ URL: [url]',
'confirm_move_document' => '',
'confirm_move_folder' => '',
'confirm_pwd' => '確認密碼',
'confirm_rm_attr_value' => '',
'confirm_rm_backup' => '您確定要刪除"[arkname]"備份文檔?<br>請注意:此動作執行後不能撤銷.',
'confirm_rm_document' => '您確定要刪除"[documentname]"文檔?<br>請注意:此動作執行後不能撤銷.',
'confirm_rm_dump' => '您確定要刪除"[dumpname]"轉儲檔?<br>請注意:此動作執行後不能撤銷.',
@ -425,7 +426,7 @@ URL: [url]',
'error_transfer_document' => '',
'es_ES' => '西班牙語',
'event_details' => '錯誤詳情',
'exclude_items' => '',
'exclude_items' => '例外項目',
'expired' => '過期',
'expired_at_date' => '',
'expired_documents' => '',
@ -444,7 +445,7 @@ URL: [url]',
'expiry_changed_email_body' => '',
'expiry_changed_email_subject' => '',
'export' => '',
'extension_manager' => '',
'extension_manager' => '整體索引進度',
'february' => '二 月',
'file' => '文件',
'files' => '文件',
@ -602,7 +603,7 @@ URL: [url]',
'linked_to_this_version' => '',
'link_alt_updatedocument' => '超過20M大檔請選擇<a href="%s">上傳大檔</a>.',
'link_to_version' => '',
'list_access_rights' => '',
'list_access_rights' => '列出權限',
'list_contains_no_access_docs' => '',
'list_hooks' => '',
'local_file' => '本地檔',
@ -791,7 +792,7 @@ URL: [url]',
'reception_rejected' => '',
'recipients' => '',
'redraw' => '',
'refresh' => '',
'refresh' => '重新整理',
'rejected' => '拒絕',
'released' => '發佈',
'removed_approver' => '已經從審核人名單中刪除',
@ -863,6 +864,7 @@ URL: [url]',
'rewind_workflow_warning' => '',
'rm_attrdef' => '',
'rm_attrdefgroup' => '',
'rm_attr_value' => '',
'rm_default_keyword_category' => '刪除類別',
'rm_document' => '刪除文檔',
'rm_document_category' => '刪除分類',
@ -916,7 +918,9 @@ URL: [url]',
'seconds' => '',
'selection' => '選擇',
'select_attrdefgrp_show' => '',
'select_attribute_value' => '',
'select_category' => '選中分類',
'select_group' => '',
'select_groups' => '點擊選擇組',
'select_grp_approvers' => '請點選審核人員群組',
'select_grp_ind_approvers' => '',
@ -934,7 +938,9 @@ URL: [url]',
'select_ind_reviewers' => '請點選單一的校對人',
'select_ind_revisors' => '',
'select_one' => '選擇一個',
'select_user' => '',
'select_users' => '點擊選擇用戶',
'select_value' => '',
'select_workflow' => '',
'send_email' => '',
'send_login_data' => '',
@ -1003,6 +1009,10 @@ URL: [url]',
'settings_dbVersion' => '',
'settings_defaultAccessDocs' => '',
'settings_defaultAccessDocs_desc' => '',
'settings_defaultDocPosition' => '',
'settings_defaultDocPosition_desc' => '',
'settings_defaultDocPosition_val_end' => '',
'settings_defaultDocPosition_val_start' => '',
'settings_defaultSearchMethod' => '',
'settings_defaultSearchMethod_desc' => '',
'settings_defaultSearchMethod_valdatabase' => '',
@ -1281,6 +1291,7 @@ URL: [url]',
'sk_SK' => '斯洛伐克語',
'space_used_on_data_folder' => '資料檔案夾使用空間',
'splash_added_to_clipboard' => '已複製',
'splash_add_access' => '',
'splash_add_attribute' => '',
'splash_add_group' => '',
'splash_add_group_member' => '',
@ -1290,12 +1301,14 @@ URL: [url]',
'splash_add_user' => '',
'splash_cleared_cache' => '',
'splash_cleared_clipboard' => '',
'splash_delete_access' => '',
'splash_document_added' => '',
'splash_document_checkedout' => '',
'splash_document_edited' => '',
'splash_document_indexed' => '',
'splash_document_locked' => '文檔已被鎖定',
'splash_document_unlocked' => '已解鎖的文檔',
'splash_edit_access' => '',
'splash_edit_attribute' => '',
'splash_edit_event' => '',
'splash_edit_group' => '',
@ -1306,14 +1319,17 @@ URL: [url]',
'splash_error_send_download_link' => '',
'splash_folder_edited' => '',
'splash_importfs' => '',
'splash_inherit_access' => '',
'splash_invalid_folder_id' => '',
'splash_invalid_searchterm' => '',
'splash_moved_clipboard' => '',
'splash_move_document' => '',
'splash_move_folder' => '',
'splash_notinherit_access' => '',
'splash_receipt_update_success' => '',
'splash_removed_from_clipboard' => '',
'splash_rm_attribute' => '',
'splash_rm_attr_value' => '',
'splash_rm_document' => '文檔已被移除',
'splash_rm_download_link' => '',
'splash_rm_folder' => '已刪除的資料夾',
@ -1327,7 +1343,9 @@ URL: [url]',
'splash_save_user_data' => '',
'splash_send_download_link' => '',
'splash_send_login_data' => '',
'splash_setowner' => '',
'splash_settings_saved' => '',
'splash_set_default_access' => '',
'splash_substituted_user' => '',
'splash_switched_back_user' => '',
'splash_toogle_group_manager' => '',
@ -1397,7 +1415,7 @@ URL: [url]',
'timeline_full_status_change' => '',
'timeline_scheduled_revision' => '',
'timeline_selected_item' => '',
'timeline_skip_add_file' => '',
'timeline_skip_add_file' => '新增附件',
'timeline_skip_scheduled_revision' => '',
'timeline_skip_status_change_-1' => '',
'timeline_skip_status_change_-3' => '',

View File

@ -256,6 +256,12 @@ if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'tra
}
}
}
if($settings->_workflowMode == 'traditional' && !$settings->_allowReviewerOnly) {
/* Check if reviewers are send but no approvers */
if(($reviewers["i"] || $reviewers["g"]) && !$approvers["i"] && !$approvers["g"]) {
UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_uploading_reviewer_only"));
}
}
} elseif($settings->_workflowMode == 'advanced') {
if(!$workflows = $user->getMandatoryWorkflows()) {
if(isset($_POST["workflow"]))
@ -293,8 +299,8 @@ if (isset($_POST["grpIndRecipients"])) {
if($group = $dms->getGroup($grp)) {
$members = $group->getUsers();
foreach($members as $member) {
/* Do not add the uploader itself and approvers */
if($member->getID() != $user->getID() && !in_array($member->getID(), $approvers['i']))
/* Do not add the uploader itself and reviewers */
if(!$settings->_enableFilterReceipt || ($member->getID() != $user->getID() && !in_array($member->getID(), $reviewers['i'])))
$recipients["i"][] = $member->getID();
}
}

View File

@ -69,7 +69,7 @@ if (isset($_COOKIE["mydms_session"])) {
if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) {
if(method_exists($notificationObj, 'preAddService')) {
$notificationObj->preAddService($notifier);
$notificationObj->preAddService($dms, $notifier);
}
}
}
@ -81,15 +81,7 @@ if (isset($_COOKIE["mydms_session"])) {
if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) {
if(method_exists($notificationObj, 'postAddService')) {
$notificationObj->postAddService($notifier);
}
}
}
if(isset($GLOBALS['SEEDDMS_HOOKS']['notification'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['notification'] as $notificationObj) {
if(method_exists($notificationObj, 'postAddService')) {
$notificationObj->postAddService($notifier);
$notificationObj->postAddService($dms, $notifier);
}
}
}
@ -507,7 +499,7 @@ switch($command) {
case 'submittranslation': /* {{{ */
if($settings->_showMissingTranslations) {
if($user && !empty($_POST['phrase'])) {
if($fp = fopen('/tmp/newtranslations.txt', 'a+')) {
if($fp = fopen($settings->_cacheDir.'/newtranslations.txt', 'a+')) {
fputcsv($fp, array(date('Y-m-d H:i:s'), $user->getLogin(), $_POST['key'], $_POST['lang'], $_POST['phrase']));
fclose($fp);
}
@ -668,7 +660,11 @@ switch($command) {
$controller->setParam('userfilename', $userfilename);
$controller->setParam('filetype', $fileType);
$controller->setParam('userfiletype', $userfiletype);
$controller->setParam('sequence', 0);
$minmax = $folder->getDocumentsMinMax();
if($settings->_defaultDocPosition == 'start')
$controller->setParam('sequence', $minmax['min'] - 1);
else
$controller->setParam('sequence', $minmax['max'] + 1);
$controller->setParam('reviewers', $reviewers);
$controller->setParam('approvers', $approvers);
$controller->setParam('reqversion', 1);

View File

@ -33,6 +33,7 @@ include("../inc/inc.ClassController.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$controller = Controller::factory($tmp[1]);
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
/* Check if the form data comes from a trusted request */
if(!checkFormKey('approvedocument')) {
@ -50,12 +51,13 @@ if (!is_object($document)) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
}
$folder = $document->getFolder();
if ($document->getAccessMode($user) < M_READ) {
// verify if document may be approved
if (!$accessop->mayApprove($document)){
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
$folder = $document->getFolder();
if (!isset($_POST["version"]) || !is_numeric($_POST["version"]) || intval($_POST["version"])<1) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version"));
}
@ -73,14 +75,7 @@ if ($latestContent->getVersion()!=$version) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version"));
}
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$olddocstatus = $content->getStatus();
// verify if document may be approved
if (!$accessop->mayApprove($document)){
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
if (!isset($_POST["approvalStatus"]) || !is_numeric($_POST["approvalStatus"]) ||
(intval($_POST["approvalStatus"])!=1 && intval($_POST["approvalStatus"])!=-1)) {

View File

@ -36,7 +36,7 @@ if (!$user->isAdmin()) {
if (isset($_POST["action"])) $action=$_POST["action"];
else $action=NULL;
if(!in_array($action, array('addattrdef', 'removeattrdef', 'editattrdef')))
if(!in_array($action, array('addattrdef', 'removeattrdef', 'editattrdef', 'removeattrvalue')))
UI::exitError(getMLText("admin_tools"),getMLText("unknown_command"));
/* Check if the form data comes from a trusted request */
@ -168,6 +168,35 @@ else if ($action == "editattrdef") {
$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_edit_attribute')));
add_log_line("&action=editattrdef&attrdefid=".$attrdefid);
}
// remove attribute value -----------------------------------------------
else if ($action == "removeattrvalue") {
if (!isset($_POST["attrdefid"]) || !is_numeric($_POST["attrdefid"]) || intval($_POST["attrdefid"])<1) {
UI::exitError(getMLText("admin_tools"),getMLText("unknown_attrdef"));
}
$attrdefid = $_POST["attrdefid"];
$attrdef = $dms->getAttributeDefinition($attrdefid);
if (!is_object($attrdef)) {
UI::exitError(getMLText("admin_tools"),getMLText("unknown_attrdef"));
}
$attrval = $_POST["attrvalue"];
$controller->setParam('attrval', $attrval);
$controller->setParam('attrdef', $attrdef);
if (!$controller($_POST)) {
header('Content-Type: application/json');
echo json_encode(array('success'=>false, 'message'=>getMLText('error_occured')));
} else {
header('Content-Type: application/json');
echo json_encode(array('success'=>true, 'message'=>getMLText('splash_rm_attr_value')));
}
add_log_line("&action=removeattrvalue&attrdefid=".$attrdefid);
exit;
} else {
UI::exitError(getMLText("admin_tools"),getMLText("unknown_command"));
}

View File

@ -166,6 +166,7 @@ if ($action == "setowner") {
}
// $notifier->toIndividual($user, $oldowner, $subject, $message, $params);
}
$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_setowner')));
}
}
@ -190,6 +191,7 @@ else if ($action == "notinherit") {
}
}
$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_notinherit_access')));
}
// Change to inherit-----------------------------------------------------
@ -211,6 +213,7 @@ else if ($action == "inherit") {
$notifier->toGroup($user, $grp, $subject, $message, $params);
}
}
$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_inherit_access')));
}
// Set default permissions ----------------------------------------------
@ -232,6 +235,13 @@ else if ($action == "setdefault") {
$notifier->toGroup($user, $grp, $subject, $message, $params);
}
}
$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_set_default_access')));
} elseif($action == "delaccess") {
$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_delete_access')));
} elseif($action == "addaccess") {
$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_add_access')));
} elseif($action == "editaccess") {
$session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_edit_access')));
}
add_log_line("");

View File

@ -132,13 +132,7 @@ if ($user->isAdmin() && ($_SERVER['REMOTE_ADDR'] != $settings->_adminIP ) && ( $
if($settings->_enable2FactorAuthentication) {
if($secret = $user->getSecret()) {
require "vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Qr/GoogleQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php";
require "vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php";
require "vendor/robthree/twofactorauth/lib/TwoFactorAuth.php";
require "vendor/autoload.php";
$tfa = new \RobThree\Auth\TwoFactorAuth('SeedDMS');
if($tfa->verifyCode($secret, $_POST['twofactauth']) !== true) {
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));

View File

@ -32,6 +32,7 @@ include("../inc/inc.ClassController.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$controller = Controller::factory($tmp[1]);
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
/* Check if the form data comes for a trusted request */
if(!checkFormKey('receiptdocument')) {
@ -49,12 +50,13 @@ if (!is_object($document)) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
}
$folder = $document->getFolder();
if ($document->getAccessMode($user) < M_READ) {
// verify if document may be receіpted
if (!$accessop->mayReceipt($document)){
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
$folder = $document->getFolder();
if (!isset($_POST["version"]) || !is_numeric($_POST["version"]) || intval($_POST["version"])<1) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version"));
}
@ -72,14 +74,6 @@ if ($latestContent->getVersion()!=$version) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version"));
}
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
// verify if document may be receіpted
if (!$accessop->mayReceipt($document)){
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
if (!isset($_POST["receiptStatus"]) || !is_numeric($_POST["receiptStatus"]) ||
(intval($_POST["receiptStatus"])!=1 && intval($_POST["receiptStatus"])!=-1)) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_receipt_status"));

View File

@ -33,6 +33,7 @@ include("../inc/inc.ClassController.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$controller = Controller::factory($tmp[1]);
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
/* Check if the form data comes from a trusted request */
if(!checkFormKey('reviewdocument')) {
@ -50,12 +51,13 @@ if (!is_object($document)) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
}
$folder = $document->getFolder();
if ($document->getAccessMode($user) < M_READ) {
// verify if document may be reviewed
if (!$accessop->mayReview($document)){
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
$folder = $document->getFolder();
if (!isset($_POST["version"]) || !is_numeric($_POST["version"]) || intval($_POST["version"])<1) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version"));
}
@ -73,14 +75,7 @@ if ($latestContent->getVersion()!=$version) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version"));
}
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$olddocstatus = $content->getStatus();
// verify if document may be reviewed
if (!$accessop->mayReview($document)){
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
if (!isset($_POST["reviewStatus"]) || !is_numeric($_POST["reviewStatus"]) ||
(intval($_POST["reviewStatus"])!=1 && intval($_POST["reviewStatus"])!=-1)) {

View File

@ -32,6 +32,7 @@ include("../inc/inc.ClassController.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$controller = Controller::factory($tmp[1]);
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
/* Check if the form data comes for a trusted request */
if(!checkFormKey('revisedocument')) {
@ -49,12 +50,13 @@ if (!is_object($document)) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
}
$folder = $document->getFolder();
if ($document->getAccessMode($user) < M_READ) {
// verify if document maybe revised
if (!$accessop->mayRevise($document)){
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
$folder = $document->getFolder();
if (!isset($_POST["version"]) || !is_numeric($_POST["version"]) || intval($_POST["version"])<1) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version"));
}
@ -72,14 +74,7 @@ if ($latestContent->getVersion()!=$version) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version"));
}
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$olddocstatus = $content->getStatus();
// verify if document maybe revised
if (!$accessop->mayRevise($document)){
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
if (!isset($_POST["revisionStatus"]) || !is_numeric($_POST["revisionStatus"]) ||
(!in_array(intval($_POST["revisionStatus"]), array(1, -1, 6)))) {

View File

@ -40,7 +40,7 @@ if (!is_object($document)) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
}
if ($document->getAccessMode($user) < M_ALL) {
if ($document->getAccessMode($user) < M_READWRITE) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
@ -85,6 +85,16 @@ foreach ($receiptStatus as $i=>$rs) {
}
}
/* Get List of ind. reviewers, because they are taken out from the receivers
* if added as group.
*/
$reviewStatus = $content->getReviewStatus();
$reviewerids = [];
foreach ($reviewStatus as $r) {
if($r["type"] == 0 && $r["status"] > -2) {
$reviewerids[] = $r['required'];
}
}
// Get the list of proposed recipients, stripping out any duplicates.
$pIndRev = (isset($_POST["indRecipients"]) ? array_values(array_unique($_POST["indRecipients"])) : array());
// Retrieve the list of recipient groups whose members become individual recipients
@ -93,8 +103,10 @@ if (isset($_POST["grpIndRecipients"])) {
if($group = $dms->getGroup($grp)) {
$members = $group->getUsers();
foreach($members as $member) {
if(!in_array($member->getID(), $pIndRev))
$pIndRev[] = $member->getID();
/* Do not add the uploader itself and reviewers */
if(!$settings->_enableFilterReceipt || ($member->getID() != $content->getUser()->getID() && !in_array($member->getID(), $reviewerids)))
if(!in_array($member->getID(), $pIndRev))
$pIndRev[] = $member->getID();
}
}
}

View File

@ -101,6 +101,7 @@ if ($action == "saveSettings")
$settings->_stopWordsFile = $_POST["stopWordsFile"];
$settings->_sortUsersInList = $_POST["sortUsersInList"];
$settings->_sortFoldersDefault = $_POST["sortFoldersDefault"];
$settings->_defaultDocPosition = $_POST["defaultDocPosition"];
$settings->_libraryFolder = intval($_POST["libraryFolder"]);
// SETTINGS - SITE - CALENDAR
@ -179,6 +180,7 @@ if ($action == "saveSettings")
$settings->_workflowMode = $_POST["workflowMode"];
$settings->_enableAcknowledgeWorkflow = getBoolValue("enableAcknowledgeWorkflow");
$settings->_enableRevisionWorkflow = getBoolValue("enableRevisionWorkflow");
$settings->_allowReviewerOnly = getBoolValue("allowReviewerOnly");
$settings->_enableAdminRevApp = getBoolValue("enableAdminRevApp");
$settings->_enableOwnerRevApp = getBoolValue("enableOwnerRevApp");
$settings->_enableSelfRevApp = getBoolValue("enableSelfRevApp");

View File

@ -84,6 +84,7 @@ if($view) {
$view->setParam('workflowmode', $settings->_workflowMode);
$view->setParam('presetexpiration', $settings->_presetExpirationDate);
$view->setParam('sortusersinlist', $settings->_sortUsersInList);
$view->setParam('defaultposition', $settings->_defaultDocPosition);
$view->setParam('orderby', $settings->_sortFoldersDefault);
$view->setParam('accessobject', $accessop);
$view($_GET);

View File

@ -51,6 +51,7 @@ if ($folder->getAccessMode($user) < M_READWRITE) {
if($view) {
$view->setParam('folder', $folder);
$view->setParam('strictformcheck', $settings->_strictFormCheck);
$view->setParam('defaultposition', $settings->_defaultDocPosition);
$view->setParam('orderby', $settings->_sortFoldersDefault);
$view->setParam('accessobject', $accessop);
$view($_GET);

View File

@ -1,39 +0,0 @@
<?php
// MyDMS. Document Management System
// Copyright (C) 2002-2005 Markus Westphal
// Copyright (C) 2006-2008 Malcolm Cowe
// Copyright (C) 2010 Matteo Lucarelli
// Copyright (C) 2010-2012 Uwe Steinmann
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
include("../inc/inc.Settings.php");
include("../inc/inc.Utils.php");
include("../inc/inc.Language.php");
include("../inc/inc.Init.php");
include("../inc/inc.Extension.php");
include("../inc/inc.DBInit.php");
include("../inc/inc.ClassUI.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('strictformcheck', $settings->_strictFormCheck);
$view($_GET);
exit;
}
?>

View File

@ -31,6 +31,9 @@ include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
if (!$accessop->check_view_access($view, $_GET)) {
UI::exitError(getMLText("my_documents"),getMLText("access_denied"));
}
if ($user->isGuest()) {
UI::exitError(getMLText("my_documents"),getMLText("access_denied"));

View File

@ -30,6 +30,13 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
if (!$accessop->check_view_access($view, $_GET)) {
UI::exitError(getMLText("document_title"),getMLText("access_denied"));
}
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"));
}
@ -48,11 +55,6 @@ $folder = $document->getFolder();
$allUsers = $dms->getAllUsers($settings->_sortUsersInList);
$allGroups = $dms->getAllGroups();
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);

View File

@ -30,6 +30,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -46,12 +50,10 @@ if ($document->getAccessMode($user) < M_READ) {
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied"));
}
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'folder'=>$folder, 'document'=>$document, 'sortusersinlist'=>$settings->_sortUsersInList));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);
$view->setParam('sortusersinlist', $settings->_sortUsersInList);
$view->setParam('accessobject', $accessop);
$view($_GET);
exit;

View File

@ -30,6 +30,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -64,11 +68,6 @@ if ($latestContent->getVersion()==$version->getVersion()) {
$folder = $document->getFolder();
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);

View File

@ -30,6 +30,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -39,6 +43,10 @@ if (!is_object($document)) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
}
if(!$accessop->mayEditAttributes($document)) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
$version = $document->getContentByVersion($_GET["version"]);
if (!is_object($version)) {
@ -47,18 +55,10 @@ if (!is_object($version)) {
$folder = $document->getFolder();
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
if(!$accessop->mayEditAttributes($document)) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied"));
}
$attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_documentcontent, SeedDMS_Core_AttributeDefinition::objtype_all));
$f = null;
$attrdefgrps = $folder->getAttributeDefintionGroupList(true, $f);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);

View File

@ -29,6 +29,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -55,13 +59,14 @@ $attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinit
$f = null;
$attrdefgrps = $folder->getAttributeDefintionGroupList(true, $f);
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'folder'=>$folder, 'document'=>$document, 'attrdefs'=>$attrdefs, 'strictformcheck'=>$settings->_strictFormCheck, 'orderby'=>$settings->_sortFoldersDefault));
if($view) {
$view->setParam('attrdefgrps', $attrdefgrps);
$view->setParam('folder', $folder);
$view->setParam('document', $document);
$view->setParam('attrdefs', $attrdefs);
$view->setParam('strictformcheck', $settings->_strictFormCheck);
$view->setParam('orderby', $settings->_sortFoldersDefault);
$view->setParam('defaultposition', $settings->_defaultDocPosition);
$view->setParam('accessobject', $accessop);
$view($_GET);
exit;

View File

@ -28,6 +28,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings);
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"));
}
@ -54,11 +58,6 @@ if (($document->getAccessMode($user) < M_ALL)&&($user->getID()!=$file->getUserID
$folder = $document->getFolder();
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);

View File

@ -57,6 +57,7 @@ if($view) {
$view->setParam('rootfolderid', $settings->_rootFolderID);
$view->setParam('orderby', $settings->_sortFoldersDefault);
$view->setParam('accessobject', $accessop);
$view->setParam('defaultposition', $settings->_defaultDocPosition);
$view($_GET);
exit;
}

View File

@ -52,7 +52,6 @@ if($view) {
$view->setParam('folder', $folder);
$view->setParam('allusers', $allUsers);
$view->setParam('allgroups', $allGroups);
$view->setParam('strictformcheck', $settings->_strictFormCheck);
$view->setParam('accessobject', $accessop);
$view($_GET);
exit;

View File

@ -29,6 +29,9 @@ include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
if (!$accessop->check_view_access($view, $_GET)) {
UI::exitError(getMLText("my_account"),getMLText("access_denied"), false, $isajax);
}
if ($user->isGuest()) {
UI::exitError(getMLText("my_account"),getMLText("access_denied"));

View File

@ -29,6 +29,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -52,7 +56,7 @@ if($document->isLocked()) {
if(isset($_GET['targetid']) && $_GET['targetid']) {
$target = $dms->getFolder($_GET["targetid"]);
if (!is_object($target)) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_target_folder"));
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_target_folder"));
}
if ($target->getAccessMode($user) < M_READWRITE) {
@ -65,12 +69,10 @@ if(isset($_GET['targetid']) && $_GET['targetid']) {
$folder = $document->getFolder();
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'folder'=>$folder, 'document'=>$document, 'target'=>$target));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);
$view->setParam('target', $target);
$view->setParam('accessobject', $accessop);
$view($_GET);
exit;

View File

@ -29,6 +29,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -39,6 +43,10 @@ if (!is_object($document)) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
}
if(!$accessop->mayOverrideStatus($document)) {
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("cannot_change_final_states"));
}
if ($document->getAccessMode($user) < M_ALL) {
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied"));
}
@ -55,14 +63,6 @@ if (!is_object($content)) {
$folder = $document->getFolder();
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
if(!$accessop->mayOverrideStatus($document)) {
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("cannot_change_final_states"));
}
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);

View File

@ -28,6 +28,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -38,6 +42,11 @@ if (!is_object($document)) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
}
// verify if document may be receipted
if (!$accessop->mayReceipt($document)){
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied"));
}
$folder = $document->getFolder();
if ($document->getAccessMode($user) < M_READ) {
@ -58,21 +67,12 @@ $latestContent = $document->getLatestContent();
if ($latestContent->getVersion()!=$version) {
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version"));
}
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
// verify if document may be receipted
if (!$accessop->mayReceipt($document)){
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied"));
}
$receipts = $content->getReceiptStatus();
if(!$receipts) {
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("no_action"));
}
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);

View File

@ -20,6 +20,7 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
include("../inc/inc.Settings.php");
include("../inc/inc.LogInit.php");
include("../inc/inc.Language.php");
include("../inc/inc.Init.php");
include("../inc/inc.Extension.php");
@ -27,20 +28,19 @@ include("../inc/inc.DBInit.php");
include("../inc/inc.ClassUI.php");
include("../inc/inc.Authentication.php");
/**
* Include class to preview documents
*/
require_once("SeedDMS/Preview.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
if (!$accessop->check_view_access($view, $_GET)) {
UI::exitError(getMLText("my_documents"),getMLText("access_denied"));
}
if ($user->isGuest()) {
UI::exitError(getMLText("my_documents"),getMLText("access_denied"));
}
if($view) {
$view->setParam('showtree', showtree());
$view->setParam('cachedir', $settings->_cacheDir);
$view->setParam('previewWidthList', $settings->_previewWidthList);
$view->setParam('previewconverters', $settings->_converters['preview']);

View File

@ -29,6 +29,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -51,11 +55,6 @@ if($document->isLocked()) {
$folder = $document->getFolder();
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);

View File

@ -28,6 +28,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -54,11 +58,6 @@ if (($document->getAccessMode($user) < M_ALL)&&($user->getID()!=$file->getUserID
$folder = $document->getFolder();
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);

View File

@ -27,6 +27,9 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.Calendar.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if (!isset($_GET["id"]) || !is_numeric($_GET["id"]) || intval($_GET["id"])<1) {
UI::exitError(getMLText("edit_event"),getMLText("error_occured"));
}
@ -40,8 +43,6 @@ if (($user->getID()!=$event["userID"])&&(!$user->isAdmin())){
UI::exitError(getMLText("edit_event"),getMLText("access_denied"));
}
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('event', $event);
$view($_GET);

View File

@ -26,6 +26,9 @@ include("../inc/inc.DBInit.php");
include("../inc/inc.ClassUI.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if ($user->isGuest()) {
UI::exitError(getMLText("admin_tools"),getMLText("access_denied"));
}
@ -39,8 +42,6 @@ if (!is_object($rmtransmittal)) {
UI::exitError(getMLText("rm_transmittal"),getMLText("invalid_transmittal_id"));
}
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('rmtransmittal', $rmtransmittal);
$view($_GET);

View File

@ -26,6 +26,9 @@ include("../inc/inc.DBInit.php");
include("../inc/inc.ClassUI.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if (!$user->isAdmin()) {
UI::exitError(getMLText("admin_tools"),getMLText("access_denied"));
}
@ -43,8 +46,6 @@ if ($rmuser->getID()==$user->getID()) {
UI::exitError(getMLText("rm_user"),getMLText("cannot_delete_yourself"));
}
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('rmuser', $rmuser);
$view($_GET);

View File

@ -31,6 +31,9 @@ include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
if (!$accessop->check_view_access($view, $_GET)) {
UI::exitError(getMLText("my_documents"),getMLText("access_denied"));
}
if ($user->isGuest()) {
UI::exitError(getMLText("my_documents"),getMLText("access_denied"));

View File

@ -30,6 +30,10 @@ include("../inc/inc.ClassUI.php");
include("../inc/inc.ClassAccessOperation.php");
include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
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"));
}
@ -39,17 +43,12 @@ if (!is_object($document)) {
UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id"));
}
if ($document->getAccessMode($user) < M_READWRITE) {
if(!$accessop->maySetExpires($document)) {
UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied"));
}
$folder = $document->getFolder();
/* Create object for checking access to certain operations */
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
if($view) {
$view->setParam('folder', $folder);
$view->setParam('document', $document);

View File

@ -28,6 +28,7 @@ if ($user->isGuest()) {
}
if($view) {
$view->setParam('sitename', $settings->_siteName);
$view->setParam('enable2factauth', $settings->_enable2FactorAuthentication);
$view->setParam('accessobject', $accessop);
$view($_GET);

View File

@ -29,6 +29,9 @@ include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
if (!$accessop->check_view_access($view, $_GET)) {
UI::exitError(getMLText("my_account"),getMLText("access_denied"), false, $isajax);
}
if ($user->isGuest()) {
UI::exitError(getMLText("my_account"),getMLText("access_denied"));

View File

@ -31,6 +31,9 @@ include("../inc/inc.Authentication.php");
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user));
$accessop = new SeedDMS_AccessOperation($dms, $user, $settings);
if (!$accessop->check_view_access($view, $_GET)) {
UI::exitError(getMLText("my_documents"),getMLText("access_denied"));
}
if ($user->isGuest()) {
UI::exitError(getMLText("my_documents"),getMLText("access_denied"));

View File

@ -84,19 +84,6 @@ if(isset($options['k'])) {
$keywords = $options['k'];
}
$categories = array();
if(isset($options['K'])) {
$categorynames = explode(',', $options['K']);
foreach($categorynames as $categoryname) {
$cat = $dms->getDocumentCategoryByName($categoryname);
if($cat) {
$categories[] = $cat->getID();
} else {
echo "Category '".$categoryname."' not found\n";
}
}
}
$sequence = 0;
if(isset($options['s'])) {
$sequence = $options['s'];
@ -143,6 +130,20 @@ if(!$dms->checkVersion()) {
exit;
}
/* Parse categories */
$categories = array();
if(isset($options['K'])) {
$categorynames = explode(',', $options['K']);
foreach($categorynames as $categoryname) {
$cat = $dms->getDocumentCategoryByName($categoryname);
if($cat) {
$categories[] = $cat;
} else {
echo "Category '".$categoryname."' not found\n";
}
}
}
/* Parse document attributes. */
$document_attributes = array();
if (isset($options['a'])) {

View File

@ -1,107 +0,0 @@
<?php
/**
* Implementation of AddTransmittal view
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal,
* 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli,
* 2010-2012 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Include parent class
*/
require_once("class.Bootstrap.php");
/**
* Class which outputs the html page for AddTransmittal view
*
* @category DMS
* @package SeedDMS
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal,
* 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli,
* 2010-2012 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_View_AddTransmittal extends SeedDMS_Bootstrap_Style {
function js() { /* {{{ */
$strictformcheck = $this->params['strictformcheck'];
header('Content-Type: application/javascript; charset=UTF-8');
?>
function checkForm()
{
msg = new Array();
if (document.form1.name.value == "") msg.push("<?php printMLText("js_no_name");?>");
<?php
if ($strictformcheck) {
?>
if (document.form1.comment.value == "") msg.push("<?php printMLText("js_no_comment");?>");
<?php
}
?>
if (msg != "") {
noty({
text: msg.join('<br />'),
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
_timeout: 1500,
});
return false;
}
else
return true;
}
$(document).ready(function() {
$('body').on('submit', '#form1', function(ev){
if(checkForm()) return;
event.preventDefault();
});
});
<?php
} /* }}} */
function show() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$strictformcheck = $this->params['strictformcheck'];
$this->htmlStartPage(getMLText("my_documents"));
$this->globalNavigation($folder);
$this->contentStart();
$this->pageNavigation(getMLText("my_documents"), "my_documents");
$this->contentHeading(getMLText("add_transmittal"));
$this->contentContainerStart();
?>
<form action="../op/op.AddTransmittal.php" id="form1" name="form1" method="post">
<?php echo createHiddenFieldWithKey('addtransmittal'); ?>
<table class="table-condensed">
<tr>
<td class="inputDescription"><?php printMLText("name");?>:</td>
<td><input type="text" name="name" size="60"></td>
</tr>
<tr>
<td class="inputDescription"><?php printMLText("comment");?>:</td>
<td><textarea name="comment" rows="4" cols="80"></textarea></td>
</tr>
<tr>
<td></td><td><input type="submit" class="btn" value="<?php printMLText("add_transmittal");?>"></td>
</tr>
</table>
</form>
<?php
$this->contentContainerEnd();
$this->contentEnd();
$this->htmlEndPage();
} /* }}} */
}
?>

View File

@ -53,6 +53,7 @@ $(document).ready( function() {
<?php
$this->printDeleteFolderButtonJs();
$this->printDeleteDocumentButtonJs();
$this->printDeleteAttributeValueButtonJs();
} /* }}} */
function info() { /* {{{ */
@ -79,11 +80,12 @@ $(document).ready( function() {
$content .= "<th>".getMLText("attribute_count")."</th>\n";
$content .= "<th></th>\n";
$content .= "</tr></thead>\n<tbody>\n";
$separator = $selattrdef->getValueSetSeparator();
foreach($res['frequencies'][$type] as $entry) {
$value = $selattrdef->parseValue($entry['value']);
$content .= "<tr>";
$content .= "<td>".implode(';', $value)."</td>";
$content .= "<td><a href=\"../out/out.Search.php?resultmode=".($type == 'folder' ? 2 : ($type == 'document' ? 1 : 3))."&attributes[".$selattrdef->getID()."]=".$entry['value']."\">".urlencode($entry['c'])."</a></td>";
$content .= "<td>".htmlspecialchars(implode('<span style="color: #aaa;">'.($separator ? ' '.$separator.' ' : ' ; ').'</span>', $value))."</td>";
$content .= "<td><a href=\"../out/out.Search.php?resultmode=".($type == 'folder' ? 2 : ($type == 'document' ? 1 : 3))."&attributes[".$selattrdef->getID()."]=".urlencode($entry['value'])."\">".urlencode($entry['c'])."</a></td>";
$content .= "<td>";
/* various checks, if the value is valid */
if(!$selattrdef->validate($entry['value'])) {
@ -99,6 +101,15 @@ $(document).ready( function() {
}
*/
$content .= "</td>";
$content .= "<td>";
$content .= "<div class=\"list-action\">";
if($user->isAdmin()) {
$content .= $this->printDeleteAttributeValueButton($selattrdef, implode(';', $value), 'splash_rm_attr_value', true);
} else {
$content .= '<span style="padding: 2px; color: #CCC;"><i class="icon-remove"></i></span>';
}
$content .= "</div>";
$content .= "</td>";
$content .= "</tr>";
}
$content .= "</tbody></table>";

View File

@ -633,7 +633,8 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
}
if ($accessMode == M_ALL) {
$menuitems['rm_document'] = array('link'=>"../out/out.RemoveDocument".$docid, 'label'=>'rm_document');
$menuitems['edit_document_access'] = array('link'=>"../out/out.DocumentAccess". $docid, 'label'=>'edit_document_access');
if ($this->check_access('DocumentAccess'))
$menuitems['edit_document_access'] = array('link'=>"../out/out.DocumentAccess". $docid, 'label'=>'edit_document_access');
}
if ($accessMode >= M_READ && !$this->params['user']->isGuest()) {
$menuitems['edit_existing_notify'] = array('link'=>"../out/out.DocumentNotify". $docid, 'label'=>'edit_existing_notify');
@ -682,8 +683,10 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
echo "<li><a href=\"../out/out.Setup2Factor.php\">".getMLText("2_factor_auth")."</a></li>\n";
if ($this->params['enableusersview']){
echo "<li><a href=\"../out/out.UsrView.php\">".getMLText("users")."</a></li>\n";
echo "<li><a href=\"../out/out.GroupView.php\">".getMLText("groups")."</a></li>\n";
if ($this->check_access('UsrView'))
echo "<li><a href=\"../out/out.UsrView.php\">".getMLText("users")."</a></li>\n";
if ($this->check_access('GroupView'))
echo "<li><a href=\"../out/out.GroupView.php\">".getMLText("groups")."</a></li>\n";
}
echo "</ul>\n";
echo "</div>\n";
@ -700,12 +703,16 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
// echo "<li><a href=\"../out/out.MyDocuments.php\">".getMLText("all_documents")."</a></li>\n";
if($this->params['workflowmode'] == 'traditional' || $this->params['workflowmode'] == 'traditional_only_approval') {
if($this->params['workflowmode'] == 'traditional')
echo "<li><a href=\"../out/out.ReviewSummary.php\">".getMLText("review_summary")."</a></li>\n";
echo "<li><a href=\"../out/out.ApprovalSummary.php\">".getMLText("approval_summary")."</a></li>\n";
if ($this->check_access('ReviewSummary'))
echo "<li><a href=\"../out/out.ReviewSummary.php\">".getMLText("review_summary")."</a></li>\n";
if ($this->check_access('ApprovalSummary'))
echo "<li><a href=\"../out/out.ApprovalSummary.php\">".getMLText("approval_summary")."</a></li>\n";
} else {
echo "<li><a href=\"../out/out.WorkflowSummary.php\">".getMLText("workflow_summary")."</a></li>\n";
if ($this->check_access('WorkflowSummary'))
echo "<li><a href=\"../out/out.WorkflowSummary.php\">".getMLText("workflow_summary")."</a></li>\n";
}
echo "<li><a href=\"../out/out.ReceiptSummary.php\">".getMLText("receipt_summary")."</a></li>\n";
if ($this->check_access('ReceiptSummary'))
echo "<li><a href=\"../out/out.ReceiptSummary.php\">".getMLText("receipt_summary")."</a></li>\n";
echo "</ul>\n";
echo "</div>\n";
return;
@ -1144,10 +1151,13 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
if ($keepID != -1) {
print " <option value=\"keep\">" . getMLText("seq_keep");
}
print " <option value=\"".$max."\">" . getMLText("seq_end");
if($this->params['defaultposition'] != 'start')
print " <option value=\"".$max."\">" . getMLText("seq_end");
if (count($objArr) > 0) {
print " <option value=\"".$min."\">" . getMLText("seq_start");
}
if($this->params['defaultposition'] == 'start')
print " <option value=\"".$max."\">" . getMLText("seq_end");
for ($i = 0; $i < count($objArr) - 1; $i++) {
if (($objArr[$i]->getID() == $keepID) || (($i + 1 < count($objArr)) && ($objArr[$i+1]->getID() == $keepID))) {
continue;
@ -1432,14 +1442,14 @@ $(document).ready(function() {
break;
default:
if($valueset = $attrdef->getValueSetAsArray()) {
echo "<input type=\"hidden\" name=\"".$fieldname."[".$attrdef->getId()."]\" value=\"\" />";
echo "<input type=\"hidden\" name=\"".$fieldname."[".$attrdef->getId()."]\" value=\"\"/>";
echo "<select id=\"".$fieldname."_".$attrdef->getId()."\" name=\"".$fieldname."[".$attrdef->getId()."]";
if($attrdef->getMultipleValues()) {
echo "[]\" multiple";
} else {
echo "\"";
}
echo "".((!$norequire && $attrdef->getMinValues() > 0) ? ' required' : '')." class=\"chzn-select\">";
echo "".((!$norequire && $attrdef->getMinValues() > 0) ? ' required' : '')." class=\"chzn-select-deselect\" data-placeholder=\"".getMLText("select_value")."\">";
if(!$attrdef->getMultipleValues()) {
echo "<option value=\"\"></option>";
}
@ -2066,6 +2076,86 @@ $(document).ready( function() {
<?php
} /* }}} */
/**
* Print button with link for deleting an attribute value
*
* This button is used in document listings (e.g. on the ViewFolder page)
* for deleting a document. In seeddms version < 4.3.9 this was just a
* link to the out/out.RemoveDocument.php page which asks for confirmation
* an than calls op/op.RemoveDocument.php. Starting with version 4.3.9
* the button just opens a small popup asking for confirmation and than
* calls the ajax command 'deletedocument'. The ajax call is called
* in the click function of 'button.removedocument'. That button needs
* to have two attributes: 'rel' for the id of the document, and 'msg'
* for the message shown by notify if the document could be deleted.
*
* @param object $document document to be deleted
* @param string $msg message shown in case of successful deletion
* @param boolean $return return html instead of printing it
* @return string html content if $return is true, otherwise an empty string
*/
function printDeleteAttributeValueButton($attrdef, $value, $msg, $return=false){ /* {{{ */
$content = '';
$content .= '<a class="delete-attribute-value-btn" rel="'.$attrdef->getID().'" msg="'.getMLText($msg).'" attrvalue="'.htmlspecialchars($value, ENT_QUOTES).'" confirmmsg="'.htmlspecialchars(getMLText("confirm_rm_attr_value", array ("attrdefname" => $attrdef->getName())), ENT_QUOTES).'"><i class="icon-remove"></i></a>';
if($return)
return $content;
else
echo $content;
return '';
} /* }}} */
function printDeleteAttributeValueButtonJs(){ /* {{{ */
echo "
$(document).ready(function () {
// $('.delete-attribute-value-btn').click(function(ev) {
$('body').on('click', 'a.delete-attribute-value-btn', function(ev){
id = $(ev.currentTarget).attr('rel');
confirmmsg = $(ev.currentTarget).attr('confirmmsg');
attrvalue = $(ev.currentTarget).attr('attrvalue');
msg = $(ev.currentTarget).attr('msg');
formtoken = '".createFormKey('removeattrvalue')."';
bootbox.dialog(confirmmsg, [{
\"label\" : \"<i class='icon-remove'></i> ".getMLText("rm_attr_value")."\",
\"class\" : \"btn-danger\",
\"callback\": function() {
$.post('../op/op.AttributeMgr.php',
{ action: 'removeattrvalue', attrdefid: id, attrvalue: attrvalue, formtoken: formtoken },
function(data) {
if(data.success) {
$('#table-row-attrvalue-'+id).hide('slow');
noty({
text: msg,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500,
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500,
});
}
},
'json'
);
}
}, {
\"label\" : \"".getMLText("cancel")."\",
\"class\" : \"btn-cancel\",
\"callback\": function() {
}
}]);
});
});
";
} /* }}} */
/**
* Return HTML of a single row in the document list table
*

View File

@ -69,7 +69,6 @@ $(document).ready(function() {
$folder = $this->params['folder'];
$allUsers = $this->params['allusers'];
$allGroups = $this->params['allgroups'];
$strictformcheck = $this->params['strictformcheck'];
$notifyList = $folder->getNotifyList();

View File

@ -18,6 +18,11 @@
*/
require_once("class.Bootstrap.php");
/**
* Include class to preview documents
*/
require_once("SeedDMS/Preview.php");
/**
* Class which outputs the html page for ReceiptSummary view
*

View File

@ -341,19 +341,27 @@ if(!is_writeable($settings->_configFilePath)) {
<tr title="<?php printMLText("settings_sortUsersInList_desc");?>">
<td><?php printMLText("settings_sortUsersInList");?>:</td>
<td>
<SELECT name="sortUsersInList">
<OPTION VALUE="" <?php if ($settings->_sortUsersInList=='') echo "SELECTED" ?> ><?php printMLText("settings_sortUsersInList_val_login");?></OPTION>
<OPTION VALUE="fullname" <?php if ($settings->_sortUsersInList=='fullname') echo "SELECTED" ?> ><?php printMLText("settings_sortUsersInList_val_fullname");?></OPTION>
</SELECT>
<select name="sortUsersInList">
<option value="" <?php if ($settings->_sortUsersInList=='') echo "selected" ?> ><?php printMLText("settings_sortUsersInList_val_login");?></option>
<option value="fullname" <?php if ($settings->_sortUsersInList=='fullname') echo "selected" ?> ><?php printMLText("settings_sortUsersInList_val_fullname");?></option>
</select>
</tr>
<tr title="<?php printMLText("settings_sortFoldersDefault_desc");?>">
<td><?php printMLText("settings_sortFoldersDefault");?>:</td>
<td>
<SELECT name="sortFoldersDefault">
<OPTION VALUE="u" <?php if ($settings->_sortFoldersDefault=='') echo "SELECTED" ?> ><?php printMLText("settings_sortFoldersDefault_val_unsorted");?></OPTION>
<OPTION VALUE="s" <?php if ($settings->_sortFoldersDefault=='s') echo "SELECTED" ?> ><?php printMLText("settings_sortFoldersDefault_val_sequence");?></OPTION>
<OPTION VALUE="n" <?php if ($settings->_sortFoldersDefault=='n') echo "SELECTED" ?> ><?php printMLText("settings_sortFoldersDefault_val_name");?></OPTION>
</SELECT>
<select name="sortFoldersDefault">
<option value="u" <?php if ($settings->_sortFoldersDefault=='') echo "selected" ?> ><?php printMLText("settings_sortFoldersDefault_val_unsorted");?></option>
<option value="s" <?php if ($settings->_sortFoldersDefault=='s') echo "selected" ?> ><?php printMLText("settings_sortFoldersDefault_val_sequence");?></option>
<option value="n" <?php if ($settings->_sortFoldersDefault=='n') echo "selected" ?> ><?php printMLText("settings_sortFoldersDefault_val_name");?></option>
</select>
</tr>
<tr title="<?php printMLText("settings_defaultDocPosition_desc");?>">
<td><?php printMLText("settings_defaultDocPosition");?>:</td>
<td>
<select name="defaultDocPosition">
<option value="end" <?php if ($settings->_defaultDocPosition=='end') echo "selected" ?> ><?php printMLText("settings_defaultDocPosition_val_end");?></option>
<option value="start" <?php if ($settings->_defaultDocPosition=='start') echo "selected" ?> ><?php printMLText("settings_defaultDocPosition_val_start");?></option>
</select>
</tr>
<tr title="<?php printMLText("settings_libraryFolder_desc");?>">
<td><?php printMLText("settings_libraryFolder");?>:</td>
@ -687,6 +695,10 @@ if(!is_writeable($settings->_configFilePath)) {
</select>
</td>
</tr>
<tr title="<?php printMLText("settings_allowReviewerOnly_desc");?>">
<td><?php printMLText("settings_allowReviewerOnly");?>:</td>
<td><input name="allowReviewerOnly" type="checkbox" <?php if ($settings->_allowReviewerOnly) echo "checked" ?> /></td>
</tr>
<tr title="<?php printMLText("settings_enableAdminRevApp_desc");?>">
<td><?php printMLText("settings_enableAdminRevApp");?>:</td>
<td><input name="enableAdminRevApp" type="checkbox" <?php if ($settings->_enableAdminRevApp) echo "checked" ?> /></td>
@ -864,11 +876,14 @@ if(!is_writeable($settings->_configFilePath)) {
echo "</select>";
} elseif(!empty($conf['internal'])) {
$selections = empty($settings->_extensions[$extname][$confkey]) ? array() : explode(",", $settings->_extensions[$extname][$confkey]);
$allowempty = empty($conf['allow_empty']) ? false : $conf['allow_empty'];
switch($conf['internal']) {
case "categories":
$categories = $dms->getDocumentCategories();
if($categories) {
echo "<select class=\"chzn-select\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "").">";
echo "<select class=\"chzn-select".($allowempty ? "-deselect" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_category")."\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($categories as $category) {
echo "<option value=\"".$category->getID()."\"";
if(in_array($category->getID(), $selections))
@ -881,7 +896,9 @@ if(!is_writeable($settings->_configFilePath)) {
case "users":
$users = $dms->getAllUsers();
if($users) {
echo "<select class=\"chzn-select\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "").">";
echo "<select class=\"chzn-select".($allowempty ? "-deselect" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_user")."\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($users as $curuser) {
echo "<option value=\"".$curuser->getID()."\"";
if(in_array($curuser->getID(), $selections))
@ -894,7 +911,9 @@ if(!is_writeable($settings->_configFilePath)) {
case "groups":
$recs = $dms->getAllGroups();
if($recs) {
echo "<select class=\"chzn-select\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "").">";
echo "<select class=\"chzn-select".($allowempty ? "-deselect" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_group")."\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($recs as $rec) {
echo "<option value=\"".$rec->getID()."\"";
if(in_array($rec->getID(), $selections))
@ -907,7 +926,9 @@ if(!is_writeable($settings->_configFilePath)) {
case "attributedefinitions":
$recs = $dms->getAllAttributeDefinitions();
if($recs) {
echo "<select class=\"chzn-select\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "").">";
echo "<select class=\"chzn-select".($allowempty ? "-deselect" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_attribute_value")."\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($recs as $rec) {
echo "<option value=\"".$rec->getID()."\"";
if(in_array($rec->getID(), $selections))

View File

@ -19,13 +19,7 @@ require_once("class.Bootstrap.php");
/**
* Include classes for 2-factor authentication
*/
require "vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Qr/GoogleQRCodeProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php";
require "vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php";
require "vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php";
require "vendor/robthree/twofactorauth/lib/TwoFactorAuth.php";
require "vendor/autoload.php";
/**
* Class which outputs the html page for ForcePasswordChange view
@ -75,6 +69,7 @@ $(document).ready( function() {
function show() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$sitename = $this->params['sitename'];
$this->htmlStartPage(getMLText("2_factor_auth"), "forcepasswordchange");
$this->globalNavigation();
@ -94,7 +89,7 @@ $(document).ready( function() {
<input id="secret" class="secret" type="text" name="secret" size="30" value="<?php echo $secret; ?>"><br />
</div></div>
<div class="control-group"><label class="control-label"></label><div class="controls">
<img src="<?php echo $tfa->getQRCodeImageAsDataUri('My label', $secret); ?>">
<img src="<?php echo $tfa->getQRCodeImageAsDataUri($sitename, $secret); ?>">
</div></div>
<div class="control-group"><label class="control-label"></label><div class="controls">
<input class="btn" type="submit" value="<?php printMLText("submit_2_fact_auth") ?>"><br />
@ -105,7 +100,7 @@ $(document).ready( function() {
$this->contentContainerEnd();
$this->contentContainerStart('span6');
echo '<div>'.$oldsecret.'</div>';
echo '<div><img src="'.$tfa->getQRCodeImageAsDataUri('My label', $oldsecret).'"></div>';
echo '<div><img src="'.$tfa->getQRCodeImageAsDataUri($sitename, $oldsecret).'"></div>';
?>
<?php
}

View File

@ -407,6 +407,8 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
break;
case 'video/webm':
case 'video/mp4':
case 'video/avi':
case 'video/msvideo':
case 'video/x-msvideo':
$this->contentHeading(getMLText("preview"));
?>
@ -733,7 +735,10 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
$items = $this->callHook('extraVersionActions', $latestContent);
if($items) {
foreach($items as $item) {
echo "<li>".$item."</li>";
if(is_string($item))
echo "<li>".$item."</li>";
elseif(is_array($item))
echo "<li><a href=\"".$item['link']."\">".(!empty($item['icon']) ? "<i class=\"icon-".$item['icon']."\"></i>" : "").getMLText($item['label'])."</a></li>";
}
}
@ -937,7 +942,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
}
break;
}
if($user->isAdmin() || $r["status"] > -2) {
if($user->isAdmin() || $a["status"] > -2) {
print "<tr>\n";
print "<td>".$reqName."</td>\n";
print "<td><ul class=\"unstyled\"><li>".$a["date"]."</li>";