diff --git a/.gitignore b/.gitignore index 6ac6ee7b7..6e364c0de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.tar.gz SeedDMS_*/*.tgz ext/* +webapp/* diff --git a/CHANGELOG b/CHANGELOG index 6f853204b..8878aa466 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -234,6 +234,13 @@ - comment of document version may not be modified when document has expired - attributes of document version may be edited if enableVersionModification is true even if the document has been released, obsoleted or has been expired +- reviews and approvals can be removed by admin +- links are all created absolute based on _httpRoot instead of relative to + the current page. This fixes a potential security hole cased by malformed + links. +- add chart with number of folders per document +- add number of links, attachments, versions of a selected user in the user + manager -------------------------------------------------------------------------------- Changes in version 5.1.22 diff --git a/SeedDMS_Core/Core/inc.ClassAttribute.php b/SeedDMS_Core/Core/inc.ClassAttribute.php index e8cdc1078..6f7db8f14 100644 --- a/SeedDMS_Core/Core/inc.ClassAttribute.php +++ b/SeedDMS_Core/Core/inc.ClassAttribute.php @@ -1238,8 +1238,8 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */ break; case self::type_email: foreach($values as $value) { - $success &= filter_var($value, FILTER_VALIDATE_EMAIL); - //preg_match('/^[a-z0-9._-]+@+[a-z0-9._-]+\.+[a-z]{2,63}$/i', $value); + //$success &= filter_var($value, FILTER_VALIDATE_EMAIL) ? true : false; + $success &= preg_match('/^[a-z0-9._-]+@+[a-z0-9._-]+\.+[a-z]{2,63}$/i', $value); } if(!$success) $this->_validation_error = 5; diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 9340f367c..df230a251 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -4122,7 +4122,14 @@ class SeedDMS_Core_DMS { function getStatisticalData($type='') { /* {{{ */ switch($type) { case 'docsperuser': - $queryStr = "select b.`fullName` as `key`, count(`owner`) as total from `tblDocuments` a left join `tblUsers` b on a.`owner`=b.`id` group by `owner`, b.`fullName`"; + $queryStr = "select ".$this->db->concat(array('b.`fullName`', "' ('", 'b.`login`', "')'"))." as `key`, count(`owner`) as total from `tblDocuments` a left join `tblUsers` b on a.`owner`=b.`id` group by `owner`, b.`fullName`"; + $resArr = $this->db->getResultArray($queryStr); + if (!$resArr) + return false; + + return $resArr; + case 'foldersperuser': + $queryStr = "select ".$this->db->concat(array('b.`fullName`', "' ('", 'b.`login`', "')'"))." as `key`, count(`owner`) as total from `tblFolders` a left join `tblUsers` b on a.`owner`=b.`id` group by `owner`, b.`fullName`"; $resArr = $this->db->getResultArray($queryStr); if (!$resArr) return false; diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 665677328..528f12bad 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -4806,6 +4806,53 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return $reviewLogID; } /* }}} */ + /** + * Add another entry to review log which resets the status + * + * This method will not delete anything from the database, but will add + * a new review log entry which sets the status to 0. This is only allowed + * if the current status is either 1 or -1. + * + * After calling this method SeedDMS_Core_DocumentCategory::verifyStatus() + * should be called to recalculate the document status. + * + * @param SeedDMS_Core_User $user + * @return int 0 if successful + */ + public function removeReview($reviewid, $requestUser, $comment='') { /* {{{ */ + $db = $this->_document->getDMS()->getDB(); + + // Check to see if the user can be removed from the review list. + $reviews = $this->getReviewStatus(); + if (is_bool($reviews) && !$reviews) { + return -1; + } + $reviewStatus = null; + foreach($reviews as $review) { + if($review['reviewID'] == $reviewid) { + $reviewStatus = $review; + break; + } + } + if(!$reviewStatus) + return -2; + + // The review log entry may only be removed if the status is 1 or -1 + if ($reviewStatus["status"] != 1 && $reviewStatus["status"] != -1) + return -3; + + $queryStr = "INSERT INTO `tblDocumentReviewLog` (`reviewID`, `status`, + `comment`, `date`, `userID`) ". + "VALUES ('". $reviewStatus["reviewID"] ."', '0', ".$db->qstr($comment).", ".$db->getCurrentDatetime().", '". + $requestUser->getID() ."')"; + //$queryStr = "DELETE FROM `tblDocumentReviewLog` WHERE `reviewLogID` = ".$reviewStatus['reviewLogID']; + $res=$db->getResult($queryStr); + if (is_bool($res) && !$res) + return -1; + + return 0; + } /* }}} */ + /** * Add a review to the document content * @@ -5028,6 +5075,53 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return $approveLogID; } /* }}} */ + /** + * Add another entry to approval log which resets the status + * + * This method will not delete anything from the database, but will add + * a new review log entry which sets the status to 0. This is only allowed + * if the current status is either 1 or -1. + * + * After calling this method SeedDMS_Core_DocumentCategory::verifyStatus() + * should be called to recalculate the document status. + * + * @param SeedDMS_Core_User $user + * @return int 0 if successful + */ + public function removeApproval($approveid, $requestUser, $comment='') { /* {{{ */ + $db = $this->_document->getDMS()->getDB(); + + // Check to see if the user can be removed from the approval list. + $approvals = $this->getApprovalStatus(); + if (is_bool($approvals) && !$approvals) { + return -1; + } + $approvalStatus = null; + foreach($approvals as $approval) { + if($approval['approveID'] == $approveid) { + $approvalStatus = $approval; + break; + } + } + if(!$approvalStatus) + return -2; + + // The approval log entry may only be removed if the status is 1 or -1 + if ($approvalStatus["status"] != 1 && $approvalStatus["status"] != -1) + return -3; + + $queryStr = "INSERT INTO `tblDocumentApproveLog` (`approveID`, `status`, + `comment`, `date`, `userID`) ". + "VALUES ('". $approvalStatus["approveID"] ."', '0', ".$db->qstr($comment).", ".$db->getCurrentDatetime().", '". + $requestUser->getID() ."')"; + $res=$db->getResult($queryStr); + if (is_bool($res) && !$res) + return -1; + + return 0; + } /* }}} */ + + /** * Sets approval status of a document content for a group * The functions behaves like diff --git a/SeedDMS_Core/Core/inc.ClassUser.php b/SeedDMS_Core/Core/inc.ClassUser.php index 7f3b24a3f..8e00e75ae 100644 --- a/SeedDMS_Core/Core/inc.ClassUser.php +++ b/SeedDMS_Core/Core/inc.ClassUser.php @@ -1836,6 +1836,106 @@ class SeedDMS_Core_User { /* {{{ */ $documents[] = $document; } return $documents; + } + + /** + * Returns all document links of a given user + * @return SeedDMS_Core_DocumentLink[]|bool list of document links + */ + function getDocumentLinks() { /* {{{ */ + $db = $this->_dms->getDB(); + + $queryStr = "SELECT * FROM `tblDocumentLinks` ". + "WHERE `userID` = " . $this->_id; + + $resArr = $db->getResultArray($queryStr); + if (is_bool($resArr) && !$resArr) + return false; + + $links = array(); + $classname = 'SeedDMS_Core_DocumentLink'; + foreach ($resArr as $row) { + $document = $this->_dms->getDocument($row["document"]); + $target = $this->_dms->getDocument($row["target"]); + /** @var SeedDMS_Core_Document $document */ + $link = new $classname((int) $row["id"], $document, $target, $row["userID"], $row["public"]); + $links[] = $link; + } + return $links; + } /* }}} */ + + /** + * Returns all document files of a given user + * @return SeedDMS_Core_DocumentFile[]|bool list of document files + */ + function getDocumentFiles() { /* {{{ */ + $db = $this->_dms->getDB(); + + $queryStr = "SELECT * FROM `tblDocumentFiles` ". + "WHERE `userID` = " . $this->_id; + + $resArr = $db->getResultArray($queryStr); + if (is_bool($resArr) && !$resArr) + return false; + + $files = array(); + $classname = 'SeedDMS_Core_DocumentFile'; + foreach ($resArr as $row) { + $document = $this->_dms->getDocument($row["document"]); + /** @var SeedDMS_Core_DocumentFile $file */ + $file = new $classname((int) $row["id"], $document, $row["userID"], $row["comment"], $row["date"], $row["dir"], $row["fileType"], $row["mimeType"], $row["orgFileName"], $row["name"],$row["version"],$row["public"]); + $files[] = $file; + } + return $files; + } /* }}} */ + + /** + * Returns all document contents of a given user + * @return SeedDMS_Core_DocumentContent[]|bool list of document contents + */ + function getDocumentContents() { /* {{{ */ + $db = $this->_dms->getDB(); + + $queryStr = "SELECT * FROM `tblDocumentContent` WHERE `createdBy` = " . $this->_id; + + $resArr = $db->getResultArray($queryStr); + if (is_bool($resArr) && !$resArr) + return false; + + $contents = array(); + $classname = $this->_dms->getClassname('documentcontent'); + foreach ($resArr as $row) { + $document = $this->_dms->getDocument($row["document"]); + /** @var SeedDMS_Core_DocumentContent $content */ + $content = new $classname((int) $row["id"], $this, $row["version"], $row["comment"], $row["date"], $row["createdBy"], $row["dir"], $row["orgFileName"], $row["fileType"], $row["mimeType"], $row['fileSize'], $row['checksum']); + $contents[] = $content; + } + return $contents; + } /* }}} */ + + /** + * Returns all folders of a given user + * @return SeedDMS_Core_Folder[]|bool list of folders + */ + function getFolders() { /* {{{ */ + $db = $this->_dms->getDB(); + + $queryStr = "SELECT * FROM `tblFolders` ". + "WHERE `owner` = " . $this->_id . " ORDER BY `sequence`"; + + $resArr = $db->getResultArray($queryStr); + if (is_bool($resArr) && !$resArr) + return false; + + $folders = array(); + $classname = $this->_dms->getClassname('folder'); + foreach ($resArr as $row) { + /** @var SeedDMS_Core_Folder $folder */ + $folder = new $classname((int) $row["id"], $row["name"], $row['parent'], $row["comment"], $row["date"], $row["owner"], $row["inheritAccess"], $row["defaultAccess"], $row["sequence"]); + $folder->setDMS($this->_dms); + $folders[] = $folder; + } + return $folders; } /* }}} */ /** diff --git a/SeedDMS_Core/Core/inc.DBAccessPDO.php b/SeedDMS_Core/Core/inc.DBAccessPDO.php index 72cf07f5a..12ce5b444 100644 --- a/SeedDMS_Core/Core/inc.DBAccessPDO.php +++ b/SeedDMS_Core/Core/inc.DBAccessPDO.php @@ -358,6 +358,27 @@ class SeedDMS_Core_DatabaseAccess { return str_replace('`', '"', $text); } /* }}} */ + /** + * Return sql to concat strings or fields + * + * @param array $arr list of field names or strings + * @return string concated string + */ + function concat($arr) { /* {{{ */ + switch($this->_driver) { + case 'mysql': + return 'concat('.implode(',', $arr).')'; + break; + case 'pgsql': + return implode(' || ', $arr); + break; + case 'sqlite': + return implode(' || ', $arr); + break; + } + return ''; + } /* }}} */ + /** * Execute SQL query and return result * diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 97433f0e4..859ebc226 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -1906,6 +1906,13 @@ add method SeedDMS_Core_DatabaseAccess::setLogFp() - better handling of document with an empty workflow state - fix checking of email addresses by using filter_var instead of regex - add new method SeedDMS_Core_Document::hasCategory() +- add new method SeedDMS_Core_DocumentContent::removeReview() +- add new method SeedDMS_Core_DocumentContent::removeApproval() +- add new method SeedDMS_Core_User::getFolders() +- add new method SeedDMS_Core_User::getDocumentContents() +- add new method SeedDMS_Core_User::getDocumentFiles() +- add new method SeedDMS_Core_User::getDocumentLinks() +- add new type 'foldersperuser' to method SeedDMS_Core_DMS::getStatisticalData() @@ -2224,8 +2231,19 @@ better error checking in SeedDMS_Core_Document::cancelCheckOut() GPL License -- removeFromProcesses() documents in comment of log when a user was replaced -- move SeedDMS_Core_Document::checkForDueRevisionWorkflow() into SeedDMS_Core_DocumentContent +- SeedDMS_Core_DMS::getTimeline() uses status log instead of document content +- add methods SeedDMS_Core_DocumentContent::getReviewers() and SeedDMS_Core_DocumentContent::getApprovers() +- add methods SeedDMS_Core_DocumentContent::getApproveLog() and SeedDMS_Core_DocumentContent::getReviewLog() +- better handling of document with an empty workflow state +- fix checking of email addresses by using filter_var instead of regex +- add new method SeedDMS_Core_Document::hasCategory() +- add new method SeedDMS_Core_DocumentContent::removeReview() +- add new method SeedDMS_Core_DocumentContent::removeApproval() +- add new method SeedDMS_Core_User::getFolders() +- add new method SeedDMS_Core_User::getDocumentContents() +- add new method SeedDMS_Core_User::getDocumentFiles() +- add new method SeedDMS_Core_User::getDocumentLinks() +- add new type 'foldersperuser' to method SeedDMS_Core_DMS::getStatisticalData() and add a wrapper method in SeedDMЅ_Core_Document diff --git a/SeedDMS_Lucene/Lucene/IndexedDocument.php b/SeedDMS_Lucene/Lucene/IndexedDocument.php index a0b1b8ae7..14bd3fd49 100644 --- a/SeedDMS_Lucene/Lucene/IndexedDocument.php +++ b/SeedDMS_Lucene/Lucene/IndexedDocument.php @@ -220,8 +220,20 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { return $this->mimetype; } /* }}} */ + public function setContent($data) { /* {{{ */ + $this->addField(Zend_Search_Lucene_Field::UnStored('content', $data, 'utf-8')); + } /* }}} */ + public function getCmd() { /* {{{ */ return $this->cmd; } /* }}} */ + + /* Use only for setting the command if e.g. an extension takes over the + * conversion to txt (like the office extension which uses the collabora + * conversion service). + */ + public function setCmd($cmd) { /* {{{ */ + $this->cmd = $cmd; + } /* }}} */ } ?> diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Document.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Document.php index 956c8076c..ea63d733e 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/Document.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Document.php @@ -36,14 +36,14 @@ class SeedDMS_SQLiteFTS_Document { */ protected $fields; - public function __get($key) { /* {{{ */ + public function ___get($key) { /* {{{ */ if(isset($this->fields[$key])) return $this->fields[$key]; else return false; } /* }}} */ - public function addField($key, $value) { /* {{{ */ + public function _addField($key, $value) { /* {{{ */ //if($key == 'document_id') { if($key == 'docid') { $this->id = $this->fields[$key] = (int) $value; @@ -55,12 +55,63 @@ class SeedDMS_SQLiteFTS_Document { } } /* }}} */ - public function getFieldValue($key) { /* {{{ */ + public function addField(SeedDMS_SQLiteFTS_Field $field) { /* {{{ */ + $this->fields[$field->name] = $field; + if($field->name == 'docid') { + $this->id = $field->value; + } + return $this; + } /* }}} */ + + /** + * Return an array with the names of the fields in this document. + * + * @return array + */ + public function getFieldNames() { + return array_keys($this->fields); + } + + public function _getFieldValue($key) { /* {{{ */ if(isset($this->fields[$key])) return $this->fields[$key]; else return false; } /* }}} */ + /** + * Proxy method for getFieldValue(), provides more convenient access to + * the string value of a field. + * + * @param string $name + * @return string + */ + public function __get($name) { + return $this->getFieldValue($name); + } + + /** + * Returns Zend_Search_Lucene_Field object for a named field in this document. + * + * @param string $fieldName + * @return Zend_Search_Lucene_Field + */ + public function getField($fieldName) { + if (!array_key_exists($fieldName, $this->fields)) { + require_once 'SeedDMS/SQLiteFTS/Exception.php'; + throw new SeedDMS_SQLiteFTS_Exception("Field name \"$fieldName\" not found in document."); + } + return $this->fields[$fieldName]; + } + + /** + * Returns the string value of a named field in this document. + * + * @see __get() + * @return string + */ + public function getFieldValue($fieldName) { + return $this->getField($fieldName)->value; + } } ?> diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Exception.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Exception.php new file mode 100644 index 000000000..281947dce --- /dev/null +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Exception.php @@ -0,0 +1,41 @@ + + * @copyright Copyright (C) 2010, Uwe Steinmann + * @version Release: @package_version@ + */ + + +/** + * Class for managing a field. + * + * @category DMS + * @package SeedDMS_SQLiteFTS + * @version @version@ + * @author Uwe Steinmann + * @copyright Copyright (C) 2011, Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_SQLiteFTS_Field { + + /** + * Field name + * + * @var string + */ + public $name; + + /** + * Field value + * + * @var boolean + */ + public $value; + + /** + * Object constructor + * + * @param string $name + * @param string $value + */ + public function __construct($name, $value) { + $this->name = $name; + $this->value = $value; + } + + /** + * Constructs a String-valued Field that is not tokenized, but is indexed + * and stored. Useful for non-text fields, e.g. date or url. + * + * @param string $name + * @param string $value + * @return SeedDMS_SQLiteFTS_Field + */ + public static function keyword($name, $value) { + return new self($name, $value); + } + + /** + * Constructs a String-valued Field that is tokenized and indexed, + * and is stored in the index, for return with hits. Useful for short text + * fields, like "title" or "subject". Term vector will not be stored for this field. + * + * @param string $name + * @param string $value + * @return SeedDMS_SQLiteFTS_Field + */ + public static function text($name, $value) { + return new self($name, $value); + } + + /** + * Constructs a String-valued Field that is tokenized and indexed, + * but that is not stored in the index. + * + * @param string $name + * @param string $value + * @return SeedDMS_SQLiteFTS_Field + */ + public static function unStored($name, $value) { + return new self($name, $value); + } +} diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php index 74c6ee234..0fb7c86da 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php @@ -15,6 +15,7 @@ * @uses SeedDMS_SQLiteFTS_Document */ require_once('Document.php'); +require_once('Field.php'); /** @@ -111,50 +112,50 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { $this->cmd = ''; $this->mimetype = ''; - $this->addField('title', $document->getName()); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('title', $document->getName())); if($acllist = $document->getReadAccessList(1, 1, 1)) { $allu = []; foreach($acllist['users'] as $u) $allu[] = $u->getLogin(); - $this->addField('users', implode(' ', $allu)); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('users', implode(' ', $allu))); /* $allg = []; foreach($acllist['groups'] as $g) $allg[] = $g->getName(); - $this->addField('groups', implode(' ', $allg)); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('groups', implode(' ', $allg))); */ } if($attributes = $document->getAttributes()) { foreach($attributes as $attribute) { $attrdef = $attribute->getAttributeDefinition(); if($attrdef->getValueSet() != '') - $this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue())); else - $this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue())); } } $owner = $document->getOwner(); - $this->addField('owner', $owner->getLogin()); - $this->addField('path', str_replace(':', 'x', $document->getFolderList())); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('owner', $owner->getLogin())); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('path', str_replace(':', 'x', $document->getFolderList()))); if($comment = $document->getComment()) { - $this->addField('comment', $comment); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('comment', $comment)); } if($document->isType('document')) { - $this->addField('document_id', 'D'.$document->getID()); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('document_id', 'D'.$document->getID())); $version = $document->getLatestContent(); if($version) { - $this->addField('mimetype', $version->getMimeType()); - $this->addField('origfilename', $version->getOriginalFileName()); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('mimetype', $version->getMimeType())); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('origfilename', $version->getOriginalFileName())); if(!$nocontent) - $this->addField('created', $version->getDate(), 'unindexed'); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('created', $version->getDate(), 'unindexed')); if($attributes = $version->getAttributes()) { foreach($attributes as $attribute) { $attrdef = $attribute->getAttributeDefinition(); if($attrdef->getValueSet() != '') - $this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue())); else - $this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue())); } } } @@ -163,14 +164,14 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { foreach($categories as $cat) { $names[] = $cat->getName(); } - $this->addField('category', implode(' ', $names)); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('category', implode(' ', $names))); } if($keywords = $document->getKeywords()) { - $this->addField('keywords', $keywords); + $this->addField(SeedDMS_SQLiteFTS_Field::Text('keywords', $keywords)); } if($version) { $status = $version->getStatus(); - $this->addField('status', $status['status']+10); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('status', $status['status']+10)); } if($version && !$nocontent) { $path = $dms->contentDir . $version->getPath(); @@ -192,7 +193,7 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { try { $content = self::execWithTimeout($cmd, $timeout); if($content['stdout']) { - $this->addField('content', $content['stdout'], 'unstored'); + $this->addField(SeedDMS_SQLiteFTS_Field::UnStored('content', $content['stdout'])); } if($content['stderr']) { $this->errormsg = $content['stderr']; @@ -203,8 +204,8 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { } } } elseif($document->isType('folder')) { - $this->addField('document_id', 'F'.$document->getID()); - $this->addField('created', $document->getDate(), 'unindexed'); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('document_id', 'F'.$document->getID())); + $this->addField(SeedDMS_SQLiteFTS_Field::Keyword('created', $document->getDate(), 'unindexed')); } } /* }}} */ @@ -216,8 +217,20 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { return $this->mimetype; } /* }}} */ + public function setContent($data) { /* {{{ */ + $this->addField(SeedDMS_SQLiteFTS_Field::Text('content', $data)); + } /* }}} */ + public function getCmd() { /* {{{ */ return $this->cmd; } /* }}} */ + + /* Use only for setting the command if e.g. an extension takes over the + * conversion to txt (like the office extension which uses the collabora + * conversion service). + */ + public function setCmd($cmd) { /* {{{ */ + $this->cmd = $cmd; + } /* }}} */ } ?> diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php b/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php index bb77b9835..68037bb8d 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/Indexer.php @@ -123,7 +123,14 @@ class SeedDMS_SQLiteFTS_Indexer { if(!$this->_conn) return false; - $sql = "INSERT INTO docs (documentid, title, comment, keywords, category, owner, content, mimetype, origfilename, created, users, status, path) VALUES (".$this->_conn->quote($doc->getFieldValue('document_id')).", ".$this->_conn->quote($doc->getFieldValue('title')).", ".$this->_conn->quote($doc->getFieldValue('comment')).", ".$this->_conn->quote($doc->getFieldValue('keywords')).", ".$this->_conn->quote($doc->getFieldValue('category')).", ".$this->_conn->quote($doc->getFieldValue('owner')).", ".$this->_conn->quote($doc->getFieldValue('content')).", ".$this->_conn->quote($doc->getFieldValue('mimetype')).", ".$this->_conn->quote($doc->getFieldValue('origfilename')).", ".(int)$doc->getFieldValue('created').", ".$this->_conn->quote($doc->getFieldValue('users')).", ".$this->_conn->quote($doc->getFieldValue('status')).", ".$this->_conn->quote($doc->getFieldValue('path'))/*time()*/.")"; + foreach(array('comment', 'keywords', 'category', 'content', 'mimetype', 'origfilename', 'status', 'created') as $kk) { + try { + ${$kk} = $doc->getFieldValue($kk); + } catch (Exception $e) { + ${$kk} = ''; + } + } + $sql = "INSERT INTO docs (documentid, title, comment, keywords, category, owner, content, mimetype, origfilename, created, users, status, path) VALUES (".$this->_conn->quote($doc->getFieldValue('document_id')).", ".$this->_conn->quote($doc->getFieldValue('title')).", ".$this->_conn->quote($comment).", ".$this->_conn->quote($keywords).", ".$this->_conn->quote($category).", ".$this->_conn->quote($doc->getFieldValue('owner')).", ".$this->_conn->quote($content).", ".$this->_conn->quote($mimetype).", ".$this->_conn->quote($origfilename).", ".(int)$created.", ".$this->_conn->quote($doc->getFieldValue('users')).", ".$this->_conn->quote($status).", ".$this->_conn->quote($doc->getFieldValue('path'))/*time()*/.")"; $res = $this->_conn->exec($sql); if($res === false) { return false; @@ -243,49 +250,21 @@ class SeedDMS_SQLiteFTS_Indexer { if($res) { $rec = $res->fetch(PDO::FETCH_ASSOC); $doc = new SeedDMS_SQLiteFTS_Document(); - $doc->addField('docid', $rec[$this->_rawid]); - $doc->addField('document_id', $rec['documentid']); - $doc->addField('title', $rec['title']); - $doc->addField('comment', $rec['comment']); - $doc->addField('keywords', $rec['keywords']); - $doc->addField('category', $rec['category']); - $doc->addField('mimetype', $rec['mimetype']); - $doc->addField('origfilename', $rec['origfilename']); - $doc->addField('owner', $rec['owner']); - $doc->addField('created', $rec['created']); - $doc->addField('users', $rec['users']); - $doc->addField('status', $rec['status']); - $doc->addField('path', $rec['path']); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('docid', $rec[$this->_rawid])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('document_id', $rec['documentid'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('title', $rec['title'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('comment', $rec['comment'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('keywords', $rec['keywords'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('category', $rec['category'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('mimetype', $rec['mimetype'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('origfilename', $rec['origfilename'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('owner', $rec['owner'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('created', $rec['created'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Text('users', $rec['users'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('status', $rec['status'])); + $doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('path', $rec['path'])); if($content) - $doc->addField('content', $rec['content']); - } - return $doc; - } /* }}} */ - - /** - * Get a single folder from index - * - * @param integer $id id of folder - * @return boolean false in case of an error, otherwise true - */ - public function __getFolder($id) { /* {{{ */ - if(!$this->_conn) - return false; - - $sql = "SELECT ".$this->_rawid.", documentid, title, comment, owner, keywords, category, mimetype, origfilename, created, users, status, path FROM docs WHERE documentid='F".$id."'"; - $res = $this->_conn->query($sql); - $doc = false; - if($res) { - $rec = $res->fetch(PDO::FETCH_ASSOC); - $doc = new SeedDMS_SQLiteFTS_Document(); - $doc->addField('docid', $rec[$this->_rawid]); - $doc->addField('document_id', $rec['documentid']); - $doc->addField('title', $rec['title']); - $doc->addField('comment', $rec['comment']); - $doc->addField('owner', $rec['owner']); - $doc->addField('created', $rec['created']); - $doc->addField('users', $rec['users']); - $doc->addField('path', $rec['path']); + $doc->addField(SeedDMS_SQLiteFTS_Field::UnStored('content', $rec['content'])); } return $doc; } /* }}} */ diff --git a/SeedDMS_SQLiteFTS/package.xml b/SeedDMS_SQLiteFTS/package.xml index 8e05d96ef..a550a95b0 100644 --- a/SeedDMS_SQLiteFTS/package.xml +++ b/SeedDMS_SQLiteFTS/package.xml @@ -25,6 +25,7 @@ - close pipes in execWithTimeout(), also return exit code of command - add support for fts5 (make it the default) +- add class SeedDMS_SQLiteFTS_Field @@ -47,6 +48,12 @@ + + + + + + diff --git a/controllers/class.EditDocument.php b/controllers/class.EditDocument.php index ca4b38218..483972780 100644 --- a/controllers/class.EditDocument.php +++ b/controllers/class.EditDocument.php @@ -52,7 +52,7 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { $expires = $this->params['expires']; $oldexpires = $document->getExpires(); if ($expires != $oldexpires) { - if(!$this->callHook('preSetExpires', $document, $expires)) { + if(false === $this->callHook('preSetExpires', $document, $expires)) { } if(!$document->setExpires($expires)) { @@ -61,21 +61,21 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { $document->verifyLastestContentExpriry(); - if(!$this->callHook('postSetExpires', $document, $expires)) { + if(false === $this->callHook('postSetExpires', $document, $expires)) { } } $keywords = $this->params['keywords']; $oldkeywords = $document->getKeywords(); if ($oldkeywords != $keywords) { - if(!$this->callHook('preSetKeywords', $document, $keywords, $oldkeywords)) { + if(false === $this->callHook('preSetKeywords', $document, $keywords, $oldkeywords)) { } if(!$document->setKeywords($keywords)) { return false; } - if(!$this->callHook('postSetKeywords', $document, $keywords, $oldkeywords)) { + if(false === $this->callHook('postSetKeywords', $document, $keywords, $oldkeywords)) { } } @@ -95,21 +95,21 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { if (count($categoriesarr) != count($oldcategories) || array_diff($categories, $oldcatsids)) { - if(!$this->callHook('preSetCategories', $document, $categoriesarr, $oldcategories)) { + if(false === $this->callHook('preSetCategories', $document, $categoriesarr, $oldcategories)) { } if(!$document->setCategories($categoriesarr)) { return false; } - if(!$this->callHook('postSetCategories', $document, $categoriesarr, $oldcategories)) { + if(false === $this->callHook('postSetCategories', $document, $categoriesarr, $oldcategories)) { } } } elseif($oldcategories) { - if(!$this->callHook('preSetCategories', $document, array(), $oldcategories)) { + if(false === $this->callHook('preSetCategories', $document, array(), $oldcategories)) { } if(!$document->setCategories(array())) { return false; } - if(!$this->callHook('postSetCategories', $document, array(), $oldcategories)) { + if(false === $this->callHook('postSetCategories', $document, array(), $oldcategories)) { } } @@ -180,7 +180,7 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { return false; } - if(!$this->callHook('postEditDocument')) { + if(false === $this->callHook('postEditDocument')) { } return true; diff --git a/controllers/class.EditFolder.php b/controllers/class.EditFolder.php index 7e37d5016..b3a3c572b 100644 --- a/controllers/class.EditFolder.php +++ b/controllers/class.EditFolder.php @@ -108,7 +108,7 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common { return false; } - if(!$this->callHook('postEditFolder')) { + if(false === $this->callHook('postEditFolder')) { } return true; diff --git a/controllers/class.EmptyFolder.php b/controllers/class.EmptyFolder.php index 529fa9a74..a6629923c 100644 --- a/controllers/class.EmptyFolder.php +++ b/controllers/class.EmptyFolder.php @@ -68,7 +68,7 @@ class SeedDMS_Controller_EmptyFolder extends SeedDMS_Controller_Common { return false; } - if(!$this->callHook('postEmptyFolder')) { + if(false === $this->callHook('postEmptyFolder')) { } return true; diff --git a/controllers/class.RemoveDocument.php b/controllers/class.RemoveDocument.php index 70cff8fe1..56e165e6a 100644 --- a/controllers/class.RemoveDocument.php +++ b/controllers/class.RemoveDocument.php @@ -68,7 +68,7 @@ class SeedDMS_Controller_RemoveDocument extends SeedDMS_Controller_Common { } } - if(!$this->callHook('postRemoveDocument')) { + if(false === $this->callHook('postRemoveDocument')) { } return true; diff --git a/controllers/class.RemoveFolder.php b/controllers/class.RemoveFolder.php index 6706eb8e4..a0633d093 100644 --- a/controllers/class.RemoveFolder.php +++ b/controllers/class.RemoveFolder.php @@ -91,7 +91,7 @@ class SeedDMS_Controller_RemoveFolder extends SeedDMS_Controller_Common { return false; } - if(!$this->callHook('postRemoveFolder')) { + if(false === $this->callHook('postRemoveFolder')) { } return true; diff --git a/controllers/class.TransferDocument.php b/controllers/class.TransferDocument.php index 6585e3f0b..fcc1d8168 100644 --- a/controllers/class.TransferDocument.php +++ b/controllers/class.TransferDocument.php @@ -42,7 +42,7 @@ class SeedDMS_Controller_TransferDocument extends SeedDMS_Controller_Common { if (!$document->transferToUser($newuser)) { return false; } else { - if(!$this->callHook('postTransferDocument')) { + if(false === $this->callHook('postTransferDocument')) { } } } diff --git a/controllers/class.UpdateDocument.php b/controllers/class.UpdateDocument.php index c394b22e1..dfceb755d 100644 --- a/controllers/class.UpdateDocument.php +++ b/controllers/class.UpdateDocument.php @@ -105,7 +105,7 @@ class SeedDMS_Controller_UpdateDocument extends SeedDMS_Controller_Common { } } - if(!$this->callHook('postUpdateDocument', $document, $content)) { + if(false === $this->callHook('postUpdateDocument', $document, $content)) { } return $content; diff --git a/inc/inc.Authentication.php b/inc/inc.Authentication.php index f0dd8ca17..70bf6d20a 100644 --- a/inc/inc.Authentication.php +++ b/inc/inc.Authentication.php @@ -158,6 +158,5 @@ if($settings->_enable2FactorAuthentication && $settings->_guestID != $user->getI /* Update cookie lifetime */ if($settings->_cookieLifetime) { $lifetime = time() + intval($settings->_cookieLifetime); - /* Turn off http only cookies if jumploader is enabled */ - setcookie("mydms_session", $dms_session, $lifetime, $settings->_httpRoot, null, null, !$settings->_enableLargeFileUpload); + setcookie("mydms_session", $dms_session, $lifetime, $settings->_httpRoot, null, false, true); } diff --git a/inc/inc.ClassControllerCommon.php b/inc/inc.ClassControllerCommon.php index b4eb995bb..93ce0597f 100644 --- a/inc/inc.ClassControllerCommon.php +++ b/inc/inc.ClassControllerCommon.php @@ -231,6 +231,7 @@ class SeedDMS_Controller_Common { */ function callHook($hook) { /* {{{ */ $tmps = $this->getHookClassNames(); + $ret = null; foreach($tmps as $tmp) if(isset($GLOBALS['SEEDDMS_HOOKS']['controller'][lcfirst($tmp)])) { $this->lasthookresult = null; @@ -238,29 +239,35 @@ class SeedDMS_Controller_Common { if (method_exists($hookObj, $hook)) { switch(func_num_args()) { case 4: - $result = $hookObj->$hook($this, func_get_arg(1), func_get_arg(2), func_get_arg(3)); + $tmpret = $hookObj->$hook($this, func_get_arg(1), func_get_arg(2), func_get_arg(3)); break; case 3: - $result = $hookObj->$hook($this, func_get_arg(1), func_get_arg(2)); + $tmpret = $hookObj->$hook($this, func_get_arg(1), func_get_arg(2)); break; case 2: - $result = $hookObj->$hook($this, func_get_arg(1)); + $tmpret = $hookObj->$hook($this, func_get_arg(1)); break; case 1: default: - $result = $hookObj->$hook($this); + $tmpret = $hookObj->$hook($this); } - if($result === false) { - return $result; + if($tmpret === false) { + return $tmpret; } - if($result !== null) { - $this->lasthookresult = $result; + if($tmpret !== null) { + $this->lasthookresult = $tmpret; + if(is_string($tmpret)) { + $ret = ($ret === null) ? $tmpret : (is_string($ret) ? $ret.$tmpret : array_merge($ret, array($tmpret))); + } elseif(is_array($tmpret)) { // || is_object($tmpret)) { + $ret = ($ret === null) ? $tmpret : (is_string($ret) ? array_merge(array($ret), $tmpret) : array_merge($ret, $tmpret)); + } else + $ret = $tmpret; } } } - return $this->lasthookresult; +// return $this->lasthookresult; } - return null; + return $ret; } /* }}} */ /** @@ -273,10 +280,12 @@ class SeedDMS_Controller_Common { */ function hasHook($hook) { /* {{{ */ $tmps = $this->getHookClassNames(); - if(isset($GLOBALS['SEEDDMS_HOOKS']['controller'][lcfirst($tmp[2])])) { - foreach($GLOBALS['SEEDDMS_HOOKS']['controller'][lcfirst($tmp[2])] as $hookObj) { - if (method_exists($hookObj, $hook)) { - return true; + foreach($tmps as $tmp) { + if(isset($GLOBALS['SEEDDMS_HOOKS']['controller'][lcfirst($tmp)])) { + foreach($GLOBALS['SEEDDMS_HOOKS']['controller'][lcfirst($tmp)] as $hookObj) { + if (method_exists($hookObj, $hook)) { + return true; + } } } } diff --git a/inc/inc.ClassSchedulerTaskBase.php b/inc/inc.ClassSchedulerTaskBase.php index 2c5330e77..d8af37452 100644 --- a/inc/inc.ClassSchedulerTaskBase.php +++ b/inc/inc.ClassSchedulerTaskBase.php @@ -109,7 +109,7 @@ class SeedDMS_SchedulerTaskBase { $this->fulltextservice = $fulltextservice; } /* }}} */ - public function execute($task) { /* {{{ */ + public function execute(SeedDMS_SchedulerTask $task) { /* {{{ */ return true; } /* }}} */ diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index 5e3135b63..14bfd00c1 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -178,6 +178,8 @@ class Settings { /* {{{ */ var $_enableSelfRevApp = false; // enable/disable update of a review/approval by the reviewer/approver var $_enableUpdateRevApp = false; + // enable/disable removal of a review/approval by the admiistrator + var $_enableRemoveRevApp = false; // enable/disable listing logged in user as recipient var $_enableSelfReceipt = false; // enable/disable update of a receipt by the recipient @@ -748,6 +750,7 @@ class Settings { /* {{{ */ $this->_enableOwnerRevApp = Settings::boolval($tab["enableOwnerRevApp"]); $this->_enableSelfRevApp = Settings::boolval($tab["enableSelfRevApp"]); $this->_enableUpdateRevApp = Settings::boolval($tab["enableUpdateRevApp"]); + $this->_enableRemoveRevApp = Settings::boolval($tab["enableRemoveRevApp"]); $this->_enableSelfReceipt = Settings::boolval($tab["enableSelfReceipt"]); $this->_enableAdminReceipt = Settings::boolval($tab["enableAdminReceipt"]); $this->_enableOwnerReceipt = Settings::boolval($tab["enableOwnerReceipt"]); @@ -1104,6 +1107,7 @@ class Settings { /* {{{ */ $this->setXMLAttributValue($node, "enableOwnerRevApp", $this->_enableOwnerRevApp); $this->setXMLAttributValue($node, "enableSelfRevApp", $this->_enableSelfRevApp); $this->setXMLAttributValue($node, "enableUpdateRevApp", $this->_enableUpdateRevApp); + $this->setXMLAttributValue($node, "enableRemoveRevApp", $this->_enableRemoveRevApp); $this->setXMLAttributValue($node, "enableSelfReceipt", $this->_enableSelfReceipt); $this->setXMLAttributValue($node, "enableAdminReceipt", $this->_enableAdminReceipt); $this->setXMLAttributValue($node, "enableOwnerReceipt", $this->_enableOwnerReceipt); diff --git a/inc/inc.ClassUI.php b/inc/inc.ClassUI.php index 3d288427d..e11591b8f 100644 --- a/inc/inc.ClassUI.php +++ b/inc/inc.ClassUI.php @@ -117,6 +117,7 @@ class UI extends UI_Default { /* Always include the base class which defines class SeedDMS_Theme_Style */ require_once($settings->_rootDir."views/".$theme."/class.".ucfirst($theme).".php"); require_once($filename); + $params['settings'] = $settings; $view = new $classname($params, $theme); /* Set some configuration parameters */ $view->setParam('accessobject', new SeedDMS_AccessOperation($dms, $user, $settings)); @@ -125,7 +126,7 @@ class UI extends UI_Default { $view->setParam('theme', $theme); $view->setParam('class', $class); $view->setParam('session', $session); - $view->setParam('settings', $settings); +// $view->setParam('settings', $settings); $view->setParam('sitename', $settings->_siteName); $view->setParam('rootfolderid', $settings->_rootFolderID); $view->setParam('disableselfedit', $settings->_disableSelfEdit); diff --git a/inc/inc.ClassViewCommon.php b/inc/inc.ClassViewCommon.php index 3667d981a..045de262c 100644 --- a/inc/inc.ClassViewCommon.php +++ b/inc/inc.ClassViewCommon.php @@ -39,7 +39,10 @@ class SeedDMS_View_Common { $this->theme = $theme; $this->params = $params; $this->baseurl = ''; - $this->imgpath = '../views/'.$theme.'/images/'; + if(isset($params['settings'])) + $this->imgpath = $params['settings']->_httpRoot.'views/'.$theme.'/images/'; + else + $this->imgpath = '../views/'.$theme.'/images/'; } public function __invoke($get=array()) { @@ -260,7 +263,7 @@ class SeedDMS_View_Common { * @param string|array $name name of view or list of view names * @return boolean true if access is allowed otherwise false */ - protected function check_access($name='') { /* {{{ */ + protected function check_view_access($name='') { /* {{{ */ if(!$name) $name = $this; if(!isset($this->params['accessobject'])) @@ -285,8 +288,8 @@ class SeedDMS_View_Common { * @param array $urlparams list of url parameters * @return string $url */ - protected function html_url($view='', $urlparams) { /* {{{ */ - $url = "../out/out.".$view.".php"; + protected function html_url($view, $urlparams=array()) { /* {{{ */ + $url = $this->params['settings']->_httpRoot."out/out.".$view.".php"; if($urlparams) $url .= "?".http_build_query($urlparams); return $url; @@ -304,9 +307,9 @@ class SeedDMS_View_Common { * @param boolean $hsc set to false if htmlspecialchars() shall not be called * @return string link */ - protected function html_link($view='', $urlparams=array(), $linkparams=array(), $link, $hsc=true, $nocheck=false) { /* {{{ */ + protected function html_link($view='', $urlparams=array(), $linkparams=array(), $link, $hsc=true, $nocheck=false, $wrap=array()) { /* {{{ */ if(!$nocheck) - if(!$this->check_access($view)) + if(!$this->check_view_access($view)) return ''; $url = $this->html_url($view, $urlparams); $tag = "$v) $tag .= " ".$k."=\"".$v."\""; $tag .= ">".($hsc ? htmlspecialchars($link) : $link).""; + if(is_array($wrap) && count($wrap) == 2) + return $wrap[0].$tag.$wrap[1]; return $tag; } /* }}} */ diff --git a/inc/inc.Tasks.php b/inc/inc.Tasks.php index c8ef229bf..d0a7d688b 100644 --- a/inc/inc.Tasks.php +++ b/inc/inc.Tasks.php @@ -18,7 +18,7 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ * @param $dms dms * @return boolean true if task was executed succesfully, otherwise false */ - public function execute($task) { + public function execute(SeedDMS_SchedulerTask $task) { $dms = $this->dms; $user = $this->user; $settings = $this->settings; @@ -117,11 +117,14 @@ class SeedDMS_ExpiredDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ * iterating over all folders recursively. */ class SeedDMS_Task_Indexer_Process_Folder { /* {{{ */ + protected $scheduler; + protected $forceupdate; protected $fulltextservice; - public function __construct($fulltextservice, $forceupdate) { /* {{{ */ + public function __construct($scheduler, $fulltextservice, $forceupdate) { /* {{{ */ + $this->scheduler = $scheduler; $this->fulltextservice = $fulltextservice; $this->forceupdate = $forceupdate; $this->numdocs = $this->fulltextservice->Indexer()->count(); @@ -249,7 +252,7 @@ class SeedDMS_IndexingDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ * * @param $dms dms * @return boolean true if task was executed succesfully, otherwise false */ - public function execute($task) { + public function execute(SeedDMS_SchedulerTask $task) { $dms = $this->dms; $logger = $this->logger; $fulltextservice = $this->fulltextservice; @@ -273,7 +276,7 @@ class SeedDMS_IndexingDocumentsTask extends SeedDMS_SchedulerTaskBase { /* {{{ * } } - $folderprocess = new SeedDMS_Task_Indexer_Process_Folder($fulltextservice, $recreate); + $folderprocess = new SeedDMS_Task_Indexer_Process_Folder($this, $fulltextservice, $recreate); call_user_func(array($folderprocess, 'process'), $folder, -1); $tree = new SeedDMS_FolderTree($folder, array($folderprocess, 'process')); } else { @@ -345,7 +348,7 @@ class SeedDMS_CheckSumTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ * @param $dms dms * @return boolean true if task was executed succesfully, otherwise false */ - public function execute($task) { + public function execute(SeedDMS_SchedulerTask $task) { $dms = $this->dms; $logger = $this->logger; $taskparams = $task->getParameter(); @@ -433,7 +436,7 @@ class SeedDMS_PreviewTask extends SeedDMS_SchedulerTaskBase { /* {{{ */ * @param $dms dms * @return boolean true if task was executed succesfully, otherwise false */ - public function execute($task) { + public function execute(SeedDMS_SchedulerTask $task) { $dms = $this->dms; $logger = $this->logger; $settings = $this->settings; diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 9729a6783..8e4b6eae9 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -525,6 +525,7 @@ URL: [url]', 'error_add_aro' => 'خطأ في الإضافة', 'error_add_permission' => 'خطأ في طلب السماح', 'error_cleared_cache' => 'خطأ في مسح المحفوظات', +'error_document_indexed' => '', 'error_edit_task' => 'خطأ في تعديل المهمة', 'error_extension_getlist' => 'خطأ في أخذ الائحة', 'error_importfs' => 'خطأ في الإستيراد', @@ -662,6 +663,7 @@ URL: [url]', 'group_management' => 'إدارة المجموعات', 'group_members' => 'أعضاء المجموعة', 'group_receipt_summary' => 'ملخص وصل المجموعة', +'group_review_removed' => '', 'group_review_summary' => 'ملخص مراجعة المجموعة', 'group_revision_summary' => '', 'guest_login' => 'الدخول كضيف', @@ -704,6 +706,7 @@ URL: [url]', 'index_waiting' => 'الفهرسة قيد الإنتظار', 'individuals' => 'افراد', 'individuals_in_groups' => 'أفراد في المجموعات', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'رابط معلومات المستلمين لم يصدر بعد', 'info_rm_user_from_processes_user' => '', 'inherited' => 'موروث', @@ -1062,6 +1065,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - تم ازالة مسار العمل من اصدار المستند', 'removeFolderFromDropFolder' => 'إزالة مجلد من إسقاط لائحة', 'remove_marked_files' => 'ازالة الملفات المختارة', +'remove_review_log' => '', 'repaired' => 'تم اصلاحه', 'repairing_objects' => 'تحضير المستندات والمجلدات.', 'replace_content_email_body' => '', @@ -1417,6 +1421,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => 'تمكين استلام سير العمل', 'settings_enableRecursiveCount' => 'تمكين عدد المستندات / المجلدات العودية', 'settings_enableRecursiveCount_desc' => 'تمكين عدد المستندات / المجلدات العودية', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => 'تمكين رفض مراجعة التصويت', @@ -1966,6 +1972,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'شاهد اونلاين', 'warning' => 'تحذير', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index f3f1e308b..a0613f10f 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -478,6 +478,7 @@ $text = array( 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -591,6 +592,7 @@ $text = array( 'group_management' => 'Управление на групи', 'group_members' => 'Членове на групата', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Сводка по рецензирането на групи', 'group_revision_summary' => '', 'guest_login' => 'Влез като гост', @@ -633,6 +635,7 @@ $text = array( 'index_waiting' => '', 'individuals' => 'Личности', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'наследен', @@ -952,6 +955,7 @@ $text = array( 'removed_workflow_email_subject' => '', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => '', +'remove_review_log' => '', 'repaired' => '', 'repairing_objects' => 'Поправка на папки и документи', 'replace_content_email_body' => '', @@ -1280,6 +1284,8 @@ $text = array( 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => '', 'settings_enableRecursiveCount_desc' => '', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1815,6 +1821,7 @@ $text = array( 'view_folder' => '', 'view_online' => 'Преглед онлайн', 'warning' => 'Внимание', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index 0cb2875df..2c94313b5 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -483,6 +483,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -596,6 +597,7 @@ URL: [url]', 'group_management' => 'Grups', 'group_members' => 'Membres del grup', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Resum del grup revisor', 'group_revision_summary' => '', 'guest_login' => 'Accés com a invitat', @@ -638,6 +640,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Individuals', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'Heredat', @@ -957,6 +960,7 @@ URL: [url]', 'removed_workflow_email_subject' => '', 'removeFolderFromDropFolder' => 'Esborrar carpeta després de la importació', 'remove_marked_files' => '', +'remove_review_log' => '', 'repaired' => '', 'repairing_objects' => '', 'replace_content_email_body' => '', @@ -1285,6 +1289,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => '', 'settings_enableRecursiveCount_desc' => '', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1820,6 +1826,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Veure online', 'warning' => 'Advertència', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index 8dd14260f..0842a6bd7 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => 'Chyba při přidávání požadavku přístupu k objektu', 'error_add_permission' => 'Chyba při přidání oprávnění', 'error_cleared_cache' => 'Chyba při vymazání mezipaměti', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => 'Chyba při získání seznamu rozšíření z úložiště', 'error_importfs' => 'Chyba při importu formy souborového systému', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Skupiny', 'group_members' => 'Členové skupiny', 'group_receipt_summary' => 'Přehled potvrzení přijímání do skupiny', +'group_review_removed' => '', 'group_review_summary' => 'Souhrn recenzí skupiny', 'group_revision_summary' => '', 'guest_login' => 'Přihlásit se jako host', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Čekání', 'individuals' => 'Jednotlivci', 'individuals_in_groups' => 'Členové skupiny', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Potvrzení o příjmu této verze dokumentu není možné, protože verze není uvolněna.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'Zděděno', @@ -1108,6 +1111,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Odstraněno workflow z verze dokumentu', 'removeFolderFromDropFolder' => 'Odstranit složku po nahrání', 'remove_marked_files' => 'Odstranit označené soubory', +'remove_review_log' => '', 'repaired' => 'opraveno', 'repairing_objects' => 'Opravuji dokumenty a složky.', 'replace_content_email_body' => '', @@ -1489,6 +1493,8 @@ Jméno: [username] 'settings_enableReceiptWorkflow_desc' => 'Povolte, pro spuštění workflow při potvrzení příjmu dokumentu.', 'settings_enableRecursiveCount' => 'Povolit rekurzivní počítání dokumentů / složek', 'settings_enableRecursiveCount_desc' => 'Při zapnutí je počet dokumentů a složek v zobrazení složek určen počítáním všech objektů při rekurzivním zpracování složek a počítáním těch dokumentů a složek, ke kterým má uživatel přístup.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Odmítnutí jedním revizorem', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2038,6 +2044,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Zobrazit online', 'warning' => 'Upozornění', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index e0618edbc..3f3a7ed7a 100644 --- a/languages/de_DE/lang.inc +++ b/languages/de_DE/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2938), dgrutsch (22) +// Translators: Admin (2948), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -235,12 +235,12 @@ URL: [url]', 'cancel_checkout' => 'Auschecken abbrechen', 'cancel_checkout_warning' => 'Das Auschecken kann beendet werden, auch wenn bereits Änderung am ausgecheckten Dokument vorgenommen worden sind. In dem Fall wird die Datei gelöscht und die Änderungen gehen verloren.', 'cannot_assign_invalid_state' => 'Die Zuweisung eines neuen Prüfers zu einem Dokument, welches noch nachbearbeitet oder überprüft wird ist nicht möglich', -'cannot_change_final_states' => 'Warnung: Nicht imstande, Dokumentstatus für Dokumente, die zurückgewiesen worden sind, oder als abgelaufen bzw. überholt markiert wurden zu ändern', +'cannot_change_final_states' => 'Warnung: Der Dokumentstatus für Dokumente, die zurückgewiesen worden sind oder als abgelaufen bzw. veraltert markiert wurden, kann nicht geändert werden.', 'cannot_delete_user' => 'Benutzer kann nicht gelöscht werden', 'cannot_delete_yourself' => 'Sie können Ihr eigenes Login nicht löschen', 'cannot_move_root' => 'Fehler: Verschieben des Hauptordners nicht möglich', -'cannot_retrieve_approval_snapshot' => 'Nicht imstande, für diese Dokumentenversion die Freigabe für den Status Snapshot zurückzuholen.', -'cannot_retrieve_review_snapshot' => 'Nicht imstande, Berichtstatus Snapshot für diese Dokumentversion zurückzuholen', +'cannot_retrieve_approval_snapshot' => 'Für diese Dokumentenversion konnte der aktuelle Freigabestatus nicht ermittelt werden.', +'cannot_retrieve_review_snapshot' => 'Für diese Dokumentenversion konnte der aktuelle Prüfstatus nicht ermittelt werden.', 'cannot_revapp_expired_docs' => 'Das Dokument kann nicht mehr geprüft oder freigegeben werden, weil es bereits abgelaufen ist.', 'cannot_rm_root' => 'Fehler: Löschen des Hauptordners nicht möglich', 'cannot_transfer_your_objects' => 'Sie können Ihre eigenen Objekte nicht transferieren.', @@ -551,6 +551,7 @@ URL: [url]', 'error_add_aro' => 'Fehler beim Hinzufügen des Zugriffsobjekts', 'error_add_permission' => 'Fehler beim Hinzufügen der Berechtigung', 'error_cleared_cache' => 'Fehler beim Löschen des Cache', +'error_document_indexed' => 'Fehler beim Indizieren des Dokuments', 'error_edit_task' => 'Fehler beim Speichern der Task', 'error_extension_getlist' => 'Fehler beim Holen der Liste der Erweiterungen aus dem Repositorium', 'error_importfs' => 'Fehler beim Importieren aus dem Dateisystem', @@ -695,6 +696,7 @@ URL: [url]', 'group_management' => 'Gruppenverwaltung', 'group_members' => 'Gruppenmitglieder', 'group_receipt_summary' => 'Übersicht Gruppenbestätigungen', +'group_review_removed' => 'Statuswechsel, weil Prufung der Gruppe [name] entfernt wurde.', 'group_review_summary' => 'Übersicht Gruppenprüfungen', 'group_revision_summary' => 'Übersicht Gruppenwiederholungsprüfungen', 'guest_login' => 'Als Gast anmelden', @@ -737,6 +739,7 @@ URL: [url]', 'index_waiting' => 'Warte', 'individuals' => 'Einzelpersonen', 'individuals_in_groups' => 'Mitglieder einer Gruppe', +'ind_review_removed' => 'Statuswechsel, weil Prufung des Benutzers [name] entfernt wurde.', 'info_recipients_tab_not_released' => 'Die Bestätigung des Empfangs für diese Dokumentenversion ist nicht möglich, weil die Version nicht freigegeben ist.', 'info_rm_user_from_processes_user' => 'Nur die noch offenen Aufgaben können auf einen anderen Benutzer übertragen werden. Bei Aufgaben, die bereits bearbeitet wurden, wird der Benutzer aus der Bearbeitungshistorie gelöscht, als würde der Benutzer selbst gelöscht.', 'inherited' => 'geerbt', @@ -1113,6 +1116,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Workflow von Dokumentenversion', 'removeFolderFromDropFolder' => 'Ordner nach Import entfernen', 'remove_marked_files' => 'Markierte Dateien löschen', +'remove_review_log' => 'Einzelne Prüfung entfernen', 'repaired' => 'repariert', 'repairing_objects' => 'Repariere Dokumente und Ordner.', 'replace_content_email_body' => 'Die letzte Version des Dokuments wurde ersetzt @@ -1509,6 +1513,8 @@ Sollten Sie kein Passwort bekommen haben, dann nutzen Sie bitte die Passwort-Ver 'settings_enableReceiptWorkflow_desc' => 'Anwählen, um den Workflow zur Kenntnisnahme von Dokumenten einzuschalten', 'settings_enableRecursiveCount' => 'Rekursive Dokumenten-/Ordner-Zählung', 'settings_enableRecursiveCount_desc' => 'Wenn diese Option eingeschaltet ist, wird die Anzahl der Dokumente und Ordner in der Ordner-Ansicht rekursiv, unter Berücksichtigung der Zugriffsrechte ermittelt.', +'settings_enableRemoveRevApp' => 'Erlaube dsa Löschen einer Prüfung/Freigabe', +'settings_enableRemoveRevApp_desc' => 'Anwählen, um Administratoren das Löschen einer Prüfung/Freigabe zu erlauben. Dabei wird die Prüfung/Freigabe nicht aus der Datenbank gelöscht, sondern durch einen neuen Eintrag im Prüf-/Freigabeprotokoll der Anfangszustand hergestellt.', 'settings_enableRevisionOneVoteReject' => 'Ablehnung durch einen Wiederholungsprüfer', 'settings_enableRevisionOneVoteReject_desc' => 'Diese Einstellung setzen, wenn die Ablehnung einer Wiederholungsprüfung durch einen einzelnen Prüfer den Status \'Korrektur erforderlich\' setzt und nicht erst alle Prüfungen abgewartet werden, bevor ein Statuswechsel vollzogen wird.', 'settings_enableRevisionOnVoteReject' => '', @@ -2058,6 +2064,7 @@ URL: [url]', 'view_folder' => 'Ordnerdetails anzeigen', 'view_online' => 'Online betrachten', 'warning' => 'Warnung', +'warning_remove_review_log' => 'Das Entfernen einer bestehenden Prüfung kann nicht rückgängig gemacht werden und wird nicht protokoliert.', 'webauthn_auth' => 'WebAuthn Authentifizierung', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index 8b3773ba3..1335f024e 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -478,6 +478,7 @@ $text = array( 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -591,6 +592,7 @@ $text = array( 'group_management' => 'Διαχείριση ομάδων', 'group_members' => 'Μέλη ομάδας', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => '', 'group_revision_summary' => '', 'guest_login' => '', @@ -633,6 +635,7 @@ $text = array( 'index_waiting' => 'Αναμονή', 'individuals' => 'Άτομα', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'Κληρονομημένο', @@ -963,6 +966,7 @@ URL: [url]', 'removed_workflow_email_subject' => '', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => '', +'remove_review_log' => '', 'repaired' => '', 'repairing_objects' => '', 'replace_content_email_body' => '', @@ -1291,6 +1295,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => '', 'settings_enableRecursiveCount_desc' => '', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1826,6 +1832,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'προβολή online', 'warning' => 'Προειδοποίηση', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 52f835883..d48c9711c 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2043), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (2052), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -551,6 +551,7 @@ URL: [url]', 'error_add_aro' => 'Error while adding access request object', 'error_add_permission' => 'Error while add permission', 'error_cleared_cache' => 'Error while clearing cache', +'error_document_indexed' => 'Error indexing document', 'error_edit_task' => 'Error when saving task', 'error_extension_getlist' => 'Error getting extension list from repository', 'error_importfs' => 'Error while importing form file system', @@ -695,6 +696,7 @@ URL: [url]', 'group_management' => 'Groups management', 'group_members' => 'Group members', 'group_receipt_summary' => 'Group receipt summary', +'group_review_removed' => 'Change of status, because review of group [name] was removed.', 'group_review_summary' => 'Group review summary', 'group_revision_summary' => 'Group revision summary', 'guest_login' => 'Login as guest', @@ -737,6 +739,7 @@ URL: [url]', 'index_waiting' => 'Waiting', 'individuals' => 'Individuals', 'individuals_in_groups' => 'Members of a group', +'ind_review_removed' => 'Change of status, because review of user [name] was removed.', 'info_recipients_tab_not_released' => 'Acknowledgement of reception for this document version is not possible, because the version is not released.', 'info_rm_user_from_processes_user' => 'Only tasks not being touched can be transfered to another user. Task which has been taken care of, will just add an item in the history, as if the user was deleted.', 'inherited' => 'inherited', @@ -1114,6 +1117,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Removed workflow from document version', 'removeFolderFromDropFolder' => 'Remove folder after import', 'remove_marked_files' => 'Remove marked files', +'remove_review_log' => 'Remove review', 'repaired' => 'repaired', 'repairing_objects' => 'Repairing documents and folders.', 'replace_content_email_body' => 'The last version of the document has been replaced @@ -1503,6 +1507,8 @@ If you did not receive a password, please use the password forgotten function on 'settings_enableReceiptWorkflow_desc' => 'Enable, to turn on the workflow to acknowledge document reception.', 'settings_enableRecursiveCount' => 'Enable recursive document/folder count', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', +'settings_enableRemoveRevApp' => 'Allow removal of existing review/approval', +'settings_enableRemoveRevApp_desc' => 'Enable this, if admins may remove an review/approval. This will not delete the review/approval from the database, but add a new entry in the review/approval log setting status to its initial state.', 'settings_enableRevisionOneVoteReject' => 'Reject by one revisor', 'settings_enableRevisionOneVoteReject_desc' => 'If enabled, the document status will be set to \'needs correction\' once the first revisor rejects the document. If disabled, the document status will not change until all revisors have finished their revision.', 'settings_enableRevisionOnVoteReject' => '', @@ -1519,7 +1525,7 @@ If you did not receive a password, please use the password forgotten function on 'settings_enableThemeSelector_desc' => 'Turns on/off the theme selector on the login page.', 'settings_enableUpdateReceipt' => 'Allow editing of existing reception', 'settings_enableUpdateReceipt_desc' => 'Enable this, if the user who has made a reception may change the decission.', -'settings_enableUpdateRevApp' => 'Allow editing of exting review/approval', +'settings_enableUpdateRevApp' => 'Allow editing of existing review/approval', 'settings_enableUpdateRevApp_desc' => 'Enable this, if the user who has made a review/approval may change the decission as long as the current workflow step has not been finished.', 'settings_enableUserImage' => 'Enable User Image', 'settings_enableUserImage_desc' => 'Enable users images', @@ -2052,6 +2058,7 @@ URL: [url]', 'view_folder' => 'View folder details', 'view_online' => 'View online', 'warning' => 'Warning', +'warning_remove_review_log' => 'Removing a single review cannot not be undone and will not be reported. The reviewer must redo the review.', 'webauthn_auth' => 'WebAuthn Authentification', 'webauthn_crossplatform_info' => 'Use cross-platform \'Yes\' when you have a removable device, like a Yubico key, which you would want to use to login on different computers; say \'No\' when your device is attached to the computer. The choice affects which device(s) are offered by the browser and/or computer security system.', 'webauthn_info' => 'WebAuthn is a password less authentification using public key cryptography. A private-public keypair (known as a credential) is created for a website. The private key is stored securely on the user’s device; a public key and randomly generated credential ID is sent to the server for storage. The server can then use that public key to prove the user’s identity. The private key is usually stored on a hardware token. The token must be registered before it can be used for authentication.', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 602169de3..d60117455 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -532,6 +532,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -669,6 +670,7 @@ URL: [url]', 'group_management' => 'Gestion de Grupos', 'group_members' => 'Miembros de grupo', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Resumen del grupo revisor', 'group_revision_summary' => '', 'guest_login' => 'Acceso como invitado', @@ -711,6 +713,7 @@ URL: [url]', 'index_waiting' => 'Esperando', 'individuals' => 'Individuales', 'individuals_in_groups' => 'Miembros del grupo', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'heredado', @@ -1077,6 +1080,7 @@ nURL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Eliminar flujo de trabajo de la versión del documento', 'removeFolderFromDropFolder' => 'Eliminar carpeta después de importar', 'remove_marked_files' => 'Eliminar ficheros marcados', +'remove_review_log' => '', 'repaired' => 'Reparado', 'repairing_objects' => 'Reparando documentos y carpetas.', 'replace_content_email_body' => '', @@ -1432,6 +1436,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'Habilitar cuenta de documento/carpeta recursivo', 'settings_enableRecursiveCount_desc' => 'Si cambia a activado, el número de documentos y carpetas en la carpeta será determinado por la cuenta de todos los objetos recursivos procesados de la carpeta y una vez contados el usuarios tendrá permiso para acceder.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Rechazado por un revisor', 'settings_enableRevisionOneVoteReject_desc' => 'Si está habilitado, una vez que el primer revisor rechaza el documento, el estado del documento será \'necesita corrección\'. Si se encuentra deshabilitado, el estado del docuento no cambiará hast que todos los revisores hayan concluido su revisión.', 'settings_enableRevisionOnVoteReject' => '', @@ -1981,6 +1987,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Ver online', 'warning' => 'Advertencia', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 0e6a3a864..78cfe17a4 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => 'Erreur lors de l’ajout de permission', 'error_cleared_cache' => 'Erreur lors du vidage du cache', +'error_document_indexed' => '', 'error_edit_task' => 'Erreur lors de la modification de la tâche', 'error_extension_getlist' => 'Erreur lors de l’obtention de la liste des extensions depuis le dépôt', 'error_importfs' => 'Erreur lors de l’import depuis le système de fichiers', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Gestion des groupes', 'group_members' => 'Membres du groupe', 'group_receipt_summary' => 'Récapitulatif groupe réception', +'group_review_removed' => '', 'group_review_summary' => 'Récapitulatif groupe vérification', 'group_revision_summary' => 'Récapitulatif groupe révision', 'guest_login' => 'Se connecter comme invité', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Chargement…', 'individuals' => 'Individuels', 'individuals_in_groups' => 'Membres d’un groupe', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'L’accusé de réception pour cette version du document n’est pas possible car la version n’est pas en état « publié ».', 'info_rm_user_from_processes_user' => 'Seules les tâches non traitées peuvent être transférées à un autre utilisateur. Pour les tâches déjà traitées, une entrée sera ajoutée dans l’historique, comme si l’utilisateur lui-même avait été supprimé.', 'inherited' => 'hérité', @@ -1109,6 +1112,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename] : [name] - Workflow retiré de la version du doument', 'removeFolderFromDropFolder' => 'Suppression du dossier après importation', 'remove_marked_files' => 'Supprimer les fichiers sélectionnés', +'remove_review_log' => '', 'repaired' => 'réparé', 'repairing_objects' => 'Réparation des documents et des dossiers.', 'replace_content_email_body' => '', @@ -1492,6 +1496,8 @@ Nom : [username] 'settings_enableReceiptWorkflow_desc' => 'Activer cette option pour permettre de confirmer la réception de document dans le workflow.', 'settings_enableRecursiveCount' => 'Décompte récursif des documents/dossiers', '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_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Rejet par un réviseur', 'settings_enableRevisionOneVoteReject_desc' => 'Si cette option est activée, le statut du document sera défini sur « nécessite une correction » une fois que le premier réviseur a rejeté le document. Si elle est désactivée, le statut du document ne changera pas jusqu’à ce que tous les réviseurs aient terminé leur révision.', 'settings_enableRevisionOnVoteReject' => '', @@ -2041,6 +2047,7 @@ URL: [url]', 'view_folder' => 'Voir les détails du dossier', 'view_online' => 'Aperçu en ligne', 'warning' => 'Avertissement', +'warning_remove_review_log' => '', 'webauthn_auth' => 'Authentification WebAuthn', 'webauthn_crossplatform_info' => 'Choisissez « Oui » lorsque vous avez un périphérique amovible, comme une clé Yubico, que vous souhaitez utiliser pour vous connecter sur différents ordinateurs ; choisissez « Non » lorsque votre appareil est connecté à l\'ordinateur. Le choix affecte le ou les appareils proposés par le navigateur et / ou le système de sécurité informatique.', 'webauthn_info' => 'WebAuthn est une authentification sans mot de passe utilisant la cryptographie à clé publique. Une paire de clés privée-publique (connue sous le nom de certificat) est créée pour un site Web. La clé privée est stockée en toute sécurité sur l’appareil de l’utilisateur ; une clé publique et un identifiant généré de manière aléatoire sont envoyés au serveur pour stockage. Le serveur peut ensuite utiliser cette clé publique pour prouver l’identité de l’utilisateur. La clé privée est généralement stockée sur un jeton matériel. Le jeton doit être enregistré avant de pouvoir être utilisé pour l’authentification.', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 87bf1f756..fcc9b96b0 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -537,6 +537,7 @@ Internet poveznica: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -674,6 +675,7 @@ Internet poveznica: [url]', 'group_management' => 'Upravljanje grupama', 'group_members' => 'Članovi grupe', 'group_receipt_summary' => 'Sažetak prijema za grupu', +'group_review_removed' => '', 'group_review_summary' => 'Sažetak pregleda grupe', 'group_revision_summary' => '', 'guest_login' => 'Prijavite se kao gost', @@ -716,6 +718,7 @@ Internet poveznica: [url]', 'index_waiting' => '', 'individuals' => 'Pojedinci', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'naslijeđeno', @@ -1081,6 +1084,7 @@ Internet poveznica: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Uklonjeni tok rada iz ove verzije dokumenta', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Ukloni označene datoteke', +'remove_review_log' => '', 'repaired' => 'popravljeno', 'repairing_objects' => 'Popravljanje dokumenata ili mapa.', 'replace_content_email_body' => '', @@ -1453,6 +1457,8 @@ Internet poveznica: [url]', 'settings_enableReceiptWorkflow_desc' => 'Omogućite kako bi omogućili tok rada za potvrđivajne prijema dokumenta.', 'settings_enableRecursiveCount' => 'Omogući rekurzivno brojanje dokumenta/mape', 'settings_enableRecursiveCount_desc' => 'Ako je uključeno, broj dokumenata i mapa u pregledu mape će biti određen brojanjem svih objekata rekurzivnom obradom mapa i brojanjem tih dokumenata i mapa kojima je korisniku omogućen pristup.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2002,6 +2008,7 @@ Internet poveznica: [url]', 'view_folder' => '', 'view_online' => 'Online pregled', 'warning' => 'Upozorenje', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 258a63992..522012f4c 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -532,6 +532,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -669,6 +670,7 @@ URL: [url]', 'group_management' => 'Csoportok', 'group_members' => 'Csoporttagok', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Csoport felülvizsgálat összefoglaló', 'group_revision_summary' => '', 'guest_login' => 'Bejelentkezés vendégként', @@ -711,6 +713,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Egyedek', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'örökölt', @@ -1077,6 +1080,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Dokumentum változatból eltávolított munkafolyamat', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Megjelölt állományok eltávolítása', +'remove_review_log' => '', 'repaired' => 'javított', 'repairing_objects' => 'Dokumentumok és mappák helyreállítása', 'replace_content_email_body' => '', @@ -1431,6 +1435,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'Engedélyezi a rekurzív dokumentum/mappa számot', 'settings_enableRecursiveCount_desc' => 'Ha be van kapcsolva a mappa nézetben a dokumentumok és mappák száma minden objektum rekurzív feldolgozásával kerül meghatározásra és a dokumentumok és mappák száma a felhasználó számára engedélyezett.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1980,6 +1986,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Online megtekintés', 'warning' => 'Figyelmeztetés', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 5a085a9d2..9b6cefe93 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -542,6 +542,7 @@ URL: [url]', 'error_add_aro' => 'Errore durante l\'accesso aggiungendo richiesta oggetto', 'error_add_permission' => 'Errore durante l\'aggiunta di permesso', 'error_cleared_cache' => 'Errore durante svuotare la cache', +'error_document_indexed' => '', 'error_edit_task' => 'Modifica attività', 'error_extension_getlist' => 'Errore nel recuperare l\'elenco delle estensioni dal repository', 'error_importfs' => 'Errore durante l\'importazione dal file system', @@ -679,6 +680,7 @@ URL: [url]', 'group_management' => 'Amministrazione gruppi', 'group_members' => 'Membri del gruppo', 'group_receipt_summary' => 'Panoramica delle conferme ricevute gruppo.', +'group_review_removed' => '', 'group_review_summary' => 'Dettaglio revisioni di gruppo', 'group_revision_summary' => 'Riepilogo revisioni del gruppo', 'guest_login' => 'Login come Ospite', @@ -721,6 +723,7 @@ URL: [url]', 'index_waiting' => 'Attendi', 'individuals' => 'Singoli', 'individuals_in_groups' => 'I membri de la gruppo', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Non è possibile confermare la ricezione di questa versione del documento, poiché la versione non è stata rilasciata.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'ereditato', @@ -1098,6 +1101,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Flusso di lavoro rimosso dalla versione del documento', 'removeFolderFromDropFolder' => 'Rimuovi la cartella di pubblicazione dopo l\'importazione', 'remove_marked_files' => 'Rimuovi i files contrassegnati', +'remove_review_log' => '', 'repaired' => 'riparato', 'repairing_objects' => 'Riparazione documenti e cartelle in corso...', 'replace_content_email_body' => '', @@ -1480,6 +1484,8 @@ Name: [username] 'settings_enableReceiptWorkflow_desc' => 'Abilitare per attivare le ricevute di notifica nel flusso di lavoro.', 'settings_enableRecursiveCount' => 'Abilita il conteggio ricursivo di documenti/cartelle', 'settings_enableRecursiveCount_desc' => 'Se selezionato il numero di documenti e sottocartelle accessibili all\'utente sarà calcolato con un conteggio ricursivo di tutti gli oggetti contenuti nella cartella.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Respinto da un revisore', 'settings_enableRevisionOneVoteReject_desc' => 'Se abilitato, lo stato del documento verrà impostato su ""necessita correzione"" una volta che il primo revisore rifiuta il documento. Se disabilitato, lo stato del documento non cambierà fino a quando tutti i revisori non avranno terminato la revisione.', 'settings_enableRevisionOnVoteReject' => 'Rifiutato da un revisore', @@ -2029,6 +2035,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Visualizza on-line', 'warning' => 'Attenzione', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index 0ad72a862..3754a8b49 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -538,6 +538,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -675,6 +676,7 @@ URL: [url]', 'group_management' => '그룹 관리', 'group_members' => '카페 회원', 'group_receipt_summary' => '그룹 접수 요약', +'group_review_removed' => '', 'group_review_summary' => '그룹 검토 요약', 'group_revision_summary' => '', 'guest_login' => '게스트로 로그인', @@ -717,6 +719,7 @@ URL: [url]', 'index_waiting' => '기다리는 중', 'individuals' => '개인', 'individuals_in_groups' => '개별 그룹', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => '상속', @@ -1075,6 +1078,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename] : [name] - 문서 버전에서 제거 된 워크플로우', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => '마크 파일을 제거', +'remove_review_log' => '', 'repaired' => '복구', 'repairing_objects' => '문서 및 폴더 복구', 'replace_content_email_body' => '', @@ -1447,6 +1451,8 @@ URL : [url]', 'settings_enableReceiptWorkflow_desc' => '문서의 수신 확인을 위해 워크플로어를 선택하고 활성화 합니다.', 'settings_enableRecursiveCount' => '재귀적 문서 / 폴더 수 사용', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1996,6 +2002,7 @@ URL : [url]', 'view_folder' => '', 'view_online' => '온라인으로 보기', 'warning' => '경고', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/lo_LA/lang.inc b/languages/lo_LA/lang.inc index 0cf039459..b921201e1 100644 --- a/languages/lo_LA/lang.inc +++ b/languages/lo_LA/lang.inc @@ -535,6 +535,7 @@ URL: [url]', 'error_add_aro' => 'ເກີດຂໍຜິດພາດຂະນະເພີ່ມການເພີ່ມຄຳຂໍການເຂົາເຖິງ', 'error_add_permission' => 'ເກີດຂໍ້ຜິດພາດໃນຂະນະເພີ່ມສິດ', 'error_cleared_cache' => 'ເກີດຂໍ້ຜິດພາດໃນຂະນະລ້າງແຄຣ', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => 'ເກີດຂໍ້ຜິດພາດໃນຂະນະເຂົ້າລະບົບໄຟລຟອມ', @@ -672,6 +673,7 @@ URL: [url]', 'group_management' => 'ການຈັດການກຸ່ມ', 'group_members' => 'ສະມາຊິກກຸ່ມ', 'group_receipt_summary' => 'ພາບລວມການຢືນຢັນເນື້ອຫາຂອງກຸ່ມ', +'group_review_removed' => '', 'group_review_summary' => 'ສະຫຼຸບບົດວິຈານຂອງກຸ່ມ', 'group_revision_summary' => '', 'guest_login' => 'ເຂົ້າສູ້ລະບົບໃນຖານະແຂກ', @@ -714,6 +716,7 @@ URL: [url]', 'index_waiting' => 'ຖ້າ', 'individuals' => 'ບຸກຄົນ', 'individuals_in_groups' => 'ສະມາຊິກຂອງກຸ່ມ', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'ຮັບການຖ່າຍທອດ', @@ -1091,6 +1094,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]:[name] - ຍ້າຍການເຮັດວຽກ (ເວີກໂຟລ) ອອກຈາກເວີຊັ້ນຂອງເອກະສານ', 'removeFolderFromDropFolder' => 'ຍ້າຍໂຟລເດີຫຼັງຈາກນຳຂໍ້ມູນເຂົ້າ', 'remove_marked_files' => 'ລົບໄຟລທີມີເຄື່ອງໝາຍໄວ້', +'remove_review_log' => '', 'repaired' => 'ການສ້ອມແປງ', 'repairing_objects' => 'ການສ້ອມແປງເອກະສານແລະໂຟລເດີ', 'replace_content_email_body' => '', @@ -1473,6 +1477,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'ເປີດໄຊ້ງານການນັບເອກະສານ/ໂຟລເດີນັບຊໍ້າ', 'settings_enableRecursiveCount_desc' => 'ຫາກເປີດໄຊ້ງານຈຳນວນເອກະສານແລະໂຟລເດີໃນມຸມມອງຂອງໂຟລເດີຈະຖືກກຳນົດໂດຍນັບວັດຖຸທັງໝົດໂດຍປະມວນຜົນໂຟລເດີໂຟລເດີຊຳ, ນັບເກະສານ ແລະໂຟລເດີທີຜູ້ໄຊ້ສາມາດເຂົ້າເຖິງໄດ້', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2022,6 +2028,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'ດູອອນລາຍ', 'warning' => 'ການເຕືອນ', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/nb_NO/lang.inc b/languages/nb_NO/lang.inc index 6e43518e3..1ddbb65a9 100644 --- a/languages/nb_NO/lang.inc +++ b/languages/nb_NO/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => 'Feil under tilføyelse av adgangsforespørselsobjekt', 'error_add_permission' => 'Feil under tilføyelse av tillatelse', 'error_cleared_cache' => 'Feil ved rensning av hurtig-minne', +'error_document_indexed' => '', 'error_edit_task' => 'Feil ved lagring av oppgave', 'error_extension_getlist' => 'Feil under mottak av utvidelsesliste fra depotet', 'error_importfs' => 'Feil under import av skjemafilsystem', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Gruppe ledelse', 'group_members' => 'Gruppemedlemmer', 'group_receipt_summary' => 'Gruppe kvitterings sammendrag', +'group_review_removed' => '', 'group_review_summary' => 'Sammendrag av gruppevisning', 'group_revision_summary' => 'Sammendrag av grupperevisjon', 'guest_login' => 'Logg inn som gjest', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Venter', 'individuals' => 'Personer', 'individuals_in_groups' => 'Medlemmer i en gruppe', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Bekreftelse av mottak for denne dokumentversjonen er ikke mulig fordi versjonen ikke er utgitt.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'arvet', @@ -1106,6 +1109,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Fjernet arbeidsflyt fra dokumentversjonen', 'removeFolderFromDropFolder' => 'Fjern mappe etter import', 'remove_marked_files' => 'Fjern markerte filer', +'remove_review_log' => '', 'repaired' => 'reparert', 'repairing_objects' => 'Reparere dokumenter og mapper.', 'replace_content_email_body' => '', @@ -1486,6 +1490,8 @@ Bruker: [username] 'settings_enableReceiptWorkflow_desc' => 'Aktiver for å slå på arbeidsflyten for å bekrefte dokumentmottak.', 'settings_enableRecursiveCount' => 'Aktiver rekursivt antall dokumenter / mapper', 'settings_enableRecursiveCount_desc' => 'Hvis det er slått på, vil antall dokumenter og mapper i mappevisningen bestemmes ved å telle alle objekter ved rekursivt å behandle mappene og telle de dokumentene og mappene brukeren har lov til å få tilgang til.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Avvist av en rådgiver', 'settings_enableRevisionOneVoteReject_desc' => 'Hvis dette er aktivert, vil dokumentstatusen settes til \'trenger korrigering \' når den første rådgiveren avviser dokumentet. Hvis den er deaktivert, vil dokumentstatus ikke endres før alle revisorer er ferdige med revisjonen.', 'settings_enableRevisionOnVoteReject' => 'Aktiver revisjon av kvote avvist', @@ -2035,6 +2041,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Vis på nett', 'warning' => 'Advarsel', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 8e0216428..c3b219633 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -542,6 +542,7 @@ URL: [url]', 'error_add_aro' => 'Verzoek om toegang toegevoegd', 'error_add_permission' => 'Voeg permissie toe', 'error_cleared_cache' => 'Fout bij het leegmaken van de cache', +'error_document_indexed' => '', 'error_edit_task' => 'Fout bij het opslaan van de taak', 'error_extension_getlist' => 'Fout bij het ophalen van de lijst met extensies uit het repository', 'error_importfs' => 'Fout bij het importeren van form file systeem', @@ -686,6 +687,7 @@ URL: [url]', 'group_management' => 'Groepenbeheer', 'group_members' => 'Groepsleden', 'group_receipt_summary' => 'Overzicht van ontvangst per groep', +'group_review_removed' => '', 'group_review_summary' => 'Samenvatting beoordeling per groep', 'group_revision_summary' => 'Samenvatting van de beoordelingen', 'guest_login' => 'Login als Gast', @@ -728,6 +730,7 @@ URL: [url]', 'index_waiting' => 'Indexering wacht', 'individuals' => 'Individuen', 'individuals_in_groups' => 'Individuen in groepen', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Ontvangstbevestiging van deze versie van het document is niet mogelijk omdat de versie nog niet is vrijgegeven.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'overgeërfd', @@ -1104,6 +1107,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Workflow verwijderd van document versie', 'removeFolderFromDropFolder' => 'Map verwijderen uit Dropfilder', 'remove_marked_files' => 'Geselecteerde bestanden worden verwijderd', +'remove_review_log' => '', 'repaired' => 'Gerepareerd', 'repairing_objects' => 'Documenten en mappen repareren.', 'replace_content_email_body' => '', @@ -1485,6 +1489,8 @@ Name: [username] 'settings_enableReceiptWorkflow_desc' => 'Aanzetten workflow-stappen', 'settings_enableRecursiveCount' => 'Document/ map teller herhalen toestaan', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Afwijzen door één revisor', 'settings_enableRevisionOneVoteReject_desc' => 'Als dit aan staat, wordt de status van het document \'correctie nodig\' zodra de eerste revisor het document afwijst. Als deze optie uit staat, verandert de status van het document niet voordat alle revisors hun bijdrage hebben geleverd.', 'settings_enableRevisionOnVoteReject' => '', @@ -2034,6 +2040,7 @@ URL: [url]', 'view_folder' => 'Map bekijken', 'view_online' => 'Bekijk online', 'warning' => 'Waarschuwing', +'warning_remove_review_log' => '', 'webauthn_auth' => 'WebAuthn Authentificatie', 'webauthn_crossplatform_info' => 'Gebruik cross-platform: kies \'Ja\' als u een verwijderbaar device hebt (bijv. een Yubico key), dat u gebruikt om verschillende computers in te loggen. Kies \'Nee\' als uw device verbonden is met de computer. De keuze bepaalt welk(e) device(s) worden aangeboden door de browser en/of het security-system van de computer.', 'webauthn_info' => 'WebAuthn is passwordless authentification met public key cryptography. Een private-public sleutelpaar (known as a credential) wordt gecreëerd voor een website. De private key wordt veilig opgeslagen op het device van de gebruiker; een public key en een random gegenereerd credential ID wordt naar de server verzonden. De server kan die dan gebruken om de identiteit van de gebruiker vast te stellen. De private key wordt meestal opgeslagen op een hardware-token. Het token moet geregistreerd worden voordat het kan worden gebruikt voor authenticatie.', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index d2666462c..709c6fca4 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -525,6 +525,7 @@ URL: [url]', 'error_add_aro' => 'Błąd podczas dodawania obiektu żądania dostępu', 'error_add_permission' => 'Błąd podczas dodawania uprawnienia', 'error_cleared_cache' => 'Błąd podczas czyszczenia pamięci podręcznej', +'error_document_indexed' => '', 'error_edit_task' => 'Błąd podczas zapisywania zadania', 'error_extension_getlist' => 'Błąd podczas pobierania listy rozszerzeń z repozytorium', 'error_importfs' => 'Błąd podczas importowania systemu plików formularza', @@ -662,6 +663,7 @@ URL: [url]', 'group_management' => 'Zarządzanie grupami', 'group_members' => 'Członkowie grupy', 'group_receipt_summary' => 'Podsumowanie potwierdzienia dla grupy', +'group_review_removed' => '', 'group_review_summary' => 'Podsumowanie opiniowania dla grupy', 'group_revision_summary' => 'Podsumowanie korekty dla grupy', 'guest_login' => 'Zalogowany jako gość', @@ -704,6 +706,7 @@ URL: [url]', 'index_waiting' => 'Oczekiwanie', 'individuals' => 'Indywidualni', 'individuals_in_groups' => 'Członkowie grupy', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Potwierdzenie odbioru dla tej wersji dokumentu nie jest możliwe, ponieważ wersja nie została wydana.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'dziedziczony', @@ -1070,6 +1073,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Usunięty workflow z wersji dokumentu', 'removeFolderFromDropFolder' => 'Usuń folder po imporcie', 'remove_marked_files' => 'Usuń zaznaczone pliki', +'remove_review_log' => '', 'repaired' => 'naprawiony', 'repairing_objects' => 'Naprawa dokumentów i katalogów.', 'replace_content_email_body' => '', @@ -1416,6 +1420,8 @@ Name: [username] 'settings_enableReceiptWorkflow_desc' => 'Włącz, aby włączyć przepływ pracy, aby potwierdzić odbiór dokumentu.', 'settings_enableRecursiveCount' => 'Włącz licznik rekurencji dokumentu/folderu', 'settings_enableRecursiveCount_desc' => 'Jeżeli jest włączone, to liczba dokumentów i folderów w widoku będzie ustalona poprzez zliczenie wszystkich obiektów przez rekurencyjnie przetwarzane foldery i policzenia tych dokumentów i folderów do których użytkownik ma dostęp', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Odrzuć przez jedną korektę', 'settings_enableRevisionOneVoteReject_desc' => 'Jeśli ta opcja jest włączona, stan dokumentu zostanie ustawiony na "wymaga korekty", gdy pierwsza korekta odrzuci dokument. Jeśli jest wyłączona, stan dokumentu nie ulegnie zmianie, dopóki wszystkie zmiany nie zakończą ich rewizji.', 'settings_enableRevisionOnVoteReject' => 'Odrzuć przez korektę', @@ -1965,6 +1971,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Obejrzyj online', 'warning' => 'Ostrzeżenie', +'warning_remove_review_log' => '', 'webauthn_auth' => 'Uwierzytelnianie WebAuthn', 'webauthn_crossplatform_info' => 'Używaj wieloplatformowego „Tak”, gdy masz urządzenie wymienne, takie jak klucz Yubico, którego chcesz użyć do logowania na różnych komputerach; Powiedz „Nie”, gdy urządzenie jest podłączone do komputera. Wybór wpływa na to, które urządzenia są oferowane przez przeglądarkę i / lub system bezpieczeństwa komputera.', 'webauthn_info' => 'WebAuthn to uwierzytelnianie bez hasła, które wykorzystuje kryptografię klucza publicznego. Dla strony internetowej tworzony jest klucz prywatny-publiczny (znany jako poświadczenie). Klucz prywatny jest bezpiecznie przechowywany na urządzeniu użytkownika; Klucz publiczny i losowo wygenerowany identyfikator poświadczenia są wysyłane do serwera w celu przechowywania. Serwer może następnie użyć tego klucza publicznego do udowodnienia tożsamości użytkownika. Klucz prywatny jest zwykle przechowywany na tokenie sprzętowym. Token musi zostać zarejestrowany, zanim będzie można go użyć do uwierzytelnienia.', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index af42be387..6f818681f 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => 'erro ao adicionar o objeto de solicitação de acesso', 'error_add_permission' => 'Erro ao adicionar permissão', 'error_cleared_cache' => 'Erro ao limpar o cache', +'error_document_indexed' => '', 'error_edit_task' => 'Erro ao salvar tarefa', 'error_extension_getlist' => 'Erro ao obter lista de extensões do repositório', 'error_importfs' => 'Erro ao importar do sistema de arquivos', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Grupos', 'group_members' => 'Membros do Grupo', 'group_receipt_summary' => 'Resumo de recebimento de grupo', +'group_review_removed' => '', 'group_review_summary' => 'Resumo da avaliação do grupo', 'group_revision_summary' => '', 'guest_login' => 'Entre como convidado', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Aguarde...', 'individuals' => 'Indivíduos', 'individuals_in_groups' => 'Members of a group', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Confirmação de recebimento para esta versão do documento não é possível, porque a versão não é liberada.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'herdado', @@ -1111,6 +1114,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Fluxo de trabalho removido da versão do documento', 'removeFolderFromDropFolder' => 'Remover pasta após a importação', 'remove_marked_files' => 'Remover arquivos marcados', +'remove_review_log' => '', 'repaired' => 'reparado', 'repairing_objects' => 'Reparando documentos e pastas', 'replace_content_email_body' => '', @@ -1492,6 +1496,8 @@ Nome: [username] 'settings_enableReceiptWorkflow_desc' => 'Habilitar para ativar o fluxo de trabalho para confirmar a entrada do documento.', 'settings_enableRecursiveCount' => 'Ativar contagem de documentos/pasta recursiva', 'settings_enableRecursiveCount_desc' => 'Se estiver ativado, o número de documentos e pastas na exibição de pasta será determinada pela contagem de todos os objetos de forma recursiva proceáando as pastas e contando eáes documentos e pastas que o usuário tem permissão de acesso.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Rejeitar por um revisor', 'settings_enableRevisionOneVoteReject_desc' => 'Configurações ativam Revisão um voto rejeitar desc', 'settings_enableRevisionOnVoteReject' => 'Configurações ativam Revisão na rejeição de votação', @@ -2041,6 +2047,7 @@ URL: [url]', 'view_folder' => 'Ver detalhes da pasta', 'view_online' => 'Ver online', 'warning' => 'Aviso', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 84cef90f0..89d6cb073 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -537,6 +537,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -674,6 +675,7 @@ URL: [url]', 'group_management' => 'Management grupuri', 'group_members' => 'Membrii grupului', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Sumar revizuiri grup', 'group_revision_summary' => '', 'guest_login' => 'Login ca oaspete', @@ -716,6 +718,7 @@ URL: [url]', 'index_waiting' => 'Așteptare', 'individuals' => 'Individuals', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'moștenit', @@ -1082,6 +1085,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Workflow eliminat din versiunea documentului', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Eliminați fișierele marcate', +'remove_review_log' => '', 'repaired' => 'reparat', 'repairing_objects' => 'Reparare documente și foldere.', 'replace_content_email_body' => '', @@ -1454,6 +1458,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'Activați numararea recursiva pentru documente/foldere', 'settings_enableRecursiveCount_desc' => 'Dacă este activată, numărul de documente și foldere din vizualizarea unui director va fi determinat prin numărarea tuturor obiectelor recursiv din folderele unde accesul utilizatorului este permis.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2003,6 +2009,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Vizualizare online', 'warning' => 'Avertisment', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index 642ef0170..c8c1fab7d 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -537,6 +537,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => 'Ошибка добавления разрешения', 'error_cleared_cache' => 'Ошибка очиски кеша', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => 'Ошибка импорта из файловой системы', @@ -674,6 +675,7 @@ URL: [url]', 'group_management' => 'Управление группами', 'group_members' => 'Члены группы', 'group_receipt_summary' => 'Обзор подтверждений получения группой', +'group_review_removed' => '', 'group_review_summary' => 'Сводка по рецензированию группы', 'group_revision_summary' => '', 'guest_login' => 'Войти как гость', @@ -716,6 +718,7 @@ URL: [url]', 'index_waiting' => 'Ожидание', 'individuals' => 'Пользователи', 'individuals_in_groups' => 'Пользователи группы', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'унаследованный', @@ -1084,6 +1087,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: удалён процесс из версии документа «[name]»', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Удалить выбранные файлы', +'remove_review_log' => '', 'repaired' => 'исправлено', 'repairing_objects' => 'Восстановление каталогов и документов', 'replace_content_email_body' => '', @@ -1461,6 +1465,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => 'Включить для активации функции подтверждения получения документа', 'settings_enableRecursiveCount' => 'Рекурсивно подсчитывать
документы и каталоги', 'settings_enableRecursiveCount_desc' => 'Если включено, количество документов и каталогов в виде каталога будет определятся рекурсивным подсчётом всех документов и каталогов разрешённых для доступа пользователя.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2010,6 +2016,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Просмотреть', 'warning' => 'Внимание', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index 748df9c3a..0fdff57ce 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => 'Error while adding access request object', 'error_add_permission' => 'Error while add permission', 'error_cleared_cache' => 'Chyba pri vymazaní vyrovnávacej pamäte', +'error_document_indexed' => '', 'error_edit_task' => 'Chyba pri ukladaní úlohy', 'error_extension_getlist' => 'Error getting extension list from repository', 'error_importfs' => 'Chyba pri importe zo súborového systému', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => 'Skupiny', 'group_members' => 'Členovia skupiny', 'group_receipt_summary' => 'Group receipt summary', +'group_review_removed' => '', 'group_review_summary' => 'Zhrnutie skupinovej recenzie', 'group_revision_summary' => '', 'guest_login' => 'Prihlásiť sa ako hosť', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => 'Čakajte', 'individuals' => 'Jednotlivci', 'individuals_in_groups' => 'Členovia skupiny', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => 'Acknowledgement of reception for this document version is not possible, because the version is not released.', 'info_rm_user_from_processes_user' => '', 'inherited' => 'zdedené', @@ -1112,6 +1115,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Removed workflow from document version', 'removeFolderFromDropFolder' => 'Po importe odstrániť zložku', 'remove_marked_files' => 'Odstrániť označené súbory', +'remove_review_log' => '', 'repaired' => 'opravené', 'repairing_objects' => 'Oprava dokumentov a zložiek.', 'replace_content_email_body' => '', @@ -1494,6 +1498,8 @@ Meno: [username] 'settings_enableReceiptWorkflow_desc' => 'Enable, to turn on the workflow to acknowledge document reception.', 'settings_enableRecursiveCount' => 'Enable recursive document/folder count', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => 'Reject by one revisor', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2043,6 +2049,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Zobraziť online', 'warning' => 'Upozornenie', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index efb91bfc1..6d47c8605 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -543,6 +543,7 @@ URL: [url]', 'error_add_aro' => 'Fel vid begärd åtkomst till objekt', 'error_add_permission' => 'Fel vid tilldelning av behörighet', 'error_cleared_cache' => 'Fel vid rensning av cache', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => 'Fel vid import från filsystem', @@ -680,6 +681,7 @@ URL: [url]', 'group_management' => 'Grupphantering', 'group_members' => 'Gruppmedlemmar', 'group_receipt_summary' => 'Sammanfattning av mottagningsbevis för grupp', +'group_review_removed' => '', 'group_review_summary' => 'Sammanfattning av gruppgranskning', 'group_revision_summary' => '', 'guest_login' => 'Gästinloggning', @@ -722,6 +724,7 @@ URL: [url]', 'index_waiting' => 'Väntar', 'individuals' => 'Personer', 'individuals_in_groups' => 'Medlemmar i en grupp', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'ärvd', @@ -1085,6 +1088,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Arbetsflöde borttaget från dokumentversion', 'removeFolderFromDropFolder' => 'Radera katalog efter import', 'remove_marked_files' => 'Ta bort markerade filer', +'remove_review_log' => '', 'repaired' => 'reparerat', 'repairing_objects' => 'Reparerar dokument och kataloger.', 'replace_content_email_body' => '', @@ -1467,6 +1471,8 @@ Kommentar: [comment]', 'settings_enableReceiptWorkflow_desc' => 'Aktivera notifiering av meddelanden i arbetsflödet.', 'settings_enableRecursiveCount' => 'Aktivera rekursiv räkning av dokument/katalog', 'settings_enableRecursiveCount_desc' => 'Om detta sätts på, kommer antal dokument och kataloger i katalogvyn fastställas genom att räkna alla objekter via rekursiv hantering av alla kataloger och räkna dessa dokument och kataloger som användaren har rättigheter till.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2016,6 +2022,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Visa online', 'warning' => 'Varning', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 7d34a2ab5..7b52ac4e3 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -531,6 +531,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -668,6 +669,7 @@ URL: [url]', 'group_management' => 'Grup yönetimi', 'group_members' => 'Grup üyeleri', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => 'Grup gözden geçirme özeti', 'group_revision_summary' => '', 'guest_login' => 'Misafir olarak giriş yap', @@ -710,6 +712,7 @@ URL: [url]', 'index_waiting' => 'Bekliyor', 'individuals' => 'Bireysel', 'individuals_in_groups' => '', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'devralındı', @@ -1078,6 +1081,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Doküman versiyonundan iş akışı silindi', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'İşaretli dosyaları sil', +'remove_review_log' => '', 'repaired' => 'onarıldı', 'repairing_objects' => 'Doküman ve klasörler onarılıyor.', 'replace_content_email_body' => '', @@ -1433,6 +1437,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => 'Özyinelenen doküman/klasör sayımını etkinleştir', 'settings_enableRecursiveCount_desc' => 'Aktif hale getirildiğinde, klasör içindeki dokümanlar ve diğer klasörlerin sayısı kullanıcının erişim hakkı olan tüm nesnelerin özyinelemeli olarak sayılması yolu ile bulunur.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1982,6 +1988,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Online görüntüle', 'warning' => 'Dikkat', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 40560eec0..312396613 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -537,6 +537,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '', 'error_cleared_cache' => '', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '', @@ -674,6 +675,7 @@ URL: [url]', 'group_management' => 'Керування групами', 'group_members' => 'Члени групи', 'group_receipt_summary' => 'Підсумки отримання групи', +'group_review_removed' => '', 'group_review_summary' => 'Підсумки рецензування групи', 'group_revision_summary' => '', 'guest_login' => 'Увійти як гість', @@ -716,6 +718,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => 'Користувачі', 'individuals_in_groups' => 'Користувачі групи', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => 'успадкований', @@ -1084,6 +1087,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: видалено процес з версії документа «[name]»', 'removeFolderFromDropFolder' => '', 'remove_marked_files' => 'Видалити обрані файли', +'remove_review_log' => '', 'repaired' => 'виправлено', 'repairing_objects' => 'Відновлення каталогів і документів', 'replace_content_email_body' => '', @@ -1454,6 +1458,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => 'Включіть для активації функції підтвердження отримання документу', 'settings_enableRecursiveCount' => 'Рекурсивно підраховувати
документи і каталоги', 'settings_enableRecursiveCount_desc' => 'Якщо увімкнено, кількість документів і каталогів при перегляді каталогу буде підраховано рекурсивно для всіх документів до яких користувач має доступ.', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -2003,6 +2009,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => 'Переглянути', 'warning' => 'Увага', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 160f585ed..930183fb6 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -531,6 +531,7 @@ URL: [url]', 'error_add_aro' => '', 'error_add_permission' => '添加权限时出错', 'error_cleared_cache' => '清理缓存时出错', +'error_document_indexed' => '', 'error_edit_task' => '', 'error_extension_getlist' => '', 'error_importfs' => '从文件系统导入时出错', @@ -664,6 +665,7 @@ URL: [url]', 'group_management' => '组管理', 'group_members' => '组成员', 'group_receipt_summary' => '', +'group_review_removed' => '', 'group_review_summary' => '校对组汇总', 'group_revision_summary' => '', 'guest_login' => '来宾登录', @@ -706,6 +708,7 @@ URL: [url]', 'index_waiting' => '', 'individuals' => '个人', 'individuals_in_groups' => '组成员', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '', 'info_rm_user_from_processes_user' => '', 'inherited' => '继承', @@ -1077,6 +1080,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - 已从文档版本中移除工作流', 'removeFolderFromDropFolder' => '导入后删除文件夹', 'remove_marked_files' => '删除选中的文件', +'remove_review_log' => '', 'repaired' => '已修复', 'repairing_objects' => '', 'replace_content_email_body' => '', @@ -1429,6 +1433,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '', 'settings_enableRecursiveCount' => '', 'settings_enableRecursiveCount_desc' => '', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '', 'settings_enableRevisionOneVoteReject_desc' => '', 'settings_enableRevisionOnVoteReject' => '', @@ -1969,6 +1975,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => '在线浏览', 'warning' => '警告', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index a39339c14..b347baca5 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -549,6 +549,7 @@ URL: [url]', 'error_add_aro' => '新增訪問請求對象時出錯', 'error_add_permission' => '新增權限時出錯', 'error_cleared_cache' => '清除緩存時出錯', +'error_document_indexed' => '', 'error_edit_task' => '保存任務時出錯', 'error_extension_getlist' => '從存儲庫獲取擴展列表時出錯', 'error_importfs' => '導入表單文件系統時出錯', @@ -693,6 +694,7 @@ URL: [url]', 'group_management' => '組管理', 'group_members' => '組成員', 'group_receipt_summary' => '群組回覆匯總', +'group_review_removed' => '', 'group_review_summary' => '校對組匯總', 'group_revision_summary' => '群組修訂匯總', 'guest_login' => '來賓登錄', @@ -735,6 +737,7 @@ URL: [url]', 'index_waiting' => '請稍後', 'individuals' => '個人', 'individuals_in_groups' => '小組成員', +'ind_review_removed' => '', 'info_recipients_tab_not_released' => '由於未發布該文檔版本,因此無法確認接收。', 'info_rm_user_from_processes_user' => '', 'inherited' => '繼承', @@ -1110,6 +1113,7 @@ URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - 從文檔版本中刪除了工作流程', 'removeFolderFromDropFolder' => '導入後刪除文件夾', 'remove_marked_files' => '刪除勾選的檔案', +'remove_review_log' => '', 'repaired' => '修復', 'repairing_objects' => '修復文檔和文件夾。', 'replace_content_email_body' => '', @@ -1492,6 +1496,8 @@ URL: [url]', 'settings_enableReceiptWorkflow_desc' => '啟用,打開工作流程以確認文檔接收。', 'settings_enableRecursiveCount' => '啟用遞歸文檔/文件夾計數', 'settings_enableRecursiveCount_desc' => '如果啟用,將通過遞歸處理文件夾併計數允許用戶訪問的那些文件和文件夾來計算所有對象,從而確定文件夾視圖中的文件和文件夾的數量。', +'settings_enableRemoveRevApp' => '', +'settings_enableRemoveRevApp_desc' => '', 'settings_enableRevisionOneVoteReject' => '被一名審查員拒絕', 'settings_enableRevisionOneVoteReject_desc' => '如果啟用,則在第一個修訂者拒絕文檔後,文檔狀態將設置為“需要更正”。如果禁用,則在所有修訂者完成修訂之前,文檔狀態不會更改。', 'settings_enableRevisionOnVoteReject' => '', @@ -2041,6 +2047,7 @@ URL: [url]', 'view_folder' => '', 'view_online' => '線上流覽', 'warning' => '警告', +'warning_remove_review_log' => '', 'webauthn_auth' => '', 'webauthn_crossplatform_info' => '', 'webauthn_info' => '', diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index 96182d67f..e269ebb57 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -291,25 +291,43 @@ if (isset($_POST["grpIndRecipients"])) { } } -$docsource = 'upload'; +function reArrayFiles(&$file_post) { + $file_ary = array(); + $file_count = count($file_post['name']); + $file_keys = array_keys($file_post); + + for ($i=0; $i<$file_count; $i++) { + if($file_post['error'][$i] != 4) { // no file uploaded + foreach ($file_keys as $key) { + $file_ary[$i][$key] = $file_post[$key][$i]; + } + $file_ary[$i]['source'] = 'upload'; + } + } + + return $file_ary; +} + +if ($_FILES['userfile']) { + $file_ary = reArrayFiles($_FILES['userfile']); +} else { + $file_ary = array(); +} if($settings->_dropFolderDir) { if(isset($_POST["dropfolderfileadddocform"]) && $_POST["dropfolderfileadddocform"]) { $fullfile = $settings->_dropFolderDir.'/'.$user->getLogin().'/'.$_POST["dropfolderfileadddocform"]; if(file_exists($fullfile)) { - $docsource = 'dropfolder'; - /* Check if a local file is uploaded as well */ - if(isset($_FILES["userfile"]['error'][0])) { - if($_FILES["userfile"]['error'][0] != 0) - $_FILES["userfile"] = array(); - } $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $fullfile); - $_FILES["userfile"]['tmp_name'][] = $fullfile; - $_FILES["userfile"]['type'][] = $mimetype; - $_FILES["userfile"]['name'][] = $_POST["dropfolderfileadddocform"]; - $_FILES["userfile"]['size'][] = filesize($fullfile); - $_FILES["userfile"]['error'][] = 0; + $file_ary[] = array( + 'tmp_name' => $fullfile, + 'type' => $mimetype, + 'name' => $_POST["dropfolderfileadddocform"], + 'size' => filesize($fullfile), + 'error' => 0, + 'source' => 'dropfolder' + ); } } } @@ -323,11 +341,14 @@ if(isset($_POST[$prefix.'-fine-uploader-uuids']) && $_POST[$prefix.'-fine-upload if(file_exists($fullfile)) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $fullfile); - $_FILES["userfile"]['tmp_name'][] = $fullfile; - $_FILES["userfile"]['type'][] = $mimetype; - $_FILES["userfile"]['name'][] = isset($names[$i]) ? $names[$i] : $uuid; - $_FILES["userfile"]['size'][] = filesize($fullfile); - $_FILES["userfile"]['error'][] = 0; + $file_ary[] = array( + 'tmp_name' => $fullfile, + 'type' => $mimetype, + 'name' => isset($names[$i]) ? $names[$i] : $uuid, + 'size' => filesize($fullfile), + 'error' => 0, + 'source' => 'upload', + ); } } } @@ -339,21 +360,26 @@ if($settings->_libraryFolder) { $docsource = 'library'; $fullfile = tempnam(sys_get_temp_dir(), ''); if(SeedDMS_Core_File::copyFile($dms->contentDir . $content->getPath(), $fullfile)) { - /* Check if a local file is uploaded as well */ - if(isset($_FILES["userfile"]['error'][0])) { - if($_FILES["userfile"]['error'][0] != 0) - $_FILES["userfile"] = array(); - } - $_FILES["userfile"]['tmp_name'][] = $fullfile; - $_FILES["userfile"]['type'][] = $content->getMimeType(); - $_FILES["userfile"]['name'][] = $content->getOriginalFileName(); - $_FILES["userfile"]['size'][] = $content->getFileSize(); - $_FILES["userfile"]['error'][] = 0; + $file_ary[] = array( + 'tmp_name' => $fullfile, + 'type' => $content->getMimeType(), + 'name' => $content->getOriginalFileName(), + 'size' => $content->getFileSize(), + 'error' => 0, + 'source' => 'library', + ); } } } } } +if($controller->hasHook('getDocument')) { + $file_ary = array_merge($file_ary, $controller->callHook('getDocument', $_POST)); +} + +if(!$file_ary) { + UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("uploading_failed")); +} /* Check if additional notification shall be added */ $notusers = array(); @@ -377,22 +403,22 @@ if(!empty($_POST['notification_groups'])) { /* Check files for Errors first */ $maxuploadsize = SeedDMS_Core_File::parse_filesize($settings->_maxUploadSize); -for ($file_num=0;$file_num $folder->getName())),getMLText("uploading_zerosize")); } - if ($maxuploadsize && $_FILES["userfile"]["size"][$file_num] > $maxuploadsize) { + if ($maxuploadsize && $file["size"] > $maxuploadsize) { UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("uploading_maxsize")); } - if (/* is_uploaded_file($_FILES["userfile"]["tmp_name"][$file_num]) && */$_FILES['userfile']['error'][$file_num]!=0){ + if($file['error']!=0) { UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("uploading_failed")); } } -for ($file_num=0;$file_numsetParam('documentsource', $docsource); + $controller->setParam('documentsource', $file['source']); $controller->setParam('folder', $folder); $controller->setParam('fulltextservice', $fulltextservice); $controller->setParam('name', $name); diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 5900f85b5..c2368857f 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -934,7 +934,7 @@ switch($command) { if(isset($GLOBALS['SEEDDMS_HOOKS'][$hook])) { foreach($GLOBALS['SEEDDMS_HOOKS'][$hook] as $hookObj) { if (method_exists($hookObj, 'pre'.ucfirst($hook))) { - $ires = $hookObj->preIndexDocument(null, $object, $idoc); + $ires = $hookObj->{'pre'.ucfirst($hook)}(null, $object, $idoc); } } } diff --git a/op/op.EditDocument.php b/op/op.EditDocument.php index 8e9f21518..ace42d15d 100644 --- a/op/op.EditDocument.php +++ b/op/op.EditDocument.php @@ -31,6 +31,10 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access($controller, $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} /* Check if the form data comes from a trusted request */ if(!checkFormKey('editdocument')) { diff --git a/op/op.LockDocument.php b/op/op.LockDocument.php index e2b2215c9..78b40e079 100644 --- a/op/op.LockDocument.php +++ b/op/op.LockDocument.php @@ -29,6 +29,11 @@ require_once("inc/inc.DBInit.php"); require_once("inc/inc.ClassUI.php"); require_once("inc/inc.Authentication.php"); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access('LockDocument', $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} + /* Check if the form data comes from a trusted request */ if(!checkFormKey('lockdocument', 'GET')) { UI::exitError(getMLText("document_title"), getMLText("invalid_request_token")); diff --git a/op/op.MoveDocument.php b/op/op.MoveDocument.php index e1ebc227a..8006903c3 100644 --- a/op/op.MoveDocument.php +++ b/op/op.MoveDocument.php @@ -33,6 +33,11 @@ if(!checkFormKey('movedocument', 'GET')) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); } +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access('MoveDocument', $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),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")); } diff --git a/op/op.RemoveApprovalLog.php b/op/op.RemoveApprovalLog.php new file mode 100644 index 000000000..9aa103a2d --- /dev/null +++ b/op/op.RemoveApprovalLog.php @@ -0,0 +1,99 @@ + getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + +if (!isset($_POST["documentid"]) || !is_numeric($_POST["documentid"]) || intval($_POST["documentid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$documentid = $_POST["documentid"]; +$document = $dms->getDocument($documentid); + +if (!is_object($document)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +if (!$user->isAdmin() || $document->getAccessMode($user) < M_ALL) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied")); +} + +if (!isset($_POST["version"]) || !is_numeric($_POST["version"]) || intval($_POST["version"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +$version = $_POST["version"]; +$content = $document->getContentByVersion($version); + +if (!is_object($content)) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +// operation is only allowed for the last document version +$latestContent = $document->getLatestContent(); +if ($latestContent->getVersion()!=$version) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +if (!isset($_POST["approveid"]) || !is_numeric($_POST["approveid"]) || intval($_POST["approveid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_approveid")); +} +$approveid = $_POST['approveid']; +$approves = $latestContent->getApprovalStatus(); +$approveStatus = null; +foreach($approves as $approve) { + if($approve['approveID'] == $approveid) { + $approveStatus = $approve; + break; + } +} +if(!$approveStatus) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_approveid")); +} + +if($approveStatus['type'] == 0) { + $ruser = $dms->getUser($approveStatus['required']); + $msg = getMLText('ind_approval_removed', array('name'=>$ruser->getFullName())); +} elseif($approveStatus['type'] == 1) { + $rgroup = $dms->getGroup($approveStatus['required']); + $msg = getMLText('group_approval_removed', array('name'=>$rgroup->getName())); +} else + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_approveid")); + +$comment = $_POST["comment"]; +if(0 == $latestContent->removeApproval($approveid, $user, $comment)) { + $latestContent->verifyStatus(true, $user, $msg); +} +header("Location:../out/out.ViewDocument.php?documentid=".$documentid."¤ttab=revapp"); diff --git a/op/op.RemoveDocument.php b/op/op.RemoveDocument.php index f700b96ac..c53e6808d 100644 --- a/op/op.RemoveDocument.php +++ b/op/op.RemoveDocument.php @@ -30,6 +30,10 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access($controller, $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} /* Check if the form data comes from a trusted request */ if(!checkFormKey('removedocument')) { diff --git a/op/op.RemoveReviewLog.php b/op/op.RemoveReviewLog.php new file mode 100644 index 000000000..1ec2b00b3 --- /dev/null +++ b/op/op.RemoveReviewLog.php @@ -0,0 +1,99 @@ + getMLText("invalid_request_token"))),getMLText("invalid_request_token")); +} + +if (!isset($_POST["documentid"]) || !is_numeric($_POST["documentid"]) || intval($_POST["documentid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$documentid = $_POST["documentid"]; +$document = $dms->getDocument($documentid); + +if (!is_object($document)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +if (!$user->isAdmin() || $document->getAccessMode($user) < M_ALL) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied")); +} + +if (!isset($_POST["version"]) || !is_numeric($_POST["version"]) || intval($_POST["version"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +$version = $_POST["version"]; +$content = $document->getContentByVersion($version); + +if (!is_object($content)) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +// operation is only allowed for the last document version +$latestContent = $document->getLatestContent(); +if ($latestContent->getVersion()!=$version) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_version")); +} + +if (!isset($_POST["reviewid"]) || !is_numeric($_POST["reviewid"]) || intval($_POST["reviewid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_reviewid")); +} +$reviewid = $_POST['reviewid']; +$reviews = $latestContent->getReviewStatus(); +$reviewStatus = null; +foreach($reviews as $review) { + if($review['reviewID'] == $reviewid) { + $reviewStatus = $review; + break; + } +} +if(!$reviewStatus) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_reviewid")); +} + +if($reviewStatus['type'] == 0) { + $ruser = $dms->getUser($reviewStatus['required']); + $msg = getMLText('ind_review_removed', array('name'=>$ruser->getFullName())); +} elseif($reviewStatus['type'] == 1) { + $rgroup = $dms->getGroup($reviewStatus['required']); + $msg = getMLText('group_review_removed', array('name'=>$rgroup->getName())); +} else + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_reviewid")); + +$comment = $_POST["comment"]; +if(0 == $latestContent->removeReview($reviewid, $user, $comment)) { + $latestContent->verifyStatus(true, $user, $msg); +} +header("Location:../out/out.ViewDocument.php?documentid=".$documentid."¤ttab=revapp"); diff --git a/op/op.Settings.php b/op/op.Settings.php index e47af4813..c925e99ec 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -67,8 +67,8 @@ if ($action == "saveSettings") } function setBoolValue($name) { global $_POST, $settings; - if(isset($_POST[$name]) && !in_array($name, $settings->_hiddenConfFields)) { - if ($_POST[$name]=="on") + if(!in_array($name, $settings->_hiddenConfFields)) { + if (isset($_POST[$name]) && $_POST[$name]=="on") $settings->{"_".$name} = true; else $settings->{"_".$name} = false; @@ -81,8 +81,8 @@ if ($action == "saveSettings") } function setArrayValue($name) { global $_POST, $settings; - if(isset($_POST[$name]) && !in_array($name, $settings->_hiddenConfFields)) { - if($_POST[$name]) + if(!in_array($name, $settings->_hiddenConfFields)) { + if(isset($_POST[$name]) && $_POST[$name]) $settings->{"_".$name} = $_POST[$name]; else $settings->{"_".$name} = array(); @@ -250,6 +250,7 @@ if ($action == "saveSettings") setBoolValue("enableSelfRevApp"); setBoolValue("enableSelfReceipt"); setBoolValue("enableUpdateRevApp"); + setBoolValue("enableRemoveRevApp"); setBoolValue("enableAdminReceipt"); setBoolValue("enableOwnerReceipt"); setBoolValue("enableUpdateReceipt"); diff --git a/op/op.UnlockDocument.php b/op/op.UnlockDocument.php index 235e8c5d0..576ea593d 100644 --- a/op/op.UnlockDocument.php +++ b/op/op.UnlockDocument.php @@ -18,15 +18,21 @@ // 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.LogInit.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"); +if(!isset($settings)) + require_once("../inc/inc.Settings.php"); +require_once("inc/inc.LogInit.php"); +require_once("inc/inc.Utils.php"); +require_once("inc/inc.Language.php"); +require_once("inc/inc.Init.php"); +require_once("inc/inc.Extension.php"); +require_once("inc/inc.DBInit.php"); +require_once("inc/inc.ClassUI.php"); +require_once("inc/inc.Authentication.php"); + +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access('UnlockDocument', $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} /* Check if the form data comes from a trusted request */ if(!checkFormKey('unlockdocument', 'GET')) { diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php index 58cd26991..d8ac3fcac 100644 --- a/op/op.UpdateDocument.php +++ b/op/op.UpdateDocument.php @@ -30,6 +30,10 @@ include("../inc/inc.ClassController.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_controller_access($controller, $_POST)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("access_denied")); +} /* Check if the form data comes from a trusted request */ if(!checkFormKey('updatedocument')) { @@ -67,6 +71,38 @@ if ($document->isLocked()) { else $document->setLocked(false); } +function reArrayFiles(&$file_post) { + $file_post['source'] = 'upload'; + if($file_post['error'] != 4) // no file uploaded + return array($file_post); + else + return array(); +} + +if ($_FILES['userfile']) { + $file_ary = reArrayFiles($_FILES['userfile']); +} else { + $file_ary = array(); +} + +if($settings->_dropFolderDir) { + if(isset($_POST["dropfolderfileform1"]) && $_POST["dropfolderfileform1"]) { + $fullfile = $settings->_dropFolderDir.'/'.$user->getLogin().'/'.$_POST["dropfolderfileform1"]; + if(file_exists($fullfile)) { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mimetype = finfo_file($finfo, $fullfile); + $file_ary[] = array( + 'tmp_name' => $fullfile, + 'type' => $mimetype, + 'name' => $_POST["dropfolderfileform1"], + 'size' => filesize($fullfile), + 'error' => 0, + 'source' => 'dropfolder' + ); + } + } +} + $prefix = 'userfile'; if(isset($_POST[$prefix.'-fine-uploader-uuids']) && $_POST[$prefix.'-fine-uploader-uuids']) { $uuids = explode(';', $_POST[$prefix.'-fine-uploader-uuids']); @@ -76,29 +112,38 @@ if(isset($_POST[$prefix.'-fine-uploader-uuids']) && $_POST[$prefix.'-fine-upload if(file_exists($fullfile)) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $fullfile); - $_FILES["userfile"]['tmp_name'] = $fullfile; - $_FILES["userfile"]['type'] = $mimetype; - $_FILES["userfile"]['name'] = isset($names[0]) ? $names[0] : $uuid; - $_FILES["userfile"]['size'] = filesize($fullfile); - $_FILES["userfile"]['error'] = 0; + $file_ary[] = array( + 'tmp_name' => $fullfile, + 'type' => $mimetype, + 'name' => isset($names[0]) ? $names[0] : $uuid, + 'size' => filesize($fullfile), + 'error' => 0, + 'source' => 'upload', + ); } } -if (isset($_FILES['userfile']) && $_FILES['userfile']['error'] == 0) { -// if(!is_uploaded_file($_FILES["userfile"]["tmp_name"])) -// UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")."lsajdflk"); +if($controller->hasHook('getDocument')) { + $file_ary = array_merge($file_ary, $controller->callHook('getDocument', $_POST)); +} - if($_FILES["userfile"]["size"] == 0) +if(!$file_ary) { + UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("uploading_failed")); +} + +$file = $file_ary[0]; +if ($file['error'] == 0) { + if ($file["size"]==0) { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_zerosize")); - + } $maxuploadsize = SeedDMS_Core_File::parse_filesize($settings->_maxUploadSize); - if ($maxuploadsize && $_FILES["userfile"]["size"] > $maxuploadsize) { + if ($maxuploadsize && $file["size"] > $maxuploadsize) { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_maxsize")); } - $userfiletmp = $_FILES["userfile"]["tmp_name"]; - $userfiletype = $_FILES["userfile"]["type"]; - $userfilename = $_FILES["userfile"]["name"]; + $userfiletmp = $file["tmp_name"]; + $userfiletype = $file["type"]; + $userfilename = $file["name"]; if($settings->_overrideMimeType) { $finfo = finfo_open(FILEINFO_MIME_TYPE); @@ -106,32 +151,15 @@ if (isset($_FILES['userfile']) && $_FILES['userfile']['error'] == 0) { if($tmpfiletype != 'application/octet-stream') $userfiletype = $tmpfiletype; } -} elseif($settings->_dropFolderDir) { - if($_POST['dropfolderfileform1']) { - $fullfile = $settings->_dropFolderDir.'/'.$user->getLogin().'/'.$_POST["dropfolderfileform1"]; - if(file_exists($fullfile)) { - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $mimetype = finfo_file($finfo, $fullfile); - $userfiletmp = $fullfile; - $userfiletype = $mimetype; - $userfilename= $_POST["dropfolderfileform1"]; - } else { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); - } - } else { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); - } -} else { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_failed")); } /* Check if the uploaded file is identical to last version */ - $lc = $document->getLatestContent(); - if($lc->getChecksum() == SeedDMS_Core_File::checksum($userfiletmp)) { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("identical_version")); - } +$lc = $document->getLatestContent(); +if($lc->getChecksum() == SeedDMS_Core_File::checksum($userfiletmp)) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("identical_version")); +} - $fileType = ".".pathinfo($userfilename, PATHINFO_EXTENSION); +$fileType = ".".pathinfo($userfilename, PATHINFO_EXTENSION); if(isset($_POST["comment"])) $comment = $_POST["comment"]; diff --git a/out/out.PasswordForgotten.php b/out/out.PasswordForgotten.php index 70d93b1b4..3e0e346f1 100644 --- a/out/out.PasswordForgotten.php +++ b/out/out.PasswordForgotten.php @@ -31,7 +31,7 @@ require_once("inc/inc.ClassUI.php"); include $settings->_rootDir . "languages/" . $settings->_language . "/lang.inc"; $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); -$view = UI::factory($theme, $tmp[1]); +$view = UI::factory($theme, $tmp[1], array('dms'=>$dms)); $accessop = new SeedDMS_AccessOperation($dms, $user, $settings); if (isset($_REQUEST["referuri"]) && strlen($_REQUEST["referuri"])>0) { diff --git a/out/out.PasswordSend.php b/out/out.PasswordSend.php index 180dd7758..8acf55af0 100644 --- a/out/out.PasswordSend.php +++ b/out/out.PasswordSend.php @@ -32,7 +32,7 @@ require_once("inc/inc.ClassUI.php"); include $settings->_rootDir . "languages/" . $settings->_language . "/lang.inc"; $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); -$view = UI::factory($theme, $tmp[1]); +$view = UI::factory($theme, $tmp[1], array('dms'=>$dms)); $accessop = new SeedDMS_AccessOperation($dms, $user, $settings); if (isset($_REQUEST["referuri"]) && strlen($_REQUEST["referuri"])>0) { diff --git a/out/out.RemoveApprovalLog.php b/out/out.RemoveApprovalLog.php new file mode 100644 index 000000000..d310c66de --- /dev/null +++ b/out/out.RemoveApprovalLog.php @@ -0,0 +1,88 @@ + getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$document = $dms->getDocument(intval($_GET["documentid"])); + +if (!is_object($document)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$folder = $document->getFolder(); + +if (!$user->isAdmin() || $document->getAccessMode($user) < M_ALL) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); +} + +if (!isset($_GET["version"]) || !is_numeric($_GET["version"]) || intval($_GET["version"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} +$version = $_GET["version"]; +$content = $document->getContentByVersion($version); +if (!is_object($content)) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} + +// operation is admitted only for last document version +$latestContent = $document->getLatestContent(); +if ($latestContent->getVersion()!=$version) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} + +if (!isset($_GET["approveid"]) || !is_numeric($_GET["approveid"]) || intval($_GET["approveid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_approveid")); +} +$approveid = $_GET['approveid']; + +/* Create object for checking access to certain operations */ +$accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings); + +$approvals = $content->getApprovalStatus(); +if(!$approvals) { + 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->setParam('version', $content); + $view->setParam('approveid', $approveid); + $view->setParam('accessobject', $accessop); + $view($_GET); + exit; +} diff --git a/out/out.RemoveReviewLog.php b/out/out.RemoveReviewLog.php new file mode 100644 index 000000000..8e46ac83c --- /dev/null +++ b/out/out.RemoveReviewLog.php @@ -0,0 +1,88 @@ + getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$document = $dms->getDocument(intval($_GET["documentid"])); + +if (!is_object($document)) { + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); +} + +$folder = $document->getFolder(); + +if (!$user->isAdmin() || $document->getAccessMode($user) < M_ALL) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); +} + +if (!isset($_GET["version"]) || !is_numeric($_GET["version"]) || intval($_GET["version"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} +$version = $_GET["version"]; +$content = $document->getContentByVersion($version); +if (!is_object($content)) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} + +// operation is admitted only for last document version +$latestContent = $document->getLatestContent(); +if ($latestContent->getVersion()!=$version) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_version")); +} + +if (!isset($_GET["reviewid"]) || !is_numeric($_GET["reviewid"]) || intval($_GET["reviewid"])<1) { + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("invalid_reviewid")); +} +$reviewid = $_GET['reviewid']; + +/* Create object for checking access to certain operations */ +$accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings); + +$reviews = $content->getReviewStatus(); +if(!$reviews) { + 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->setParam('version', $content); + $view->setParam('reviewid', $reviewid); + $view->setParam('accessobject', $accessop); + $view($_GET); + exit; +} diff --git a/out/out.ViewDocument.php b/out/out.ViewDocument.php index ac0cc8616..1c7d8bfb8 100644 --- a/out/out.ViewDocument.php +++ b/out/out.ViewDocument.php @@ -80,6 +80,7 @@ if($view) { $view->setParam('enablereceiptworkflow', $settings->_enableReceiptWorkflow); $view->setParam('enablerevisionworkflow', $settings->_enableRevisionWorkflow); $view->setParam('enableownerrevapp', $settings->_enableOwnerRevApp); + $view->setParam('enableremoverevapp', $settings->_enableRemoveRevApp); $view->setParam('enableownerreceipt', $settings->_enableOwnerReceipt); $view->setParam('enablereceiptreject', $settings->_enableReceiptReject); $view->setParam('cachedir', $settings->_cacheDir); diff --git a/utils/schedulercli.php b/utils/schedulercli.php index dcfff3974..1d55247c3 100644 --- a/utils/schedulercli.php +++ b/utils/schedulercli.php @@ -84,6 +84,7 @@ foreach($tasks as $task) { if(method_exists($taskobj, 'execute')) { if(!$task->getDisabled() && $task->isDue()) { if($mode == 'run') { + echo get_class($task); if($taskobj->execute($task)) { add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." successful."); $task->updateLastNextRun(); diff --git a/views/bootstrap/class.AddDocument.php b/views/bootstrap/class.AddDocument.php index c829af226..8c75a5548 100644 --- a/views/bootstrap/class.AddDocument.php +++ b/views/bootstrap/class.AddDocument.php @@ -64,9 +64,11 @@ $(document).ready(function() { /* The fineuploader validation is actually checking all fields that can contain * a file to be uploaded. First checks if an alternative input field is set, * second loops through the list of scheduled uploads, checking if at least one - * file will be submitted. + * file will be submitted. param[0] is the fineuploader, param[1] is the + * field from the dropfolder */ jQuery.validator.addMethod("fineuploader", function(value, element, params) { +console.log(params); if(params[1].val() != '') return true; uploader = params[0]; @@ -104,10 +106,12 @@ $(document).ready(function() { } else { ?> 'userfile[]': { - alternatives: [$('#dropfolderfileadddocform'), $('#choosedocsearch')] + require_from_group: [1, ".fileupload-group"] +// alternatives: [$('#dropfolderfileadddocform'), $('#choosedocsearch')] }, dropfolderfileadddocform: { - alternatives: [$("#userfile"), $('#choosedocsearch')] + require_from_group: [1, ".fileupload-group"] +// alternatives: [$("#userfile"), $('#choosedocsearch')] } params['accessobject']; $this->htmlAddHeader(''."\n", 'js'); + $this->htmlAddHeader(''."\n", 'js'); $this->htmlAddHeader(''."\n", 'js'); if($enablelargefileupload) { $this->htmlAddHeader(''."\n", 'js'); @@ -412,6 +417,13 @@ $(document).ready(function() { $this->getDocumentChooserHtml("adddocform", M_READ, -1, null, 'librarydoc', $libraryfolder, 1) ); } + if($arr = $this->callHook('addDocumentContentFile')) { + if(is_array($arr)) { + $this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null); + } elseif(is_string($arr)) { + echo $arr; + } + } if(!$nodocumentformfields || !in_array('version_comment', $nodocumentformfields)) { $this->formField( getMLText("comment_for_current_version"), diff --git a/views/bootstrap/class.AddFile.php b/views/bootstrap/class.AddFile.php index bad6bbb4d..d1bf2497e 100644 --- a/views/bootstrap/class.AddFile.php +++ b/views/bootstrap/class.AddFile.php @@ -38,7 +38,7 @@ class SeedDMS_View_AddFile extends SeedDMS_Theme_Style { header('Content-Type: application/javascript; charset=UTF-8'); parent::jsTranslations(array('js_form_error', 'js_form_errors')); if($enablelargefileupload) - $this->printFineUploaderJs('../op/op.UploadChunks.php', $partitionsize, $maxuploadsize); + $this->printFineUploaderJs($this->params['settings']->_httpRoot.'op/op.UploadChunks.php', $partitionsize, $maxuploadsize); $this->printFileChooserJs(); ?> @@ -113,10 +113,10 @@ $(document).ready( function() { $enablelargefileupload = $this->params['enablelargefileupload']; $maxuploadsize = $this->params['maxuploadsize']; - $this->htmlAddHeader(''."\n", 'js'); - $this->htmlAddHeader(''."\n", 'js'); + $this->htmlAddHeader(''."\n", 'js'); + $this->htmlAddHeader(''."\n", 'js'); if($enablelargefileupload) { - $this->htmlAddHeader(''."\n", 'js'); + $this->htmlAddHeader(''."\n", 'js'); $this->htmlAddHeader($this->getFineUploaderTemplate(), 'js'); } diff --git a/views/bootstrap/class.AdminTools.php b/views/bootstrap/class.AdminTools.php index 61cfa6940..f1eb0e296 100644 --- a/views/bootstrap/class.AdminTools.php +++ b/views/bootstrap/class.AdminTools.php @@ -58,6 +58,7 @@ class SeedDMS_View_AdminTools extends SeedDMS_Theme_Style { function show() { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; + $settings = $this->params['settings']; $logfileenable = $this->params['logfileenable']; $enablefullsearch = $this->params['enablefullsearch']; $accessop = $this->params['accessobject']; @@ -74,38 +75,38 @@ class SeedDMS_View_AdminTools extends SeedDMS_Theme_Style { callHook('startOfRow', 1); ?> check_view_access('UsrMgr')) { ?> - + _httpRoot."out/out.UsrMgr.php", "user", "user_management"); ?> check_view_access('GroupMgr')) { ?> - + _httpRoot."out/out.GroupMgr.php", "group", "group_management"); ?> check_view_access('RoleMgr')) { ?> - + _httpRoot."out/out.RoleMgr.php", "bullseye", "role_management"); ?> callHook('endOfRow', 1); ?> callHook('startOfRow', 2); ?> check_view_access('BackupTools')) { ?> - + _httpRoot."out/out.BackupTools.php", "life-saver", "backup_tools"); ?> check_view_access('LogManagement'))) - echo self::rowButton("../out/out.LogManagement.php", "list", "log_management"); + echo self::rowButton($settings->_httpRoot."out/out.LogManagement.php", "list", "log_management"); ?> callHook('endOfRow', 2); ?> callHook('startOfRow', 3); ?> check_view_access('DefaultKeywords')) { ?> - + _httpRoot."out/out.DefaultKeywords.php", "reorder", "global_default_keywords"); ?> check_view_access('Categories')) { ?> - + _httpRoot."out/out.Categories.php", "columns", "global_document_categories"); ?> check_view_access('AttributeMgr')) { ?> - - + _httpRoot."out/out.AttributeMgr.php", "tags", "global_attributedefinitions"); ?> + _httpRoot."out/out.AttributeGroupMgr.php", "tags", "global_attributedefinitiongroups"); ?> callHook('endOfRow', 3); ?> @@ -115,13 +116,13 @@ class SeedDMS_View_AdminTools extends SeedDMS_Theme_Style { callHook('startOfRow', 4); ?> check_view_access('WorkflowMgr')) { ?> - + _httpRoot."out/out.WorkflowMgr.php", "sitemap", "global_workflows"); ?> check_view_access('WorkflowStatesMgr')) { ?> - + _httpRoot."out/out.WorkflowStatesMgr.php", "star", "global_workflow_states"); ?> check_view_access('WorkflowActionsMgr')) { ?> - + _httpRoot."out/out.WorkflowActionsMgr.php", "bolt", "global_workflow_actions"); ?> callHook('endOfRow', 4); ?> @@ -132,13 +133,13 @@ class SeedDMS_View_AdminTools extends SeedDMS_Theme_Style { callHook('startOfRow', 5); ?> check_view_access('Indexer')) { ?> - + _httpRoot."out/out.Indexer.php", "refresh", "update_fulltext_index"); ?> check_view_access('CreateIndex')) { ?> - + _httpRoot."out/out.CreateIndex.php", "search", "create_fulltext_index"); ?> check_view_access('IndexInfo')) { ?> - + _httpRoot."out/out.IndexInfo.php", "info-circle", "fulltext_info"); ?> callHook('endOfRow', 5); ?> @@ -148,32 +149,32 @@ class SeedDMS_View_AdminTools extends SeedDMS_Theme_Style { callHook('startOfRow', 6); ?> check_view_access('Statistic')) { ?> - + _httpRoot."out/out.Statistic.php", "sitemap", "folders_and_documents_statistic"); ?> check_view_access('Charts')) { ?> - + _httpRoot."out/out.Charts.php", "bar-chart", "charts"); ?> check_view_access('ObjectCheck')) { ?> - + _httpRoot."out/out.ObjectCheck.php", "check", "objectcheck"); ?> check_view_access('Timeline')) { ?> - + _httpRoot."out/out.Timeline.php", "signal", "timeline"); ?> callHook('endOfRow', 6); ?> callHook('startOfRow', 7); ?> check_view_access('Settings')) { ?> - + _httpRoot."out/out.Settings.php", "wrench", "settings"); ?> check_view_access('ExtensionMgr')) { ?> - + _httpRoot."out/out.ExtensionMgr.php", "cogs", "extension_manager"); ?> check_view_access('SchedulerTaskMgr')) { ?> - + _httpRoot."out/out.SchedulerTaskMgr.php", "clock-o", "scheduler_task_mgr"); ?> check_view_access('Info')) { ?> - + _httpRoot."out/out.Info.php", "info-circle", "version_info"); ?> callHook('endOfRow', 7); ?> diff --git a/views/bootstrap/class.ApproveDocument.php b/views/bootstrap/class.ApproveDocument.php index 9ac4252db..8fa8d75e2 100644 --- a/views/bootstrap/class.ApproveDocument.php +++ b/views/bootstrap/class.ApproveDocument.php @@ -98,7 +98,7 @@ $(document).ready(function() { $approvaltype = ($approvalStatus['type'] == 0) ? 'ind' : 'grp'; if($approvalStatus["status"]!=0) { - print ""; + print "
"; print ""; print ""; print ""; diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index ce3cac291..ade52821e 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -91,38 +91,38 @@ class SeedDMS_Theme_Style extends SeedDMS_View_Common { echo ''."\n"; $sitename = trim(strip_tags($this->params['sitename'])); if($this->params['session']) - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; if($this->extraheader['css']) echo $this->extraheader['css']; if(method_exists($this, 'css')) echo ''."\n"; - echo ''."\n"; + echo ''."\n"; if($this->extraheader['js']) echo $this->extraheader['js']; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; -// echo ''."\n"; -// echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; +// echo ''."\n"; +// echo ''."\n"; if(!empty($this->extraheader['favicon'])) echo $this->extraheader['favicon']; else { - echo ''."\n"; - echo ''."\n"; + echo ''."\n"; + echo ''."\n"; } if($this->params['session'] && $this->params['session']->getSu()) { ?> @@ -167,19 +167,19 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $this->missingLanguageKeys(); } } - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; foreach(array('de', 'es', 'ar', 'el', 'bg', 'ru', 'hr', 'hu', 'ko', 'pl', 'ro', 'sk', 'tr', 'uk', 'ca', 'nl', 'fi', 'cs', 'it', 'fr', 'sv', 'sl', 'pt-BR', 'zh-CN', 'zh-TW') as $lang) - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; parse_str($_SERVER['QUERY_STRING'], $tmp); $tmp['action'] = 'webrootjs'; if(isset($tmp['formtoken'])) unset($tmp['formtoken']); echo ''."\n"; - echo ''."\n"; + echo ''."\n"; if($this->params['enablemenutasks'] && isset($this->params['user']) && $this->params['user']) { $this->addFooterJS('SeedDMSTask.run();'); } @@ -285,8 +285,8 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo "\n"; @@ -373,16 +373,16 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo " \n"; echo " \n"; echo " \n"; - echo " \n"; + echo " params['settings']->_httpRoot."op/op.Logout.php\">\n"; echo " \n"; echo " \n"; - echo " params['dms']->getRootFolder()->getId()."\">".(!empty($this->extraheader['logo']) ? '' : '').""; - echo " params['dms']->getRootFolder()->getId()."\">".(strlen($this->params['sitename'])>0 ? $this->params['sitename'] : "SeedDMS")."\n"; + echo " params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=".$this->params['dms']->getRootFolder()->getId()."\">".(!empty($this->extraheader['logo']) ? '' : '').""; + echo " params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=".$this->params['dms']->getRootFolder()->getId()."\">".(strlen($this->params['sitename'])>0 ? $this->params['sitename'] : "SeedDMS")."\n"; /* user profile menu {{{ */ if(isset($this->params['session']) && isset($this->params['user']) && $this->params['user']) { /* search form {{{ */ - echo " "; + echo " params['settings']->_httpRoot."out/out.Search.php\" class=\"form-inline navbar-search pull-left\" autocomplete=\"off\">"; if ($folder!=null && is_object($folder) && $folder->isType('folder')) { echo " getID()."\" />"; } @@ -405,11 +405,11 @@ background-image: linear-gradient(to bottom, #882222, #111111);; // if (!$this->params['user']->isGuest()) { $menuitems = array(); if ($accessobject->check_view_access('MyDocuments')) - $menuitems['my_documents'] = array('link'=>"../out/out.MyDocuments.php", 'label'=>'my_documents'); + $menuitems['my_documents'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyDocuments.php", 'label'=>'my_documents'); if ($accessobject->check_view_access('MyAccount')) - $menuitems['my_account'] = array('link'=>"../out/out.MyAccount.php", 'label'=>'my_account'); + $menuitems['my_account'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyAccount.php", 'label'=>'my_account'); if ($accessobject->check_view_access('TransmittalMgr')) - $menuitems['my_transmittals'] = array('link'=>"../out/out.TransmittalMgr.php", 'label'=>'my_transmittals'); + $menuitems['my_transmittals'] = array('link'=>$this->params['settings']->_httpRoot."out/out.TransmittalMgr.php", 'label'=>'my_transmittals'); if($this->hasHook('userMenuItems')) $menuitems = $this->callHook('userMenuItems', $menuitems); if($menuitems) { @@ -431,7 +431,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo "
  • "; else echo "
  • "; - echo ""; + echo "params['settings']->_httpRoot."op/op.SetLanguage.php?lang=".$currLang."&referer=".$_SERVER["REQUEST_URI"]."\">"; echo getMLText($currLang)."
  • \n"; } echo " \n"; @@ -440,21 +440,21 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if(!$this->params['session']->getSu()) { if($this->params['user']->isAdmin()) { $showdivider = true; - echo "
  • ".getMLText("substitute_user")."
  • \n"; + echo "
  • params['settings']->_httpRoot."out/out.SubstituteUser.php\">".getMLText("substitute_user")."
  • \n"; } elseif($substitutes = $this->params['user']->getReverseSubstitutes()) { if(count($substitutes) == 1) { - echo "
  • getID()."&formtoken=".createFormKey('substituteuser')."\">".getMLText("substitute_to_user", array('username'=>$substitutes[0]->getFullName()))."
  • \n"; + echo "
  • params['settings']->_httpRoot."op/op.SubstituteUser.php?userid=".$substitutes[0]->getID()."&formtoken=".createFormKey('substituteuser')."\">".getMLText("substitute_to_user", array('username'=>$substitutes[0]->getFullName()))."
  • \n"; } else { - echo "
  • ".getMLText("substitute_user")."
  • \n"; + echo "
  • params['settings']->_httpRoot."out/out.SubstituteUser.php\">".getMLText("substitute_user")."
  • \n"; } } } if($showdivider) echo "
  • \n"; if($this->params['session']->getSu()) { - echo "
  • ".getMLText("sign_out_user")."
  • \n"; + echo "
  • params['settings']->_httpRoot."op/op.ResetSu.php\">".getMLText("sign_out_user")."
  • \n"; } else { - echo "
  • ".getMLText("sign_out")."
  • \n"; + echo "
  • params['settings']->_httpRoot."op/op.Logout.php\">".getMLText("sign_out")."
  • \n"; } echo " \n"; echo " \n"; @@ -507,11 +507,11 @@ background-image: linear-gradient(to bottom, #882222, #111111);; echo "
      \n"; $menuitems = array(); /* calendar {{{ */ - if ($this->params['enablecalendar'] && $accessobject->check_view_access('Calendar')) $menuitems['calendar'] = array('link'=>'../out/out.Calendar.php?mode='.$this->params['calendardefaultview'], 'label'=>"calendar"); - if ($accessobject->check_view_access('AdminTools')) $menuitems['admintools'] = array('link'=>'../out/out.AdminTools.php', 'label'=>"admin_tools"); + if ($this->params['enablecalendar'] && $accessobject->check_view_access('Calendar')) $menuitems['calendar'] = array('link'=>$this->params['settings']->_httpRoot.'out/out.Calendar.php?mode='.$this->params['calendardefaultview'], 'label'=>"calendar"); + if ($accessobject->check_view_access('AdminTools')) $menuitems['admintools'] = array('link'=>$this->params['settings']->_httpRoot.'out/out.AdminTools.php', 'label'=>"admin_tools"); if($this->params['enablehelp']) { $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); - $menuitems['help'] = array('link'=>'../out/out.Help.php?context='.$tmp[1], 'label'=>"help"); + $menuitems['help'] = array('link'=>$this->params['settings']->_httpRoot.'out/out.Help.php?context='.$tmp[1], 'label'=>"help"); } /* }}} End of calendar */ @@ -546,17 +546,17 @@ background-image: linear-gradient(to bottom, #882222, #111111);; for ($i = 0; $i < count($path); $i++) { $txtpath .= "
    • "; if ($i +1 < count($path)) { - $txtpath .= "getID()."&showtree=".showtree()."\" data-droptarget=\"folder_".$path[$i]->getID()."\" rel=\"folder_".$path[$i]->getID()."\" class=\"table-row-folder droptarget\" data-uploadformtoken=\"".createFormKey('')."\" formtoken=\"".createFormKey('')."\">". + $txtpath .= "params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=".$path[$i]->getID()."&showtree=".showtree()."\" data-droptarget=\"folder_".$path[$i]->getID()."\" rel=\"folder_".$path[$i]->getID()."\" class=\"table-row-folder droptarget\" data-uploadformtoken=\"".createFormKey('')."\" formtoken=\"".createFormKey('')."\">". htmlspecialchars($path[$i]->getName()).""; } else { - $txtpath .= ($tagAll ? "getID()."&showtree=".showtree()."\">". + $txtpath .= ($tagAll ? "params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=".$path[$i]->getID()."&showtree=".showtree()."\">". htmlspecialchars($path[$i]->getName())."" : htmlspecialchars($path[$i]->getName())); } $txtpath .= " /
    • "; } if($document) - $txtpath .= "
    • getId()."\">".htmlspecialchars($document->getName())."
    • "; + $txtpath .= "
    • params['settings']->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getId()."\">".htmlspecialchars($document->getName())."
    • "; return ''; } /* }}} */ @@ -736,46 +736,46 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } $accessMode = $folder->getAccessMode($this->params['user']); $folderID = $folder->getID(); - echo "".getMLText("folder")."\n"; + echo "params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=". $folderID ."&showtree=".showtree()."\" class=\"brand\">".getMLText("folder")."\n"; echo "
      \n"; $menuitems = array(); if ($accessMode == M_READ && !$this->params['user']->isGuest()) { - if ($accessobject->check_view_access('FolderNotify')) - $menuitems['edit_folder_notify'] = array('link'=>"../out/out.FolderNotify.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_notify')); + if ($accessobject->check_controller_access('FolderNotify')) + $menuitems['edit_folder_notify'] = array('link'=>$this->params['settings']->_httpRoot."out/out.FolderNotify.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_notify')); } else if ($accessMode >= M_READWRITE) { - if ($accessobject->check_view_access('AddSubFolder')) - $menuitems['add_subfolder'] = array('link'=>"../out/out.AddSubFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_subfolder')); - if ($accessobject->check_view_access('AddDocument')) - $menuitems['add_document'] = array('link'=>"../out/out.AddDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_document')); + if ($accessobject->check_controller_access('AddSubFolder')) + $menuitems['add_subfolder'] = array('link'=>$this->params['settings']->_httpRoot."out/out.AddSubFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_subfolder')); + if ($accessobject->check_controller_access('AddDocument')) + $menuitems['add_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.AddDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_document')); if(0 && $this->params['enablelargefileupload']) - $menuitems['add_multiple_documents'] = array('link'=>"../out/out.AddMultiDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_multiple_documents')); - if ($accessobject->check_view_access('EditFolder')) { - $menuitems['edit_folder_props'] = array('link'=>"../out/out.EditFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('edit_folder_props')); + $menuitems['add_multiple_documents'] = array('link'=>$this->params['settings']->_httpRoot."out/out.AddMultiDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_multiple_documents')); + if ($accessobject->check_controller_access('EditFolder')) { + $menuitems['edit_folder_props'] = array('link'=>$this->params['settings']->_httpRoot."out/out.EditFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('edit_folder_props')); } - if ($accessobject->check_view_access('MoveFolder')) { + if ($accessobject->check_controller_access('MoveFolder')) { if ($folderID != $this->params['rootfolderid'] && $folder->getParent()) - $menuitems['move_folder'] = array('link'=>"../out/out.MoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('move_folder')); + $menuitems['move_folder'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('move_folder')); } if ($accessMode == M_ALL) { if ($folderID != $this->params['rootfolderid'] && $folder->getParent()) if ($accessobject->check_view_access('RemoveFolder')) - $menuitems['rm_folder'] = array('link'=>"../out/out.RemoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('rm_folder')); + $menuitems['rm_folder'] = array('link'=>$this->params['settings']->_httpRoot."out/out.RemoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('rm_folder')); } if ($accessMode == M_ALL) { if ($accessobject->check_view_access('FolderAccess')) - $menuitems['edit_folder_access'] = array('link'=>"../out/out.FolderAccess.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_access')); + $menuitems['edit_folder_access'] = array('link'=>$this->params['settings']->_httpRoot."out/out.FolderAccess.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_access')); } if ($accessobject->check_view_access('FolderNotify')) - $menuitems['edit_existing_notify'] = array('link'=>"../out/out.FolderNotify.php?folderid=". $folderID ."&showtree=". showtree(), 'label'=>getMLText('edit_existing_notify')); + $menuitems['edit_existing_notify'] = array('link'=>$this->params['settings']->_httpRoot."out/out.FolderNotify.php?folderid=". $folderID ."&showtree=". showtree(), 'label'=>getMLText('edit_existing_notify')); if ($accessMode == M_ALL) { - $menuitems['edit_folder_attrdefgrp'] = array('link'=>"../out/out.FolderAttributeGroup.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>'edit_folder_attrdefgrp'); + $menuitems['edit_folder_attrdefgrp'] = array('link'=>$this->params['settings']->_httpRoot."out/out.FolderAttributeGroup.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>'edit_folder_attrdefgrp'); } } if ($accessobject->check_view_access('Indexer') && $this->params['enablefullsearch']) { - $menuitems['index_folder'] = array('link'=>"../out/out.Indexer.php?folderid=". $folderID."&showtree=".showtree(), 'label'=>getMLText('index_folder')); + $menuitems['index_folder'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Indexer.php?folderid=". $folderID."&showtree=".showtree(), 'label'=>getMLText('index_folder')); } /* Check if hook exists because otherwise callHook() will override $menuitems */ @@ -791,49 +791,58 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $accessobject = $this->params['accessobject']; $accessMode = $document->getAccessMode($this->params['user']); $docid=".php?documentid=" . $document->getID(); - echo "".getMLText("document")."\n"; + echo "params['settings']->_httpRoot."out/out.ViewDocument". $docid ."\" class=\"brand\">".getMLText("document")."\n"; echo "
      \n"; $menuitems = array(); if ($accessMode >= M_READWRITE) { if (!$document->isLocked()) { if($accessobject->check_controller_access('UpdateDocument')) - $menuitems['update_document'] = array('link'=>"../out/out.UpdateDocument".$docid, 'label'=>getMLText('update_document')); + $menuitems['update_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.UpdateDocument".$docid, 'label'=>getMLText('update_document')); if($accessobject->check_controller_access('LockDocument')) - $menuitems['lock_document'] = array('link'=>"../op/op.LockDocument".$docid."&formtoken=".createFormKey('lockdocument'), 'label'=>getMLText('lock_document')); + $menuitems['lock_document'] = array('link'=>$this->params['settings']->_httpRoot."op/op.LockDocument".$docid."&formtoken=".createFormKey('lockdocument'), 'label'=>getMLText('lock_document')); + if($document->isCheckedOut()) + $menuitems['checkin_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.CheckInDocument".$docid, 'label'=>getMLText('checkin_document')); + else { + if($this->params['checkoutdir']) { + $menuitems['checkout_document'] = array('link'=>$this->params['settings']->_httpRoot."op/op.CheckOutDocument".$docid, 'label'=>getMLText('checkout_document')); + } + } if($accessobject->check_controller_access('EditDocument')) - $menuitems['edit_document_props'] = array('link'=>"../out/out.EditDocument".$docid , 'label'=>getMLText('edit_document_props')); - $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); + $menuitems['edit_document_props'] = array('link'=>$this->params['settings']->_httpRoot."out/out.EditDocument".$docid , 'label'=>getMLText('edit_document_props')); + if($accessobject->check_controller_access('MoveDocument')) + $menuitems['move_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); } else { $lockingUser = $document->getLockingUser(); if (($lockingUser->getID() == $this->params['user']->getID()) || ($document->getAccessMode($this->params['user']) == M_ALL)) { if($accessobject->check_controller_access('UpdateDocument')) - $menuitems['update_document'] = array('link'=>"../out/out.UpdateDocument".$docid, 'label'=>getMLText('update_document')); + $menuitems['update_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.UpdateDocument".$docid, 'label'=>getMLText('update_document')); if($accessobject->check_controller_access('UnlockDocument')) - $menuitems['unlock_document'] = array('link'=>"../op/op.UnlockDocument".$docid."&formtoken=".createFormKey('unlockdocument'), 'label'=>getMLText('unlock_document')); + $menuitems['unlock_document'] = array('link'=>$this->params['settings']->_httpRoot."op/op.UnlockDocument".$docid."&formtoken=".createFormKey('unlockdocument'), 'label'=>getMLText('unlock_document')); if($accessobject->check_controller_access('EditDocument')) - $menuitems['edit_document_props'] = array('link'=>"../out/out.EditDocument".$docid, 'label'=>getMLText('edit_document_props')); - $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); + $menuitems['edit_document_props'] = array('link'=>$this->params['settings']->_httpRoot."out/out.EditDocument".$docid, 'label'=>getMLText('edit_document_props')); + if($accessobject->check_controller_access('MoveDocument')) + $menuitems['move_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); } } if($accessobject->maySetExpires($document)) { if ($accessobject->check_view_access('SetExpires')) - $menuitems['expires'] = array('link'=>"../out/out.SetExpires".$docid, 'label'=>getMLText('expires')); + $menuitems['expires'] = array('link'=>$this->params['settings']->_httpRoot."out/out.SetExpires".$docid, 'label'=>getMLText('expires')); } } if ($accessMode == M_ALL) { if ($accessobject->check_view_access('RemoveDocument')) - $menuitems['rm_document'] = array('link'=>"../out/out.RemoveDocument".$docid, 'label'=>getMLText('rm_document')); + $menuitems['rm_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.RemoveDocument".$docid, 'label'=>getMLText('rm_document')); if ($accessobject->check_view_access('DocumentAccess')) - $menuitems['edit_document_access'] = array('link'=>"../out/out.DocumentAccess". $docid, 'label'=>getMLText('edit_document_access')); + $menuitems['edit_document_access'] = array('link'=>$this->params['settings']->_httpRoot."out/out.DocumentAccess". $docid, 'label'=>getMLText('edit_document_access')); } - if ($accessMode >= M_READ) { + if ($accessMode >= M_READ && !$this->params['user']->isGuest()) { if ($accessobject->check_view_access('DocumentNotify')) - $menuitems['edit_existing_notify'] = array('link'=>"../out/out.DocumentNotify". $docid, 'label'=>getMLText('edit_existing_notify')); + $menuitems['edit_existing_notify'] = array('link'=>$this->params['settings']->_httpRoot."out/out.DocumentNotify". $docid, 'label'=>getMLText('edit_existing_notify')); } if ($accessobject->check_view_access('TransferDocument')) { - $menuitems['transfer_document'] = array('link'=>"../out/out.TransferDocument". $docid, 'label'=>getMLText('transfer_document')); + $menuitems['transfer_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.TransferDocument". $docid, 'label'=>getMLText('transfer_document')); } /* Check if hook exists because otherwise callHook() will override $menuitems */ @@ -859,17 +868,18 @@ background-image: linear-gradient(to bottom, #882222, #111111);; private function accountNavigationBar() { /* {{{ */ $accessobject = $this->params['accessobject']; - echo "".getMLText("my_account")."\n"; + echo "params['settings']->_httpRoot."out/out.MyAccount.php\" class=\"brand\">".getMLText("my_account")."\n"; echo "
      \n"; $menuitems = array(); if ($accessobject->check_view_access('EditUserData') || !$this->params['disableselfedit']) - $menuitems['edit_user_details'] = array('link'=>"../out/out.EditUserData.php", 'label'=>getMLText('edit_user_details')); + $menuitems['edit_user_details'] = array('link'=>$this->params['settings']->_httpRoot."out/out.EditUserData.php", 'label'=>getMLText('edit_user_details')); if (!$this->params['user']->isAdmin()) - $menuitems['edit_default_keywords'] = array('link'=>"../out/out.UserDefaultKeywords.php", 'label'=>getMLText('edit_default_keywords')); + $menuitems['edit_default_keywords'] = array('link'=>$this->params['settings']->_httpRoot."out/out.UserDefaultKeywords.php", 'label'=>getMLText('edit_default_keywords')); - $menuitems['edit_notify'] = array('link'=>"../out/out.ManageNotify.php", 'label'=>getMLText('edit_existing_notify')); + if ($accessobject->check_view_access('ManageNotify')) + $menuitems['edit_notify'] = array('link'=>$this->params['settings']->_httpRoot."out/out.ManageNotify.php", 'label'=>getMLText('edit_existing_notify')); $menuitems['2_factor_auth'] = array('link'=>"../out/out.Setup2Factor.php", 'label'=>'2_factor_auth'); @@ -877,9 +887,9 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if ($this->params['enableusersview']){ if ($accessobject->check_view_access('UsrView')) - $menuitems['users'] = array('link'=>"../out/out.UsrView.php", 'label'=>getMLText('users')); + $menuitems['users'] = array('link'=>$this->params['settings']->_httpRoot."out/out.UsrView.php", 'label'=>getMLText('users')); if ($accessobject->check_view_access('GroupView')) - $menuitems['groups'] = array('link'=>"../out/out.GroupView.php", 'label'=>getMLText('groups')); + $menuitems['groups'] = array('link'=>$this->params['settings']->_httpRoot."out/out.GroupView.php", 'label'=>getMLText('groups')); } /* Check if hook exists because otherwise callHook() will override $menuitems */ @@ -894,20 +904,22 @@ background-image: linear-gradient(to bottom, #882222, #111111);; private function myDocumentsNavigationBar() { /* {{{ */ $accessobject = $this->params['accessobject']; - echo "".getMLText("my_documents")."\n"; + echo "params['settings']->_httpRoot."out/out.MyDocuments.php\" class=\"brand\">".getMLText("my_documents")."\n"; echo "
      \n"; $menuitems = array(); - $menuitems['inprocess'] = array('link'=>"../out/out.MyDocuments.php?inProcess=1", 'label'=>getMLText('documents_in_process')); - $menuitems['all_documents'] = array('link'=>"../out/out.MyDocuments.php", 'label'=>getMLText('all_documents')); + if ($accessobject->check_view_access('MyDocuments')) { + $menuitems['inprocess'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyDocuments.php?inProcess=1", 'label'=>getMLText('documents_in_process')); + $menuitems['all_documents'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyDocuments.php", 'label'=>getMLText('all_documents')); + } if($this->params['workflowmode'] == 'traditional' || $this->params['workflowmode'] == 'traditional_only_approval') { if ($accessobject->check_view_access('ReviewSummary')) - $menuitems['review_summary'] = array('link'=>"../out/out.ReviewSummary.php", 'label'=>getMLText('review_summary')); + $menuitems['review_summary'] = array('link'=>$this->params['settings']->_httpRoot."out/out.ReviewSummary.php", 'label'=>getMLText('review_summary')); if ($accessobject->check_view_access('ApprovalSummary')) - $menuitems['approval_summary'] = array('link'=>"../out/out.ApprovalSummary.php", 'label'=>getMLText('approval_summary')); + $menuitems['approval_summary'] = array('link'=>$this->params['settings']->_httpRoot."out/out.ApprovalSummary.php", 'label'=>getMLText('approval_summary')); } else { if ($accessobject->check_view_access('WorkflowSummary')) - $menuitems['workflow_summary'] = array('link'=>"../out/out.WorkflowSummary.php", 'label'=>getMLText('workflow_summary')); + $menuitems['workflow_summary'] = array('link'=>$this->params['settings']->_httpRoot."out/out.WorkflowSummary.php", 'label'=>getMLText('workflow_summary')); } if ($accessobject->check_view_access('ReceiptSummary')) $menuitems['receipt_summary'] = array('link'=>"../out/out.ReceiptSummary.php", 'label'=>getMLText('receipt_summary')); @@ -926,41 +938,41 @@ background-image: linear-gradient(to bottom, #882222, #111111);; private function adminToolsNavigationBar() { /* {{{ */ $accessobject = $this->params['accessobject']; $settings = $this->params['settings']; - echo " ".getMLText("admin_tools")."\n"; + echo " params['settings']->_httpRoot."out/out.AdminTools.php\" class=\"brand\">".getMLText("admin_tools")."\n"; echo "
      \n"; $menuitems = array(); if($accessobject->check_view_access(array('UsrMgr', 'RoleMgr', 'GroupMgr', 'UserList', 'Acl'))) { $menuitems['user_group_management'] = array('link'=>"#", 'label'=>getMLText('user_group_management')); if ($accessobject->check_view_access('UsrMgr')) - $menuitems['user_group_management']['children']['user_management'] = array('link'=>"../out/out.UsrMgr.php", 'label'=>getMLText('user_management')); + $menuitems['user_group_management']['children']['user_management'] = array('link'=>$this->params['settings']->_httpRoot."out/out.UsrMgr.php", 'label'=>getMLText('user_management')); if ($accessobject->check_view_access('RoleMgr')) - $menuitems['user_group_management']['children']['role_management'] = array('link'=>"../out/out.RoleMgr.php", 'label'=>getMLText('role_management')); + $menuitems['user_group_management']['children']['role_management'] = array('link'=>$this->params['settings']->_httpRoot."out/out.RoleMgr.php", 'label'=>getMLText('role_management')); if ($accessobject->check_view_access('GroupMgr')) - $menuitems['user_group_management']['children']['group_management'] = array('link'=>"../out/out.GroupMgr.php", 'label'=>getMLText('group_management')); + $menuitems['user_group_management']['children']['group_management'] = array('link'=>$this->params['settings']->_httpRoot."out/out.GroupMgr.php", 'label'=>getMLText('group_management')); if ($accessobject->check_view_access('UserList')) - $menuitems['user_group_management']['children']['user_list'] = array('link'=>"../out/out.UserList.php", 'label'=>getMLText('user_list')); + $menuitems['user_group_management']['children']['user_list'] = array('link'=>$this->params['settings']->_httpRoot."out/out.UserList.php", 'label'=>getMLText('user_list')); if ($accessobject->check_view_access('Acl')) - $menuitems['user_group_management']['children']['access_control'] = array('link'=>"../out/out.Acl.php", 'label'=>getMLText('access_control')); + $menuitems['user_group_management']['children']['access_control'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Acl.php", 'label'=>getMLText('access_control')); } if($accessobject->check_view_access(array('DefaultKeywords', 'Categories', 'AttributeMgr', 'WorkflowMgr', 'WorkflowStatesMgr', 'WorkflowActionsMgr'))) { $menuitems['definitions'] = array('link'=>"#", 'label'=>getMLText('definitions')); if ($accessobject->check_view_access('DefaultKeywords')) - $menuitems['definitions']['children']['default_keywords'] = array('link'=>"../out/out.DefaultKeywords.php", 'label'=>getMLText('global_default_keywords')); + $menuitems['definitions']['children']['default_keywords'] = array('link'=>$this->params['settings']->_httpRoot."out/out.DefaultKeywords.php", 'label'=>getMLText('global_default_keywords')); if ($accessobject->check_view_access('Categories')) - $menuitems['definitions']['children']['document_categories'] = array('link'=>"../out/out.Categories.php", 'label'=>getMLText('global_document_categories')); + $menuitems['definitions']['children']['document_categories'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Categories.php", 'label'=>getMLText('global_document_categories')); if ($accessobject->check_view_access('AttributeMgr')) - $menuitems['definitions']['children']['attribute_definitions'] = array('link'=>"../out/out.AttributeMgr.php", 'label'=>getMLText('global_attributedefinitions')); + $menuitems['definitions']['children']['attribute_definitions'] = array('link'=>$this->params['settings']->_httpRoot."out/out.AttributeMgr.php", 'label'=>getMLText('global_attributedefinitions')); if ($accessobject->check_view_access('AttributeGroupMgr')) - $menuitems['definitions']['children']['attribute_definitiongroupss'] = array('link'=>"../out/out.AttributeGroupMgr.php", 'label'=>getMLText('global_attributedefinitiongroups')); + $menuitems['definitions']['children']['attribute_definitiongroupss'] = array('link'=>$this->params['settings']->_httpRoot."out/out.AttributeGroupMgr.php", 'label'=>getMLText('global_attributedefinitiongroups')); if($this->params['workflowmode'] == 'advanced') { if ($accessobject->check_view_access('WorkflowMgr')) - $menuitems['definitions']['children']['workflows'] = array('link'=>"../out/out.WorkflowMgr.php", 'label'=>getMLText('global_workflows')); + $menuitems['definitions']['children']['workflows'] = array('link'=>$this->params['settings']->_httpRoot."out/out.WorkflowMgr.php", 'label'=>getMLText('global_workflows')); if ($accessobject->check_view_access('WorkflowStatesMgr')) - $menuitems['definitions']['children']['workflow_states'] = array('link'=>"../out/out.WorkflowStatesMgr.php", 'label'=>getMLText('global_workflow_states')); + $menuitems['definitions']['children']['workflow_states'] = array('link'=>$this->params['settings']->_httpRoot."out/out.WorkflowStatesMgr.php", 'label'=>getMLText('global_workflow_states')); if ($accessobject->check_view_access('WorkflowActionsMgr')) - $menuitems['definitions']['children']['workflow_actions'] = array('link'=>"../out/out.WorkflowActionsMgr.php", 'label'=>getMLText('global_workflow_actions')); + $menuitems['definitions']['children']['workflow_actions'] = array('link'=>$this->params['settings']->_httpRoot."out/out.WorkflowActionsMgr.php", 'label'=>getMLText('global_workflow_actions')); } } @@ -968,47 +980,47 @@ background-image: linear-gradient(to bottom, #882222, #111111);; if($accessobject->check_view_access(array('Indexer', 'CreateIndex', 'IndexInfo'))) { $menuitems['fulltext'] = array('link'=>"#", 'label'=>getMLText('fullsearch')); if ($accessobject->check_view_access('Indexer')) - $menuitems['fulltext']['children']['update_fulltext_index'] = array('link'=>"../out/out.Indexer.php", 'label'=>getMLText('update_fulltext_index')); + $menuitems['fulltext']['children']['update_fulltext_index'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Indexer.php", 'label'=>getMLText('update_fulltext_index')); if ($accessobject->check_view_access('CreateIndex')) - $menuitems['fulltext']['children']['create_fulltext_index'] = array('link'=>"../out/out.CreateIndex.php", 'label'=>getMLText('create_fulltext_index')); + $menuitems['fulltext']['children']['create_fulltext_index'] = array('link'=>$this->params['settings']->_httpRoot."out/out.CreateIndex.php", 'label'=>getMLText('create_fulltext_index')); if ($accessobject->check_view_access('IndexInfo')) - $menuitems['fulltext']['children']['fulltext_info'] = array('link'=>"../out/out.IndexInfo.php", 'label'=>getMLText('fulltext_info')); + $menuitems['fulltext']['children']['fulltext_info'] = array('link'=>$this->params['settings']->_httpRoot."out/out.IndexInfo.php", 'label'=>getMLText('fulltext_info')); } } if($accessobject->check_view_access(array('BackupTools', 'LogManagement'))) { $menuitems['backup_log_management'] = array('link'=>"#", 'label'=>getMLText('backup_log_management')); if ($accessobject->check_view_access('BackupTools')) - $menuitems['backup_log_management']['children'][] = array('link'=>"../out/out.BackupTools.php", 'label'=>getMLText('backup_tools')); + $menuitems['backup_log_management']['children'][] = array('link'=>$this->params['settings']->_httpRoot."out/out.BackupTools.php", 'label'=>getMLText('backup_tools')); if ($this->params['logfileenable']) if ($accessobject->check_view_access('LogManagement')) - $menuitems['backup_log_management']['children'][] = array('link'=>"../out/out.LogManagement.php", 'label'=>getMLText('log_management')); + $menuitems['backup_log_management']['children'][] = array('link'=>$this->params['settings']->_httpRoot."out/out.LogManagement.php", 'label'=>getMLText('log_management')); } if($accessobject->check_view_access(array('ImportFS', 'ImportUsers', 'Statistic', 'Charts', 'Timeline', 'ObjectCheck', 'ExtensionMgr', 'Info'))) { $menuitems['misc'] = array('link'=>"#", 'label'=>getMLText('misc')); if ($accessobject->check_view_access('ImportFS')) - $menuitems['misc']['children']['import_fs'] = array('link'=>"../out/out.ImportFS.php", 'label'=>getMLText('import_fs')); + $menuitems['misc']['children']['import_fs'] = array('link'=>$this->params['settings']->_httpRoot."out/out.ImportFS.php", 'label'=>getMLText('import_fs')); if ($accessobject->check_view_access('ImportUsers')) - $menuitems['misc']['children']['import_users'] = array('link'=>"../out/out.ImportUsers.php", 'label'=>getMLText('import_users')); + $menuitems['misc']['children']['import_users'] = array('link'=>$this->params['settings']->_httpRoot."out/out.ImportUsers.php", 'label'=>getMLText('import_users')); if ($accessobject->check_view_access('Statistic')) - $menuitems['misc']['children']['folders_and_documents_statistic'] = array('link'=>"../out/out.Statistic.php", 'label'=>getMLText('folders_and_documents_statistic')); + $menuitems['misc']['children']['folders_and_documents_statistic'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Statistic.php", 'label'=>getMLText('folders_and_documents_statistic')); if ($accessobject->check_view_access('Charts')) - $menuitems['misc']['children']['charts'] = array('link'=>"../out/out.Charts.php", 'label'=>getMLText('charts')); + $menuitems['misc']['children']['charts'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Charts.php", 'label'=>getMLText('charts')); if ($accessobject->check_view_access('Timeline')) - $menuitems['misc']['children']['timeline'] = array('link'=>"../out/out.Timeline.php", 'label'=>getMLText('timeline')); + $menuitems['misc']['children']['timeline'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Timeline.php", 'label'=>getMLText('timeline')); if ($accessobject->check_view_access('SchedulerTaskMgr')) - $menuitems['misc']['children']['schedulertaskmgr'] = array('link'=>"../out/out.SchedulerTaskMgr.php", 'label'=>getMLText('scheduler_task_mgr')); + $menuitems['misc']['children']['schedulertaskmgr'] = array('link'=>$this->params['settings']->_httpRoot."out/out.SchedulerTaskMgr.php", 'label'=>getMLText('scheduler_task_mgr')); if ($accessobject->check_view_access('ObjectCheck')) - $menuitems['misc']['children']['objectcheck'] = array('link'=>"../out/out.ObjectCheck.php", 'label'=>getMLText('objectcheck')); + $menuitems['misc']['children']['objectcheck'] = array('link'=>$this->params['settings']->_httpRoot."out/out.ObjectCheck.php", 'label'=>getMLText('objectcheck')); if ($accessobject->check_view_access('ExpiredDocuments')) - $menuitems['misc']['children']['documents_expired'] = array('link'=>"../out/out.ExpiredDocuments.php", 'label'=>getMLText('documents_expired')); + $menuitems['misc']['children']['documents_expired'] = array('link'=>$this->params['settings']->_httpRoot."out/out.ExpiredDocuments.php", 'label'=>getMLText('documents_expired')); if ($accessobject->check_view_access('ExtensionMgr')) - $menuitems['misc']['children']['extension_manager'] = array('link'=>"../out/out.ExtensionMgr.php", 'label'=>getMLText('extension_manager')); + $menuitems['misc']['children']['extension_manager'] = array('link'=>$this->params['settings']->_httpRoot."out/out.ExtensionMgr.php", 'label'=>getMLText('extension_manager')); if ($accessobject->check_view_access('ClearCache')) - $menuitems['misc']['children']['clear_cache'] = array('link'=>"../out/out.ClearCache.php", 'label'=>getMLText('clear_cache')); + $menuitems['misc']['children']['clear_cache'] = array('link'=>$this->params['settings']->_httpRoot."out/out.ClearCache.php", 'label'=>getMLText('clear_cache')); if ($accessobject->check_view_access('Info')) - $menuitems['misc']['children']['version_info'] = array('link'=>"../out/out.Info.php", 'label'=>getMLText('version_info')); + $menuitems['misc']['children']['version_info'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Info.php", 'label'=>getMLText('version_info')); } if ($settings->_enableDebugMode) { @@ -1029,15 +1041,15 @@ background-image: linear-gradient(to bottom, #882222, #111111);; private function calendarOldNavigationBar($d){ /* {{{ */ $accessobject = $this->params['accessobject']; $ds="&day=".$d[0]."&month=".$d[1]."&year=".$d[2]; - echo "".getMLText("calendar")."\n"; + echo "params['settings']->_httpRoot."out/out.CalendarOld.php?mode=y\" class=\"brand\">".getMLText("calendar")."\n"; echo "\n"; return; @@ -1046,12 +1058,12 @@ background-image: linear-gradient(to bottom, #882222, #111111);; private function calendarNavigationBar($d){ /* {{{ */ $accessobject = $this->params['accessobject']; - echo "".getMLText("calendar")."\n"; + echo "params['settings']->_httpRoot."out/out.Calendar.php\" class=\"brand\">".getMLText("calendar")."\n"; echo "
      \n"; $menuitems = array(); if($accessobject->check_view_access(array('AddEvent'))) - $menuitems['addevent'] = array('link'=>"../out/out.AddEvent.php", 'label'=>getMLText('add_event')); + $menuitems['addevent'] = array('link'=>$this->params['settings']->_httpRoot."out/out.AddEvent.php", 'label'=>getMLText('add_event')); /* Check if hook exists because otherwise callHook() will override $menuitems */ if($this->hasHook('calendarNavigationBar')) @@ -1492,7 +1504,7 @@ $(document).ready(function() {
      - + '.getMLText("browse").'… @@ -1610,7 +1622,8 @@ $(document).ready(function() { $content .= $this->getModalBoxLink( array( 'target' => 'docChooser'.$formid, - 'remote' => "../out/out.DocumentChooser.php?form=".$formid."&folderid=".$folderid."&partialtree=".$partialtree, + 'remote' => $this->params['settings']->_httpRoot."out/out.DocumentChooser.php?form=".$formid."&folderid=".$folderid."&partialtree=".$partialtree, + 'class' => 'btn btn-secondary', 'title' => getMLText('document').'…' )); $content .= "
      \n"; @@ -1674,7 +1687,8 @@ function folderSelected(id, name) { $content .= $this->getModalBoxLink( array( 'target' => 'folderChooser'.$formid, - 'remote' => "../out/out.FolderChooser.php?form=".$formid."&mode=".$accessMode."&exclude=".$exclude, + 'remote' => $this->params['settings']->_httpRoot."out/out.FolderChooser.php?form=".$formid."&mode=".$accessMode."&exclude=".$exclude, + 'class' => 'btn btn-secondary', 'title' => getMLText('folder').'…' )); } @@ -1746,7 +1760,8 @@ $(document).ready(function() { $content .= $this->getModalBoxLink( array( 'target' => 'keywordChooser', - 'remote' => "../out/out.KeywordChooser.php?target=".$formName, + 'remote' => $this->params['settings']->_httpRoot."out/out.KeywordChooser.php?target=".$formName, + 'class' => 'btn btn-secondary', 'title' => getMLText('keywords').'…' )); $content .= ' @@ -1819,7 +1834,7 @@ $(document).ready(function() { $tmp = array(); foreach($attrs as $attr) { if($targetfolder = $dms->getFolder(intval($attr))) - $tmp[] = ''.htmlspecialchars($targetfolder->getName()).''; + $tmp[] = ''.htmlspecialchars($targetfolder->getName()).''; } return implode('
      ', $tmp); break; @@ -1828,7 +1843,7 @@ $(document).ready(function() { $tmp = array(); foreach($attrs as $attr) { if($targetdoc = $dms->getDocument(intval($attr))) - $tmp[] = ''.htmlspecialchars($targetdoc->getName()).''; + $tmp[] = ''.htmlspecialchars($targetdoc->getName()).''; } return implode('
      ', $tmp); break; @@ -1992,12 +2007,13 @@ $(document).ready(function() { function getDropFolderChooserHtml($formName, $dropfolderfile="", $showfolders=0) { /* {{{ */ $content = "
      \n"; - $content .= ""; + $content .= ""; $content .= ""; $content .= $this->getModalBoxLink( array( 'target' => 'dropfolderChooser', - 'remote' => "../out/out.DropFolderChooser.php?form=".$formName."&dropfolderfile=".urlencode($dropfolderfile)."&showfolders=".$showfolders, + 'remote' => $this->params['settings']->_httpRoot."out/out.DropFolderChooser.php?form=".$formName."&dropfolderfile=".urlencode($dropfolderfile)."&showfolders=".$showfolders, + 'class' => 'btn btn-secondary', 'title' => ($showfolders ? getMLText("choose_target_folder"): getMLText("choose_target_file")).'…' )); $content .= "
      \n"; @@ -2384,19 +2400,19 @@ $(function() { */ function __printTreeNavigation($folderid, $showtree){ /* {{{ */ if ($showtree==1){ - $this->contentHeading("", true); + $this->contentHeading("params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=". $folderid."&showtree=0\">", true); $this->contentContainerStart(); ?> printNewTreeNavigation($folderid, M_READ, 0, ''); $this->contentContainerEnd(); } else { - $this->contentHeading("", true); + $this->contentHeading("params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=". $folderid."&showtree=1\">", true); } } /* }}} */ @@ -2475,7 +2491,7 @@ $(function() { \"label\" : \" ".getMLText("rm_document")."\", \"class\" : \"btn-danger\", \"callback\": function() { - $.get('../op/op.Ajax.php', + $.get('".$this->params['settings']->_httpRoot."op/op.Ajax.php', { command: 'deletedocument', id: id, formtoken: formtoken }, function(data) { if(data.success) { @@ -2549,7 +2565,7 @@ $(function() { \"label\" : \" ".getMLText("rm_folder")."\", \"class\" : \"btn-danger\", \"callback\": function() { - $.get('../op/op.Ajax.php', + $.get('".$this->params['settings']->_httpRoot."op/op.Ajax.php', { command: 'deletefolder', id: id, formtoken: formtoken }, function(data) { if(data.success) { @@ -2616,9 +2632,9 @@ $(function() { $content = ''; $objid = $object->getId(); if($object->isType('document')) { - $content .= ''; + $content .= ''; } elseif($object->isType('folder')) { - $content .= ''; + $content .= ''; } if($return) return $content; @@ -2830,7 +2846,7 @@ $(document).ready( function() { \"label\" : \" ".getMLText("rm_attr_value")."\", \"class\" : \"btn-danger\", \"callback\": function() { - $.post('../op/op.AttributeMgr.php', + $.post('".$this->params['settings']->_httpRoot."op/op.AttributeMgr.php', { action: 'removeattrvalue', attrdefid: id, attrvalue: attrvalue, formtoken: formtoken }, function(data) { if(data.success) { @@ -2878,7 +2894,7 @@ $('body').on('click', '[id^=\"table-row-document\"] td:nth-child(2)', function(e $(ev.currentTarget).parent().toggleClass('selected'); } else { attr_id = $(ev.currentTarget).parent().attr('id').split('-')[3]; - window.location = '../out/out.ViewDocument.php?documentid=' + attr_id; + window.location = 'params['settings']->_httpRoot ?>out/out.ViewDocument.php?documentid=' + attr_id; } }); params['settings']->_httpRoot ?>out/out.ViewFolder.php?folderid=' + attr_id; } }); "; if (file_exists($dms->contentDir . $latestContent->getPath())) { if($accessop->check_controller_access('Download', array('action'=>'version'))) - $content .= ""; + $content .= "params['settings']->_httpRoot."op/op.Download.php?documentid=".$docID."&version=".$version."\">"; if($previewer->hasPreview($latestContent)) { - $content .= "getID()."&version=".$latestContent->getVersion()."&width=".$previewwidth."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; + $content .= "params['settings']->_httpRoot."op/op.Preview.php?documentid=".$document->getID()."&version=".$latestContent->getVersion()."&width=".$previewwidth."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; } else { $content .= "getMimeIcon($latestContent->getFileType())."\" ".($previewwidth ? "width=\"".$previewwidth."\"" : "")."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; } @@ -3037,7 +3053,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) if($onepage) $content .= "".htmlspecialchars($document->getName()) . ""; else - $content .= "" . htmlspecialchars($document->getName()) . ""; + $content .= "params['settings']->_httpRoot."out/out.ViewDocument.php?documentid=".$docID."&showtree=".$showtree."\">" . htmlspecialchars($document->getName()) . ""; if(isset($extracontent['below_title'])) $content .= $extracontent['below_title']; $content .= "
      "; @@ -3142,7 +3158,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) } } if($document->getAccessMode($user) >= M_READWRITE) { - $content .= ''; + $content .= ''; } else { $content .= ''; } @@ -3156,7 +3172,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $content .= ''; } if($onepage) - $content .= ''; + $content .= ''; if(!empty($extracontent['end_action_list'])) $content .= $extracontent['end_action_list']; $content .= "
      "; @@ -3225,11 +3241,11 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $content = ''; if(!$skipcont) $content .= $this->folderListRowStart($subFolder); - $content .= "
    \n"; + $content .= "\n"; if($onepage) $content .= "\n"; $content .= "\n"; $content .= ""; } diff --git a/views/bootstrap/class.DropFolderChooser.php b/views/bootstrap/class.DropFolderChooser.php index 4d0209315..6550a144d 100644 --- a/views/bootstrap/class.DropFolderChooser.php +++ b/views/bootstrap/class.DropFolderChooser.php @@ -1,6 +1,6 @@ params['dms']; $user = $this->params['user']; + $settings = $this->params['settings']; $dropfolderdir = $this->params['dropfolderdir']; $showfolders = $this->params['showfolders']; $cachedir = $this->params['cachedir']; @@ -82,13 +83,13 @@ $('.folderselect').click(function(ev) { $c++; $subitem = array('label'=>'', 'attributes'=>array(array('title', getMLText('menu_upload_from_dropfolder')))); if($folder) - $subitem['link'] = '../out/out.AddDocument.php?folderid='.$folder->getId()."&dropfolderfileform1=".urldecode($entry); + $subitem['link'] = $settings->_httpRoot.'out/out.AddDocument.php?folderid='.$folder->getId()."&dropfolderfileform1=".urldecode($entry); $mimetype = finfo_file($finfo, $dir.'/'.$entry); if(file_exists($dir.'/'.$entry)) { if($previewwidth) { $previewer->createRawPreview($dir.'/'.$entry, 'dropfolder/', $mimetype); if($previewer->hasRawPreview($dir.'/'.$entry, 'dropfolder/')) { - $subitem['label'] .= "
    "; + $subitem['label'] .= "
    _httpRoot."op/op.DropFolderPreview.php?filename=".$entry."&width=".$previewwidth."\" title=\"".htmlspecialchars($mimetype)."\">
    "; } } $subitem['label'] .= "
    ".$entry."
    ".SeedDMS_Core_File::format_filesize(filesize($dir.'/'.$entry)).", ".date('Y-m-d H:i:s', filectime($dir.'/'.$entry))."
    "; @@ -157,7 +158,7 @@ $('.folderselect').click(function(ev) { echo "
    ".getMLText("status")."".getMLText("comment")."".getMLText("last_update")."
    getID()."&showtree=".$showtree."\">getMimeIcon(".folder")."\" width=\"24\" height=\"24\" border=0>params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=".$subFolder->getID()."&showtree=".$showtree."\">getMimeIcon(".folder")."\" width=\"24\" height=\"24\" border=0>" . "getId()."\">".htmlspecialchars($subFolder->getName()).""; else - $content .= "getID()."&showtree=".$showtree."\">" . htmlspecialchars($subFolder->getName()) . ""; + $content .= "params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=".$subFolder->getID()."&showtree=".$showtree."\">" . htmlspecialchars($subFolder->getName()) . ""; if(isset($extracontent['below_title'])) $content .= $extracontent['below_title']; $content .= "
    ".getMLText('owner').": ".htmlspecialchars($owner->getFullName()).", ".getMLText('creation_date').": ".date('Y-m-d', $subFolder->getDate()).""; @@ -3309,7 +3325,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) } if ($accessop->check_view_access('EditFolder')) { if($subFolderAccessMode >= M_READWRITE) { - $content .= ''; + $content .= ''; } else { $content .= ''; } @@ -3321,7 +3337,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $content .= ''; } if($onepage) - $content .= ''; + $content .= ''; if(!empty($extracontent['end_action_list'])) $content .= $extracontent['end_action_list']; $content .= ""; @@ -3593,14 +3609,14 @@ $(document).ready(function() { if($accessop->check_controller_access('Download', array('action'=>'review'))) if($rec['file']) { echo "
    "; - echo "getID()."&reviewlogid=".$rec['reviewLogID']."\" class=\"btn btn-mini\"> ".getMLText('download').""; + echo "params['settings']->_httpRoot."op/op.Download.php?documentid=".$document->getID()."&reviewlogid=".$rec['reviewLogID']."\" class=\"btn btn-mini\"> ".getMLText('download').""; } break; case "approval": if($accessop->check_controller_access('Download', array('action'=>'approval'))) if($rec['file']) { echo "
    "; - echo "getID()."&approvelogid=".$rec['approveLogID']."\" class=\"btn btn-mini\"> ".getMLText('download').""; + echo "params['settings']->_httpRoot."op/op.Download.php?documentid=".$document->getID()."&approvelogid=".$rec['approveLogID']."\" class=\"btn btn-mini\"> ".getMLText('download').""; } break; } diff --git a/views/bootstrap/class.Charts.php b/views/bootstrap/class.Charts.php index e7f5ee535..e701bd03c 100644 --- a/views/bootstrap/class.Charts.php +++ b/views/bootstrap/class.Charts.php @@ -208,7 +208,7 @@ $(document).ready( function() { $this->columnStart(3); $this->contentHeading(getMLText("chart_selection")); $this->contentContainerStart(); - foreach(array('docsperuser', 'sizeperuser', 'docspermimetype', 'docspercategory', 'docsperstatus', 'docspermonth', 'docsaccumulated') as $atype) { + foreach(array('docsperuser', 'foldersperuser', 'sizeperuser', 'docspermimetype', 'docspercategory', 'docsperstatus', 'docspermonth', 'docsaccumulated') as $atype) { echo "\n"; } $this->contentContainerEnd(); @@ -235,6 +235,7 @@ $(document).ready( function() { switch($type) { case 'docspermonth': case 'docsperuser': + case 'foldersperuser': case 'docspermimetype': case 'docspercategory': case 'docsperstatus': diff --git a/views/bootstrap/class.Clipboard.php b/views/bootstrap/class.Clipboard.php index 063a34808..b30563881 100644 --- a/views/bootstrap/class.Clipboard.php +++ b/views/bootstrap/class.Clipboard.php @@ -61,24 +61,24 @@ class SeedDMS_View_Clipboard extends SeedDMS_Theme_Style { $subitems = []; foreach($clipboard['folders'] as $folderid) { if($folder = $this->params['dms']->getFolder($folderid)) { - $content .= "
  • getID()."\" class=\"table-row-folder droptarget\" data-droptarget=\"folder_".$folder->getID()."\" rel=\"folder_".$folder->getID()."\" data-name=\"".htmlspecialchars($folder->getName(), ENT_QUOTES)."\" data-uploadformtoken=\"".createFormKey('')."\" formtoken=\"".createFormKey('')."\"> ".htmlspecialchars($folder->getName())."
  • \n"; - $subitems[] = array('label'=>' '.$folder->getName(), 'link'=>"../out/out.ViewFolder.php?folderid=".$folder->getID(), 'class'=>"table-row-folder droptarget", 'rel'=>"folder_".$folder->getID(), 'attributes'=>array(array('data-droptarget', "folder_".$folder->getID()), array('data-name', htmlspecialchars($folder->getName(), ENT_QUOTES)))); + $content .= "
  • params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID()."\" class=\"table-row-folder droptarget\" data-droptarget=\"folder_".$folder->getID()."\" rel=\"folder_".$folder->getID()."\" data-name=\"".htmlspecialchars($folder->getName(), ENT_QUOTES)."\" data-uploadformtoken=\"".createFormKey('')."\" formtoken=\"".createFormKey('')."\"> ".htmlspecialchars($folder->getName())."
  • \n"; + $subitems[] = array('label'=>' '.$folder->getName(), 'link'=>$this->params['settings']->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID(), 'class'=>"table-row-folder droptarget", 'rel'=>"folder_".$folder->getID(), 'attributes'=>array(array('data-droptarget', "folder_".$folder->getID()), array('data-name', htmlspecialchars($folder->getName(), ENT_QUOTES)))); } } foreach($clipboard['docs'] as $docid) { if($document = $this->params['dms']->getDocument($docid)) - $content .= "
  • getID()."\" class=\"table-row-document droptarget\" data-droptarget=\"document_".$document->getID()."\" rel=\"document_".$document->getID()."\" data-name=\"".htmlspecialchars($document->getName(), ENT_QUOTES)."\" formtoken=\"".createFormKey('')."\"> ".htmlspecialchars($document->getName())."
  • \n"; - $subitems[] = array('label'=>' '.$document->getName(), 'link'=>"../out/out.ViewDocument.php?documentid=".$document->getID(), 'class'=>"table-row-document droptarget", 'rel'=>"document_".$document->getID(), 'attributes'=>array(array('data-droptarget', "document_".$document->getID()), array('data-name', htmlspecialchars($document->getName(), ENT_QUOTES)))); + $content .= "
  • params['settings']->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."\" class=\"table-row-document droptarget\" data-droptarget=\"document_".$document->getID()."\" rel=\"document_".$document->getID()."\" data-name=\"".htmlspecialchars($document->getName(), ENT_QUOTES)."\" formtoken=\"".createFormKey('')."\"> ".htmlspecialchars($document->getName())."
  • \n"; + $subitems[] = array('label'=>' '.$document->getName(), 'link'=>$this->params['settings']->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(), 'class'=>"table-row-document droptarget", 'rel'=>"document_".$document->getID(), 'attributes'=>array(array('data-droptarget', "document_".$document->getID()), array('data-name', htmlspecialchars($document->getName(), ENT_QUOTES)))); } $content .= "
  • \n"; $subitems[] = array('divider'=>true); if(isset($this->params['folder']) && $this->params['folder']->getAccessMode($this->params['user']) >= M_READWRITE) { - $content .= "
  • params['folder']->getID()."&refferer=".urlencode('../out/out.ViewFolder.php?folderid='.$this->params['folder']->getID())."\">".getMLText("move_clipboard")."
  • \n"; - $subitems[] = array('label'=>getMLText("move_clipboard"), 'link'=>"../op/op.MoveClipboard.php?targetid=".$this->params['folder']->getID()."&refferer=".urlencode('../out/out.ViewFolder.php?folderid='.$this->params['folder']->getID())); + $content .= "
  • params['settings']->_httpRoot."op/op.MoveClipboard.php?targetid=".$this->params['folder']->getID()."&refferer=".urlencode($this->params['settings']->_httpRoot.'out/out.ViewFolder.php?folderid='.$this->params['folder']->getID())."\">".getMLText("move_clipboard")."
  • \n"; + $subitems[] = array('label'=>getMLText("move_clipboard"), 'link'=>$this->params['settings']->_httpRoot."op/op.MoveClipboard.php?targetid=".$this->params['folder']->getID()."&refferer=".urlencode($this->params['settings']->_httpRoot.'out/out.ViewFolder.php?folderid='.$this->params['folder']->getID())); } // $content .= "
  • params['refferer'])."\">".getMLText("clear_clipboard")."kkk
  • \n"; // $content .= "
  • ".getMLText("clear_clipboard")."
  • \n"; - $subitems[] = array('label'=>getMLText('clear_clipboard'), 'attributes'=>array(array('class', 'ajax-click'), array('data-href', '../op/op.Ajax.php'), array('data-param1', 'command=clearclipboard'))); + $subitems[] = array('label'=>getMLText('clear_clipboard'), 'attributes'=>array(array('class', 'ajax-click'), array('data-href', $this->params['settings']->_httpRoot.'op/op.Ajax.php'), array('data-param1', 'command=clearclipboard'))); if($this->hasHook('clipboardMenuItems')) $subitems = $this->callHook('clipboardMenuItems', $clipboard, $subitems); /* @@ -157,9 +157,9 @@ class SeedDMS_View_Clipboard extends SeedDMS_Theme_Style { $content .= $this->documentListRowStart($document); if (file_exists($dms->contentDir . $latestContent->getPath())) { - $content .= "
    getID()."&version=".$version."\">"; + $content .= "params['settings']->_httpRoot."op/op.Download.php?documentid=".$document->getID()."&version=".$version."\">"; if($previewer->hasPreview($latestContent)) { - $content .= "getID()."&version=".$latestContent->getVersion()."&width=40\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; + $content .= "params['settings']->_httpRoot."op/op.Preview.php?documentid=".$document->getID()."&version=".$latestContent->getVersion()."&width=40\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; } else { $content .= "getMimeIcon($latestContent->getFileType())."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; } @@ -176,7 +176,7 @@ class SeedDMS_View_Clipboard extends SeedDMS_Theme_Style { $content .= $this->getListRowPath($document); $content .= "\n"; - $content .= ""; + $content .= ""; $content .= "
    \n"; echo ''."\n"; } else { - echo "
    ".getMLText('invalid_dropfolder_folder')."
    "; + echo $this->errorMsg(getMLText('invalid_dropfolder_folder')); } } } /* }}} */ diff --git a/views/bootstrap/class.RemoveApprovalLog.php b/views/bootstrap/class.RemoveApprovalLog.php new file mode 100644 index 000000000..67d6175a4 --- /dev/null +++ b/views/bootstrap/class.RemoveApprovalLog.php @@ -0,0 +1,126 @@ + + * @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 RemoveApprovalLog view + * + * @category DMS + * @package SeedDMS + * @author Markus Westphal, Malcolm Cowe, Uwe Steinmann + * @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_RemoveApprovalLog extends SeedDMS_Theme_Style { + + function js() { /* {{{ */ + header('Content-Type: application/javascript; charset=UTF-8'); + parent::jsTranslations(array('js_form_error', 'js_form_errors')); +?> +$(document).ready(function() { + $("#form1").validate({ + rules: { + comment: { + required: true + }, + }, + messages: { + comment: "", + }, + }); +}); +printFileChooserJs(); + } /* }}} */ + + function show() { /* {{{ */ + $dms = $this->params['dms']; + $user = $this->params['user']; + $folder = $this->params['folder']; + $document = $this->params['document']; + $content = $this->params['version']; + $approveid = $this->params['approveid']; + + $approves = $content->getApprovalStatus(); + foreach($approves as $approve) { + if($approve['approveID'] == $approveid) { + $approveStatus = $approve; + break; + } + } + + $this->htmlAddHeader(''."\n", 'js'); + $this->htmlAddHeader(''."\n", 'js'); + + $this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); + $this->globalNavigation($folder); + $this->contentStart(); + $this->pageNavigation($this->getFolderPathHTML($folder, true, $document), "view_document", $document); + $this->contentHeading(getMLText("remove_approval_log")); + $this->warningMsg(getMLText('warning_remove_approval_log')); + + // Display the Approval form. + if($approveStatus["status"]!=0) { + + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + $indUser = $dms->getUser($approveStatus["userID"]); + print ""; + print "
    ".getMLText("status")."".getMLText("comment")."".getMLText("last_update")."
    "; + printApprovalStatusText($approveStatus["status"]); + print "".htmlspecialchars($approveStatus["comment"])."".$approveStatus["date"]." - ". htmlspecialchars($indUser->getFullname()) ."

    \n"; + } +?> + + +contentContainerStart(); + + $this->formField( + getMLText("comment"), + array( + 'element'=>'textarea', + 'name'=>'comment', + 'required'=>true, + 'rows'=>4, + 'cols'=>80 + ) + ); + $this->contentContainerEnd(); + + $this->formSubmit(' '.getMLText('remove_approval_log')); +?> + + + + +contentEnd(); + $this->htmlEndPage(); + } /* }}} */ +} +?> + diff --git a/views/bootstrap/class.RemoveReviewLog.php b/views/bootstrap/class.RemoveReviewLog.php new file mode 100644 index 000000000..de0beaeaa --- /dev/null +++ b/views/bootstrap/class.RemoveReviewLog.php @@ -0,0 +1,126 @@ + + * @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 RemoveReviewLog view + * + * @category DMS + * @package SeedDMS + * @author Markus Westphal, Malcolm Cowe, Uwe Steinmann + * @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_RemoveReviewLog extends SeedDMS_Theme_Style { + + function js() { /* {{{ */ + header('Content-Type: application/javascript; charset=UTF-8'); + parent::jsTranslations(array('js_form_error', 'js_form_errors')); +?> +$(document).ready(function() { + $("#form1").validate({ + rules: { + comment: { + required: true + }, + }, + messages: { + comment: "", + }, + }); +}); +printFileChooserJs(); + } /* }}} */ + + function show() { /* {{{ */ + $dms = $this->params['dms']; + $user = $this->params['user']; + $folder = $this->params['folder']; + $document = $this->params['document']; + $content = $this->params['version']; + $reviewid = $this->params['reviewid']; + + $reviews = $content->getReviewStatus(); + foreach($reviews as $review) { + if($review['reviewID'] == $reviewid) { + $reviewStatus = $review; + break; + } + } + + $this->htmlAddHeader(''."\n", 'js'); + $this->htmlAddHeader(''."\n", 'js'); + + $this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); + $this->globalNavigation($folder); + $this->contentStart(); + $this->pageNavigation($this->getFolderPathHTML($folder, true, $document), "view_document", $document); + $this->contentHeading(getMLText("remove_review_log")); + $this->warningMsg(getMLText('warning_remove_review_log')); + + // Display the Review form. + if($reviewStatus["status"]!=0) { + + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + print ""; + $indUser = $dms->getUser($reviewStatus["userID"]); + print ""; + print "
    ".getMLText("status")."".getMLText("comment")."".getMLText("last_update")."
    "; + printReviewStatusText($reviewStatus["status"]); + print "".htmlspecialchars($reviewStatus["comment"])."".$reviewStatus["date"]." - ". htmlspecialchars($indUser->getFullname()) ."

    \n"; + } +?> +
    + +contentContainerStart(); + + $this->formField( + getMLText("comment"), + array( + 'element'=>'textarea', + 'name'=>'comment', + 'required'=>true, + 'rows'=>4, + 'cols'=>80 + ) + ); + $this->contentContainerEnd(); + + $this->formSubmit(' '.getMLText('remove_review_log')); +?> + + + +
    +contentEnd(); + $this->htmlEndPage(); + } /* }}} */ +} +?> + diff --git a/views/bootstrap/class.ReviewDocument.php b/views/bootstrap/class.ReviewDocument.php index 5f1e6871d..1565dcdcf 100644 --- a/views/bootstrap/class.ReviewDocument.php +++ b/views/bootstrap/class.ReviewDocument.php @@ -97,7 +97,7 @@ $(document).ready(function() { $reviewtype = ($reviewStatus['type'] == 0) ? 'ind' : 'grp'; if($reviewStatus["status"]!=0) { - print ""; + print "
    "; print ""; print ""; print ""; diff --git a/views/bootstrap/class.SchedulerTaskMgr.php b/views/bootstrap/class.SchedulerTaskMgr.php index 89cef4541..763460d10 100644 --- a/views/bootstrap/class.SchedulerTaskMgr.php +++ b/views/bootstrap/class.SchedulerTaskMgr.php @@ -444,7 +444,8 @@ $(document).ready( function() { echo getLongReadableDate(makeTsFromDate($task->getNextRun())); echo ""; echo ""; echo ""> + + + +params['extmgr']; @@ -360,10 +373,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk)) showConfigOption('settings_sortUsersInList', 'sortUsersInList', array(' '=>'settings_sortUsersInList_val_login', 'fullname'=>'settings_sortUsersInList_val_fullname'), false, true); ?> showConfigOption('settings_sortFoldersDefault', 'sortFoldersDefault', array('u'=>'settings_sortFoldersDefault_val_unsorted', 's'=>'settings_sortFoldersDefault_val_sequence', 'n'=>'settings_sortFoldersDefault_val_name'), false, true); ?> showConfigOption('settings_defaultDocPosition', 'defaultDocPosition', array('end'=>'settings_defaultDocPosition_val_end', 'start'=>'settings_defaultDocPosition_val_start'), false, true); ?> - "> - - - +showConfigFolder('settings_libraryFolder', 'libraryFolder'); ?>
    ".getMLText("status")."".getMLText("comment")."".getMLText("last_update").""; - echo getLongReadableDate(makeTsFromDate($task->getLastRun())); + if($task->getLastRun()) + echo getLongReadableDate(makeTsFromDate($task->getLastRun())); echo ""; print "
    "; diff --git a/views/bootstrap/class.Search.php b/views/bootstrap/class.Search.php index 9803052e0..a6457761e 100644 --- a/views/bootstrap/class.Search.php +++ b/views/bootstrap/class.Search.php @@ -265,7 +265,7 @@ function typeahead() { /* {{{ */ // Database search Form {{{ ?>
    -
    + \n"; ?> - + contentContainerStart(); diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index bf6b655c7..ee4f0e4c1 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -225,6 +225,19 @@ class SeedDMS_View_Settings extends SeedDMS_Theme_Style { params['settings']; + $dms = $this->params['dms']; +?> +
    : +printFolderChooserHtml($name, M_READWRITE, -1, $dms->getFolder($settings->{"_".$name}), $name);?> +
    :printFolderChooserHtml("form1", M_READWRITE, -1, $dms->getFolder($settings->_libraryFolder), 'libraryFolder');?>