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

This commit is contained in:
Uwe Steinmann 2022-09-14 15:25:19 +02:00
commit bb080e8fb3
55 changed files with 725 additions and 286 deletions

View File

@ -12,6 +12,8 @@
--------------------------------------------------------------------------------
- merge changes up to 5.1.27
- fix triggering workflow (Closes: #542)
- create original file name from new document name when uploading document
from the library folder. Used to be the original file name
--------------------------------------------------------------------------------
Changes in version 6.0.19
@ -256,6 +258,7 @@
is done
- fix sorting in search result
- import of users can handle hidden and disabled flag
- image conversion falls back to gd library if imagick extension is not loaded
--------------------------------------------------------------------------------
Changes in version 5.1.26

View File

@ -49,16 +49,19 @@ class SeedDMS_Controller_ViewOnline extends SeedDMS_Controller_Common {
*/
$this->params['content'] = $content;
if(null === $this->callHook('version')) {
header("Content-Type: " . $content->getMimeType());
$efilename = rawurlencode($content->getOriginalFileName());
if (!isset($settings->_viewOnlineFileTypes) || !is_array($settings->_viewOnlineFileTypes) || !in_array(strtolower($content->getFileType()), $settings->_viewOnlineFileTypes)) {
header("Content-Disposition: attachment; filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename);
} else {
header("Content-Disposition: filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename);
}
header("Cache-Control: must-revalidate");
if(file_exists($dms->contentDir . $content->getPath())) {
header("Content-Type: " . $content->getMimeType());
$efilename = rawurlencode($content->getOriginalFileName());
if (!isset($settings->_viewOnlineFileTypes) || !is_array($settings->_viewOnlineFileTypes) || !in_array(strtolower($content->getFileType()), $settings->_viewOnlineFileTypes)) {
header("Content-Disposition: attachment; filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename);
} else {
header("Content-Disposition: filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename);
}
header("Cache-Control: must-revalidate");
header("ETag: ".$content->getChecksum());
sendFile($dms->contentDir.$content->getPath());
sendFile($dms->contentDir.$content->getPath());
}
}
break;
}

58
doc/README.Ldap Normal file
View File

@ -0,0 +1,58 @@
Ldap configuration
===================
The configuration for authentication against an ldap server needs to be done
the settings.xml file using a text editor. It cannot be edited from within the
web gui.
SeedDMS supports ldap authentication using an Active Directory (AD) or a
regular ldap server, e.g. openldap
The location of the ldap server is specified in two parameters: 'host' and
'port'. 'host' can be either a plain hostname or an ldap URI, including the
protocol, the host and optionally the port, e.g. ldap://localhost:389. In case
of an URI the port in the configuration must remain empty.
The authentication itself is a two step process which differs, depending on how
to bind to the server. If the configuration sets 'bindDN' and 'bindPW', those
values will be used for a initial non anonymous bind to the ldap server
otherwise an anonymous bind is executed.
After the initial bind, a ldap search for either 'uid=<username>' (ldap) or
'sAMAccountName=<username>' (AD) below basedn is done. The purpose of this
search is to retrieve a working bindDN which is then used to actually
authenticate the user. In case of an anonymous first bind the search will
likely fail and the bindDN for the second bind will be either
'uid=<username>,<basedn>' (ldap) or '<username>@<accountDomainName>' (AD). If
the search succeeds the bindDN will be taken from the user's data in the ldap
server. This bindDN will be used for a second bind using the users password.
If the second bind succeeds the user could be successfully authenticated.
The data from the ldap server can be used to create an account in SeedDMS
if the user trying to login does not exist yet, but was able to authenticate.
This will only be done if 'authentication->restricted' in the configuration
is set to true. In that case the common name (cn) and email address is taken
from ldap. Existing accounts in SeedDMS will not be updated with data from
ldap.
Examples
---------
Anonymous bind to openldap on localhost, port 389
- type = "ldap"
- baseDN = "ou=users,dc=mycompany,dc=de"
- host = "ldap://localhost"
During authentication as user 'admin' the following steps are executed
1. connect to ldap server at localhost:389
2. do an anonymous bind
3. search for 'uid=admin' below basedn
4.1. if search succeeds use the dn from the user
4.2. if search fails use 'uid=admin,<basedn>' as dn
5. do a non anonymous bind with dn and password entered by user
6. if step 5. succeeds the use is authenticated
If bindDN and bindPW are specified in the configuration, the second step
will be a non anonymous bind.

30
doc/README.Mail Normal file
View File

@ -0,0 +1,30 @@
Mail configuration
===================
SeedDMS uses email to
* notify users about changes of documents and folders
* send instructions during the password forgotten process
Configuring email in SeedDMS is simple on systems running a
local mail server, because this is the default in SeedDMS and
no additional configuration is needed. On Linux you should
consider running a local mail server, which relais the mails
to your outgoing mail server. If you cannot run a local mail
server, you can still configure SeedDMS to use an outgoing
SMTP server. Below are some examples on how to configure
SeedDMS for different hosters.
1&1
---------
smtp server: ssl://smtp.1und1.de
smtp port: 465
Gmail
---------
smtp server: smtp.gmail.com
smtp port: 587
note: you have to turn on 'Less secure app access' in your google account,
otherwise you will not be able to send mail. It will quit with an error
complaining about wrong credentials

59
doc/README.ocr Normal file
View File

@ -0,0 +1,59 @@
OCR
====
SeedDMS itself has no support for optical character recognition (OCR)
because it does not care about the content of file. Though, external
OCR software can be used to convert an image into text and index it
by the full text search engine.
The following script can be use to convert a scanned image into pdf
with a text layer added. The script actually takes this file to
ran it through pdftotext. It was published in the seeddms forum
https://sourceforge.net/p/seeddms/discussion/general/thread/4ec5973d/
#!/bin/bash
inputpdf=$1
temp_folder=/tmp/seedinput/$(date +"%Y_%m_%d_%H%M%S")/
lockfile=/tmp/seed
protokolldatei=./tesser_syslog
cores=2
mkdir -p $lockfile
while [ -e "$lockfile"/"`basename $0`" ];
do
sleep 5
done
if ( set -o noclobber; echo "locked" > "$lockfile"/"`basename $0`"); then
trap 'rm -f "$lockfile"/"`basename $0`"; echo $(date) " Lockdatei wird geloescht: " $lockfile"/"`basename $0` Aufrufparameter: $* >> $protokolldatei ;rm -r $temp_folder; exit $?' INT TERM KILL EXIT
#das Datum mit dem Scriptnamen in die Protokolldatei schreiben
echo $(date) " Lockdatei erstellt: " $lockfile"/"`basename $0` >> $protokolldatei
else
#Script beenden falls Lockdatei nicht erstellt werden konnte
echo $(date) " Programm wird beendet, Lockdatei konnte nicht erstellt werden: $lockfile"/"`basename $0` Aufrufparameter: $* " >> $protokolldatei
exit 1
fi
mkdir -p $temp_folder
$(pdftotext -raw $1 - 1> $temp_folder''tmp.txt )
pdf_contents=`cat $temp_folder''tmp.txt`
pdf_contents=`echo "$pdf_contents" | tr -dc '[:print:]'`
if [ -z "$pdf_contents" ]; then
convert -density 300 -quality 95 $inputpdf +adjoin $temp_folder''image%03d.jpg
find $temp_folder -name '*.jpg'| parallel --gnu -j $cores tesseract -l deu --psm 6 {} {} pdf
num=`find $temp_folder -name '*.pdf'| wc -l`
if [ "$num" -gt "1" ]; then
pdfunite $temp_folder*.pdf $temp_folder''tmp.pdf
else
mv $temp_folder*.pdf $temp_folder''tmp.pdf
fi
pdftotext $temp_folder''tmp.pdf $temp_folder''tmp.txt
mv $temp_folder''tmp.pdf $1
fi
cat $temp_folder''tmp.txt

View File

@ -28,15 +28,15 @@ class SeedDMS_ConversionServiceImageToImage extends SeedDMS_ConversionServiceBas
*/
public $timeout;
public function __construct($from, $to) {
public function __construct($from, $to) { /* {{{ */
$this->from = $from;
$this->to = $to;
$this->timeout = 5;
}
} /* }}} */
public function getInfo() {
return "Convert with imagick php functions";
}
public function getInfo() { /* {{{ */
return "Convert with imagick or gd php functions";
} /* }}} */
public function getAdditionalParams() { /* {{{ */
return [
@ -44,28 +44,68 @@ class SeedDMS_ConversionServiceImageToImage extends SeedDMS_ConversionServiceBas
];
} /* }}} */
public function convert($infile, $target = null, $params = array()) {
/**
* Convert a pixel image into png and scale it
*
* This method uses imagick and if not available falls back to the gd library.
*/
public function convert($infile, $target = null, $params = array()) { /* {{{ */
$start = microtime(true);
$imagick = new Imagick();
try {
if($imagick->readImage($infile)) {
if(extension_loaded('imagick')) {
$imagick = new Imagick();
try {
if($imagick->readImage($infile)) {
if(!empty($params['width']))
$imagick->scaleImage(min((int) $params['width'], $imagick->getImageWidth()), 0);
$end = microtime(true);
if($this->logger) {
$this->logger->log('Conversion from '.$this->from.' to '.$this->to.' with imagick service took '.($end-$start).' sec.', PEAR_LOG_INFO);
}
if($target) {
return $imagick->writeImage($target);
} else {
return $imagick->getImageBlob();
}
}
} catch (ImagickException $e) {
return false;
}
} elseif(extension_loaded('gd')) {
$im = null;
switch($this->from) {
case 'image/jpeg':
case 'image/jpg':
$im = @imagecreatefromjpeg($infile);
break;
case 'image/png':
$im = @imagecreatefrompng($infile);
break;
case 'image/gif':
$im = @imagecreatefromgif($infile);
break;
}
if($im) {
$size = getimagesize($infile);
if(!empty($params['width']))
$imagick->scaleImage(min((int) $params['width'], $imagick->getImageWidth()), 0);
$im = imagescale($im, min((int) $params['width'], $size[0]));
$end = microtime(true);
if($this->logger) {
$this->logger->log('Conversion from '.$this->from.' to '.$this->to.' with image service took '.($end-$start).' sec.', PEAR_LOG_INFO);
$this->logger->log('Conversion from '.$this->from.' to '.$this->to.' with gd image service took '.($end-$start).' sec.', PEAR_LOG_INFO);
}
if($target) {
return $imagick->writeImage($target);
return imagepng($im, $target);
} else {
return $imagick->getImageBlob();
ob_start();
var_dump(imagepng($im));
$image = ob_get_clean();
return $image;
}
} else {
return false;
}
} catch (ImagickException $e) {
return false;
}
return false;
}
} /* }}} */
}

View File

@ -23,13 +23,15 @@ if(!empty($settings->_converters['fulltext'])) {
if(extension_loaded('imagick')) {
$conversionmgr->addService(new SeedDMS_ConversionServicePdfToImage('application/pdf', 'image/png'))->setLogger($logger);
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/tiff', 'image/png'))->setLogger($logger);
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/svg+xml', 'image/png'))->setLogger($logger);
}
if(extension_loaded('gd') || extension_loaded('imagick')) {
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/jpeg', 'image/png'))->setLogger($logger);
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/png', 'image/png'))->setLogger($logger);
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/jpg', 'image/png'))->setLogger($logger);
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/gif', 'image/png'))->setLogger($logger);
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/tiff', 'image/png'))->setLogger($logger);
$conversionmgr->addService(new SeedDMS_ConversionServiceImageToImage('image/svg+xml', 'image/png'))->setLogger($logger);
}
$conversionmgr->addService(new SeedDMS_ConversionServiceTextToText('text/plain', 'text/plain'))->setLogger($logger);

View File

@ -367,6 +367,34 @@ function utf8_basename($path, $suffix='') { /* {{{ */
return $file;
} /* }}} */
/**
* Return a valid file name
*
* This function returns a valid file name for the given document content
* or an arbitrary string. If a document content is given the name of
* the document will be used. The extension of the file name will be
* either taken from the document name or the original file. If the two
* differ the extension from the original file name will be used.
*
* @param object|string $content document content or an arbitrary string
* @return string valid file name
*/
function getFilenameByDocname($content) { /* {{{ */
if(is_string) {
$filename = $content;
} else {
$document = $content->getDocument();
$ext = pathinfo($document->getName(), PATHINFO_EXTENSION);
$oext = pathinfo($content->getOriginalFileName(), PATHINFO_EXTENSION);
if($ext == $oext)
$filename = $document->getName();
else {
$filename = $document->getName().'.'.$oext;
}
}
return mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $filename);
} /* }}} */
function getLogger($prefix='') { /* {{{ */
global $settings;

View File

@ -119,6 +119,5 @@ if (!update_db()) {
print "<b>Update done</b><br>";
print "</body></html>";
print "</body></html>";
?>

View File

@ -19,7 +19,7 @@ CREATE TABLE `tblDocumentFiles` (
`fileType` varchar(10) NOT NULL default '',
`mimeType` varchar(70) NOT NULL default '',
PRIMARY KEY (`id`)
) ;
) Engine=MyISAM ;
-- --------------------------------------------------------

View File

@ -68,6 +68,5 @@ if (!update_db()) {
}else print "</pre><b>Update done</b><br>";
print "</body></html>";
print "</body></html>";
?>

View File

@ -24,7 +24,7 @@ CREATE TABLE `tblMandatoryReviewers` (
`reviewerUserID` int(11) NOT NULL default '0',
`reviewerGroupID` int(11) NOT NULL default '0',
PRIMARY KEY (`userID`,`reviewerUserID`,`reviewerGroupID`)
) ;
) Engine=MyISAM ;
--
-- Table structure for mandatory approvers
@ -35,4 +35,4 @@ CREATE TABLE `tblMandatoryApprovers` (
`approverUserID` int(11) NOT NULL default '0',
`approverGroupID` int(11) NOT NULL default '0',
PRIMARY KEY (`userID`,`approverUserID`,`approverGroupID`)
) ;
) Engine=MyISAM ;

View File

@ -68,6 +68,4 @@ if (!update_db()) {
}else print "</pre><b>Update done</b><br>";
print "</body></html>";
?>
print "</body></html>";

View File

@ -20,9 +20,7 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
function check($doupdate=0) { /* {{{ */
global $db, $settings;
function check($db, $doupdate=0) { /* {{{ */
$arr = array();
$arr['tblDocuments'] = array('key'=>'id', 'fields'=>array('name', 'comment', 'keywords'));
$arr['tblDocumentFiles'] = array('key'=>'id', 'fields'=>array('name', 'comment', 'mimeType'));
@ -91,7 +89,7 @@ else
$doupdate = 0;
$doupdate = 1;
if (!check($doupdate)) {
if (!check($db, $doupdate)) {
print "<p>Update failed</p>";
}

View File

@ -222,6 +222,7 @@ URL: [url]',
'backup_tools' => 'أدوات النسخ الاحتياطية',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'بين',
'bg_BG' => 'بلغارية',
@ -301,6 +302,7 @@ URL: [url]',
'comment_changed_email' => 'تعليق تغيير البريد الإلكتروني',
'comment_for_current_version' => 'تعليق على الاصدار',
'configure_extension' => 'تعديل',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'تعديل مسح المحفوظات',
'confirm_create_fulltext_index' => 'نعم: اود اعادة انشاء فهرس للنص الكامل !',
'confirm_move_document' => 'تاكيد نقل الملف',
@ -861,6 +863,8 @@ URL: [url]',
'mandatory_reviewers' => 'مراجعين اجباريين',
'mandatory_reviewer_no_access' => 'ممنوع دخول المراجع الإجباري',
'march' => 'مارس',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'الحجم الاقصى للملف',
'may' => 'مايو',
'menu_dropfolder' => 'صفحة المجلد',

View File

@ -205,6 +205,7 @@ $text = array(
'backup_tools' => 'Иструменти за бекъп',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'между',
'bg_BG' => 'Български',
@ -284,6 +285,7 @@ $text = array(
'comment_changed_email' => 'Коментарите са изменени',
'comment_for_current_version' => 'Коментар за версията',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => 'Да, пресъздай пълнотекстов индекс!',
'confirm_move_document' => '',
@ -790,6 +792,8 @@ $text = array(
'mandatory_reviewers' => '',
'mandatory_reviewer_no_access' => '',
'march' => 'март',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Лимит за размер на файла',
'may' => 'май',
'menu_dropfolder' => '',

View File

@ -210,6 +210,7 @@ URL: [url]',
'backup_tools' => 'Eines de còpia de seguretat',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'entre',
'bg_BG' => 'Búlgar',
@ -289,6 +290,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'Comentari de la versió actual',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => '',
'confirm_move_document' => '',
@ -795,6 +797,8 @@ URL: [url]',
'mandatory_reviewers' => '',
'mandatory_reviewer_no_access' => '',
'march' => 'Març',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Mida màxima de pujada de cada fitxer',
'may' => 'Maig',
'menu_dropfolder' => '',

View File

@ -234,6 +234,7 @@ URL: [url]',
'backup_tools' => 'Nástroje pro zálohování',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'mezi',
'bg_BG' => 'Bulharština',
@ -313,6 +314,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'Komentář k aktuální verzi',
'configure_extension' => 'Konfigurovat rozšíření',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Chtěli byste vyčistit mezipaměť? Tím se odstraní všechny předběžně vygenerované náhledy.',
'confirm_create_fulltext_index' => 'Ano, chci znovu vytvořit fulltext index!',
'confirm_move_document' => 'Potvrďte přesunutí dokumentu.',
@ -892,6 +894,8 @@ URL: [url]',
'mandatory_reviewers' => 'Stanovení recenzenti',
'mandatory_reviewer_no_access' => 'Stanovený recenzent \'[user]\' má nedostatečná přístupová práva.',
'march' => 'Březen',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Max. délka pro nahrání jednoho souboru',
'may' => 'Květen',
'menu_dropfolder' => 'Vhazovací složka',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (3119), dgrutsch (22)
// Translators: Admin (3123), dgrutsch (22)
$text = array(
'2_factor_auth' => '2-Faktor Authentifizierung',
@ -273,6 +273,7 @@ URL: [url]</p>',
'backup_tools' => 'Backup tools',
'batch_change_owner' => 'Besitzer ändern',
'batch_new_owner_msg' => 'Der Besitzer von [count] Dokuments wurde geändert.',
'batch_operation' => 'Massenoperation',
'batch_operation_result' => 'Ergebnis der Massenoperation',
'between' => 'zwischen',
'bg_BG' => 'Bulgarisch',
@ -352,6 +353,7 @@ URL: [url]</p>',
'comment_changed_email' => '',
'comment_for_current_version' => 'Kommentar zur aktuellen Version',
'configure_extension' => 'Erweiterung konfigurieren',
'confirm_change_owner' => 'Bitte bestätigen Sie den Besitzerwechsel der ausgewählten Objekte.',
'confirm_clear_cache' => 'Wollen Sie wirklich den Cache löschen? Dies entfernt alle vorberechneten Vorschaubilder, Javascript und andere Dateien.',
'confirm_create_fulltext_index' => 'Ja, Ich möchte den Volltext-Index neu erzeugen!.',
'confirm_move_document' => 'Dokument wirklich verschieben?',
@ -1035,6 +1037,8 @@ URL: [url]</p>',
'mandatory_reviewers' => 'Zwingende Prüfer',
'mandatory_reviewer_no_access' => 'Zwingender Prüfer \'[user]\' hat nicht ausreichende Zugriffsrechte.',
'march' => 'März',
'mark_document' => 'Dokument für Massenoperation auswählen',
'mark_folder' => 'Ordner für Massenoperation auswählen',
'max_upload_size' => 'Maximale Dateigröße',
'may' => 'Mai',
'menu_dropfolder' => 'Ablageordner',

View File

@ -205,6 +205,7 @@ $text = array(
'backup_tools' => 'Εργαλεία εφεδρικής καταγραφής',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'μεταξύ',
'bg_BG' => 'Βουλγάρικα',
@ -284,6 +285,7 @@ $text = array(
'comment_changed_email' => '',
'comment_for_current_version' => 'τρέχουσα έκδοση',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => 'Ναι, Θα ήθελα την επαναδημιουργία των δεικτών πλήρους κειμένου',
'confirm_move_document' => '',
@ -790,6 +792,8 @@ $text = array(
'mandatory_reviewers' => '',
'mandatory_reviewer_no_access' => '',
'march' => 'Μάρτιος',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Μέγιστο μέγεθος μεταφόρτωσης',
'may' => 'Μάϊος',
'menu_dropfolder' => '',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (2213), archonwang (3), dgrutsch (9), netixw (14)
// Translators: Admin (2217), archonwang (3), dgrutsch (9), netixw (14)
$text = array(
'2_factor_auth' => '2-factor authentication',
@ -273,6 +273,7 @@ URL: [url]</p>',
'backup_tools' => 'Backup tools',
'batch_change_owner' => 'Change owner',
'batch_new_owner_msg' => 'The owner of [count] documents has been changed.',
'batch_operation' => 'Batch operation',
'batch_operation_result' => 'Result of batch operation',
'between' => 'between',
'bg_BG' => 'Bulgarian',
@ -352,6 +353,7 @@ URL: [url]</p>',
'comment_changed_email' => '',
'comment_for_current_version' => 'Version comment',
'configure_extension' => 'Configure extension',
'confirm_change_owner' => 'Please confirm changing the owner of the selected objects.',
'confirm_clear_cache' => 'Would you really like to clear the cache? This will remove all precalculated preview images, javascript and other files.',
'confirm_create_fulltext_index' => 'Yes, I would like to recreate the fulltext index!',
'confirm_move_document' => 'Please confirm moving the document.',
@ -1036,6 +1038,8 @@ URL: [url]</p>',
'mandatory_reviewers' => 'Mandatory reviewers',
'mandatory_reviewer_no_access' => 'Mandatory reviewer \'[user]\' has insufficient access rights.',
'march' => 'March',
'mark_document' => 'Mark document for batch operation',
'mark_folder' => 'Mark folder for batch operation',
'max_upload_size' => 'Maximum upload size',
'may' => 'May',
'menu_dropfolder' => 'Drop folder',

View File

@ -229,6 +229,7 @@ URL: [url]',
'backup_tools' => 'Herramientas de copia de seguridad',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'entre',
'bg_BG' => 'Búlgaro',
@ -308,6 +309,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'Comentario de la versión actual',
'configure_extension' => 'Configurar extensión',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => '¡Sí, quiero regenerar el índice te texto completo¡',
'confirm_move_document' => '',
@ -880,6 +882,8 @@ URL: [url]',
'mandatory_reviewers' => 'Revisores obligatorios',
'mandatory_reviewer_no_access' => 'El revisor obligatorio \'[user]\' no tiene suficiente nivel de acceso.',
'march' => 'Marzo',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Tamaño máximo de subida para cada fichero',
'may' => 'Mayo',
'menu_dropfolder' => '',

View File

@ -263,6 +263,7 @@ URL : [url]</p>',
'backup_tools' => 'Outils de sauvegarde',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'entre',
'bg_BG' => 'Bulgare',
@ -342,6 +343,7 @@ URL : [url]</p>',
'comment_changed_email' => 'Commentaire lors du changement d\'adresse mail',
'comment_for_current_version' => 'Commentaires pour la version actuelle',
'configure_extension' => 'Configurer lextension',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Voulez-vous vraiment vider le cache ? Cela va effacer toutes les miniatures.',
'confirm_create_fulltext_index' => 'Oui, je souhaite recréer l\'index de recherche plein texte !',
'confirm_move_document' => 'Veuillez confirmer le déplacement du document.',
@ -1022,6 +1024,8 @@ URL : [url]</p>',
'mandatory_reviewers' => 'Examinateurs',
'mandatory_reviewer_no_access' => 'Examinateur \'[user]\' ne dispose pas des droits suffisants',
'march' => 'Mars',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Taille maximum de fichier déposé',
'may' => 'Mai',
'menu_dropfolder' => 'Dossier de dépôt',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (1248), marbanas (16)
// Translators: Admin (1249), marbanas (16)
$text = array(
'2_factor_auth' => '',
@ -234,6 +234,7 @@ Internet poveznica: [url]',
'backup_tools' => 'Alat za sigurnosnu kopiju',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'između',
'bg_BG' => 'Bugarski',
@ -313,6 +314,7 @@ Internet poveznica: [url]',
'comment_changed_email' => 'Promjena komentara',
'comment_for_current_version' => 'Verzija komentara',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => 'Da, želim ponovo indeksirati cijeli tekst!',
'confirm_move_document' => '',
@ -727,7 +729,7 @@ Internet poveznica: [url]',
'hu_HU' => 'Mađarski',
'id' => 'ID',
'identical_version' => 'Nova verzija je identična trenutnoj verziji.',
'id_ID' => '',
'id_ID' => 'Indonezija',
'import' => '',
'importfs' => '',
'import_extension' => '',
@ -873,6 +875,8 @@ Internet poveznica: [url]',
'mandatory_reviewers' => 'Obavezni recezenti',
'mandatory_reviewer_no_access' => 'Recezenti \'[user]\' nemaju dovoljno prava pristupa.',
'march' => 'Ožujak',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Max. veličina za prijenos',
'may' => 'Svibanj',
'menu_dropfolder' => '',

View File

@ -229,6 +229,7 @@ URL: [url]',
'backup_tools' => 'Mentő eszközök',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'között',
'bg_BG' => 'Bulgár',
@ -308,6 +309,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'Megjegyzés az aktuális verzióhoz',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => 'Igen, szeretném újra létrehozni a teljes szöveg indexet!',
'confirm_move_document' => '',
@ -868,6 +870,8 @@ URL: [url]',
'mandatory_reviewers' => 'Kötelező felülvizsgálók',
'mandatory_reviewer_no_access' => 'Kötelező felülvizsgáló \'[user]\' nem rendelkezik elegendő jogosultságokkal.',
'march' => 'Március',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Legnagyobb feltölthető méret',
'may' => 'Május',
'menu_dropfolder' => '',

View File

@ -243,6 +243,7 @@ URL: [url]</p>',
'backup_tools' => 'Alat cadangan',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => '',
'bg_BG' => 'Bulgaria',
@ -322,6 +323,7 @@ URL: [url]</p>',
'comment_changed_email' => '',
'comment_for_current_version' => 'Komentar versi',
'configure_extension' => 'Konfigurasi ekstensi',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => 'Ya, saya ingin membuat ulang indeks teks secara lengkap!',
'confirm_move_document' => '',
@ -924,6 +926,8 @@ URL: [url]</p>',
'mandatory_reviewers' => '',
'mandatory_reviewer_no_access' => 'Mandatory reviewer \'[user]\' memiliki hak akses yang tidak memadai.',
'march' => 'Maret',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Ukuran maksimum unggahan',
'may' => 'Mei',
'menu_dropfolder' => 'Seret folder',

View File

@ -234,6 +234,7 @@ URL: [url]',
'backup_tools' => 'Strumenti di backup',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'tra',
'bg_BG' => 'Bulgaro',
@ -313,6 +314,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'Commento per la versione',
'configure_extension' => 'Configura estensione',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Vuoi davvero cancellare la cache? Questo eliminerà tutte le immagini di anteprima precalcolate.',
'confirm_create_fulltext_index' => 'Sì, desidero ricreare l\'indice fulltext!',
'confirm_move_document' => 'Conferma lo spostamento del documento.',
@ -878,6 +880,8 @@ URL: [url]',
'mandatory_reviewers' => 'Revisori necessari',
'mandatory_reviewer_no_access' => 'Il revisore necessario \'[user]\' non ha sufficienti permessi d\'accesso.',
'march' => 'Marzo',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Dimensione massima caricabile per ogni file',
'may' => 'Maggio',
'menu_dropfolder' => 'Cartella di pubblicazione',

View File

@ -236,6 +236,7 @@ URL: [url]',
'backup_tools' => '백업 도구',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => '사이',
'bg_BG' => '불가리아',
@ -315,6 +316,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => '버전 주석',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => '예, 전체 텍스트 인덱스를 다시 만들고 싶습니다!',
'confirm_move_document' => '',
@ -874,6 +876,8 @@ URL: [url]',
'mandatory_reviewers' => '필수 검토자',
'mandatory_reviewer_no_access' => '필수 검수자\'[user]\'가 충분한 권한을 가지고 있지 않습니다.',
'march' => '3월',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => '최대 업로드 크기',
'may' => '월',
'menu_dropfolder' => '',

View File

@ -232,6 +232,7 @@ URL: [url]',
'backup_tools' => 'ເຄື່ອງມືສຳຮອງຂໍມູນ',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'ລະຫວ່າງ',
'bg_BG' => 'ບັດແກເຣີຍ',
@ -311,6 +312,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'ຄວາມຄິດເຫັນກ່ຽວກັບເວີຊັ້ນ',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'ເຈົ້າຕ້ອງການລົບແຄຣຫຼືບໍ່? ການດຳເນີນການນີ້ຈະລົບພາບຕົວຢ່າງທັງໝົດທີມີການຄຳນວນລ່ວງໜ້າ',
'confirm_create_fulltext_index' => 'ແມ່ນແລ້ວ, ຂ້ອຍຕ້ອງການສ້າງດັດສະນີຂໍ້ມູນເຕັມ',
'confirm_move_document' => 'ກະລຸນາຢືນຢັນການຍ້າຍເອກະສານ',
@ -871,6 +873,8 @@ URL: [url]',
'mandatory_reviewers' => 'ຜູ້ກວດສອບແບບບັງຄັບ',
'mandatory_reviewer_no_access' => 'ຜູ້ກວດສອບແບບບັງຄັບ "[user] " ມີສິດທິການເຂົ້າເຖິງບໍ່ພຽງພໍ',
'march' => 'ເດືອນມີນາ',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'ຂະຫນາດການອັບໂຫລດສູງສຸດ',
'may' => 'ເດືອນພຶດສະພາ',
'menu_dropfolder' => 'ວາງໂຟລເດີ',

View File

@ -234,6 +234,7 @@ URL: [url]',
'backup_tools' => 'Sikkerhetskopi-verktøy',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'mellom',
'bg_BG' => 'Bulgaria',
@ -313,6 +314,7 @@ URL: [url]',
'comment_changed_email' => 'Forandre e-post',
'comment_for_current_version' => 'Versjonskommentar',
'configure_extension' => 'Konfigurere utvidelse',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Vil du virkelig tømme hurtigbufferen? Dette vil fjerne alle forhåndsberegnede forhåndsbilder.',
'confirm_create_fulltext_index' => 'Ja, jeg vil gjenskape fulltekstindeksen!',
'confirm_move_document' => 'Venligst bekreft flytting av dokumentet.',
@ -892,6 +894,8 @@ URL: [url]',
'mandatory_reviewers' => 'Obligatorisk korrekturleser',
'mandatory_reviewer_no_access' => 'Obligatorisk korrekturleser \'[user]\' har mangelfull adgangsrettigheter.',
'march' => 'Mars',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Maksimal størrelse for opplasting',
'may' => 'Mai',
'menu_dropfolder' => 'Slipp mappe',

View File

@ -227,6 +227,7 @@ URL: [url]',
'backup_tools' => 'Backup-gereedschap',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'tussen',
'bg_BG' => 'Bulgaars',
@ -306,6 +307,7 @@ URL: [url]',
'comment_changed_email' => 'Gewijzigde email',
'comment_for_current_version' => 'Versie van het commentaar',
'configure_extension' => 'Configureer extensie',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Ja, ik wil de cache opschonen!',
'confirm_create_fulltext_index' => 'Ja, Ik wil de fulltext index opnieuw maken!',
'confirm_move_document' => 'Bevestig verplaatsing van document',
@ -885,6 +887,8 @@ URL: [url]',
'mandatory_reviewers' => 'Verplichte beoordelaars \'[user]\'',
'mandatory_reviewer_no_access' => 'De verplichte gebruikers hebben onvoldoende rechten.',
'march' => 'maart',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Maximale upload omvang voor ieder bestand',
'may' => 'mei',
'menu_dropfolder' => 'Dropfolder',

View File

@ -222,6 +222,7 @@ URL: [url]',
'backup_tools' => 'Narzędzia kopii zapasowej',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'między',
'bg_BG' => 'Bułgarski',
@ -301,6 +302,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'Komentarz do wersji',
'configure_extension' => 'Konfiguruj rozszerzenie',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Czy naprawdę chcesz wyczyścić pamięć podręczną? Spowoduje to usunięcie wszystkich wstępnie obliczonych obrazów podglądu.',
'confirm_create_fulltext_index' => 'Tak, chcę ponownie utworzyć indeks pełnotekstowy.',
'confirm_move_document' => 'Potwierdź przeniesienie dokumentu',
@ -861,6 +863,8 @@ URL: [url]',
'mandatory_reviewers' => 'Wymagani przeglądający',
'mandatory_reviewer_no_access' => 'Obowiązkowy recenzent \'[user]\' ma niewystarczające prawa dostępu.',
'march' => 'Marzec',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Maksymalny rozmiar pliku',
'may' => 'Maj',
'menu_dropfolder' => 'Folder zrzutu',

View File

@ -234,6 +234,7 @@ URL: [url]',
'backup_tools' => 'Ferramentas de backup',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'entre',
'bg_BG' => 'Bulgaro',
@ -313,6 +314,7 @@ URL: [url]',
'comment_changed_email' => 'comentário alterado email',
'comment_for_current_version' => 'Comentário para versão atual',
'configure_extension' => 'Configurar extensão',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Você realmente gostaria de limpar o cache? Isso removerá todas as imagens de pré-visualização.',
'confirm_create_fulltext_index' => 'Sim, eu gostaria de recriar o índice de texto completo!',
'confirm_move_document' => 'Por favor, confirme a movimentação do documento.',
@ -892,6 +894,8 @@ URL: [url]',
'mandatory_reviewers' => 'Avaliadores obrigatórios',
'mandatory_reviewer_no_access' => 'Avaliação obrigatória \'[usuário]\' tem direitos de acesso insuficientes.',
'march' => 'Março',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Tamanho máximo de arquivo para upload',
'may' => 'Maio',
'menu_dropfolder' => 'Pasta suspensa',

View File

@ -234,6 +234,7 @@ URL: [url]',
'backup_tools' => 'Backup tools',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'între',
'bg_BG' => 'Bulgară',
@ -313,6 +314,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'Comentariu versiune',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => 'Da, aș dori să recreeze indexul pentru tot textul!',
'confirm_move_document' => '',
@ -873,6 +875,8 @@ URL: [url]',
'mandatory_reviewers' => 'Revizuitori obligatorii',
'mandatory_reviewer_no_access' => 'Revizuitorul obligatoriu \'[user]\' are drepturi de acces insuficiente.',
'march' => 'Martie',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Dimensiunea maximă de încărcare',
'may' => 'Mai',
'menu_dropfolder' => '',

View File

@ -234,6 +234,7 @@ URL: [url]',
'backup_tools' => 'Резервные копии',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'между',
'bg_BG' => 'Болгарский',
@ -313,6 +314,7 @@ URL: [url]',
'comment_changed_email' => 'Сообщение об изменении комментария',
'comment_for_current_version' => 'Комментарий версии',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Подтвердить очистку кеша',
'confirm_create_fulltext_index' => 'Да, пересоздать полнотекстовый индекс!',
'confirm_move_document' => 'Подтвердить перемещение документа',
@ -873,6 +875,8 @@ URL: [url]',
'mandatory_reviewers' => 'Обязательные рецензенты',
'mandatory_reviewer_no_access' => 'Обязательный рецензент «[user]» не имеет достаточных прав доступа.',
'march' => 'Март',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Ограничение размера файла',
'may' => 'Май',
'menu_dropfolder' => '',

View File

@ -234,6 +234,7 @@ URL: [url]',
'backup_tools' => 'Zálohovacie nástroje',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'medzi',
'bg_BG' => 'Bulharsky',
@ -313,6 +314,7 @@ URL: [url]',
'comment_changed_email' => 'Nepreložené',
'comment_for_current_version' => 'Version comment',
'configure_extension' => 'Configure extension',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Chcete naozaj vyčistiť vyrovnávaciu pamäť? Tým sa odstránia všetky predbežne náhľady obrázkov.',
'confirm_create_fulltext_index' => 'Áno, chcel by som obnoviť fullttext index!',
'confirm_move_document' => 'Potvrďte presunutie dokumentu.',
@ -892,6 +894,8 @@ URL: [url]',
'mandatory_reviewers' => 'Mandatory reviewers',
'mandatory_reviewer_no_access' => 'Mandatory reviewer \'[user]\' has insufficient access rights.',
'march' => 'Marec',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Maximálna veľkosť každého súboru',
'may' => 'Máj',
'menu_dropfolder' => 'Drop zložka',

View File

@ -235,6 +235,7 @@ URL: [url]',
'backup_tools' => 'Backup-verktyg',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'mellan',
'bg_BG' => 'Bulgariska',
@ -314,6 +315,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'Kommentar till versionen',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => 'Vill du verkligen rensa cachen? Detta kommer att ta bort alla förlagrade bilder för förhandsvisning.',
'confirm_create_fulltext_index' => 'Ja, jag vill återskapa fulltext-sökindex!',
'confirm_move_document' => 'Vänligen bekräfta flytt av dokumentet.',
@ -879,6 +881,8 @@ URL: [url]',
'mandatory_reviewers' => 'Obligatoriska granskare',
'mandatory_reviewer_no_access' => 'Obligatorisk person som granskar \'[user]\' ar inga rättigheter.',
'march' => 'Mars',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Maximal storlek för uppladdning',
'may' => 'Maj',
'menu_dropfolder' => 'Mapp för snabbuppladdning',

View File

@ -228,6 +228,7 @@ URL: [url]',
'backup_tools' => 'Yedekleme araçları',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'arasında',
'bg_BG' => 'Bulgarca',
@ -307,6 +308,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => 'Versiyon açıklaması',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => 'Evet, tam metin indeksini yeniden oluşturmak istiyorum!',
'confirm_move_document' => '',
@ -867,6 +869,8 @@ URL: [url]',
'mandatory_reviewers' => 'Zorunlu kontrol edenler',
'mandatory_reviewer_no_access' => 'Zorunlu kontrol üyesi \'[user]\' yetersiz erişim haklarına sahip',
'march' => 'Mart',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Maksimum yükleme boyutu',
'may' => 'Mayıs',
'menu_dropfolder' => '',

View File

@ -234,6 +234,7 @@ URL: [url]',
'backup_tools' => 'Резервні копії',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => 'між',
'bg_BG' => 'Bulgarian',
@ -313,6 +314,7 @@ URL: [url]',
'comment_changed_email' => 'Повідомлення про зміну коментаря',
'comment_for_current_version' => 'Коментар версії',
'configure_extension' => '',
'confirm_change_owner' => '',
'confirm_clear_cache' => '',
'confirm_create_fulltext_index' => 'Так, перестворити повнотекстовий індекс!',
'confirm_move_document' => '',
@ -873,6 +875,8 @@ URL: [url]',
'mandatory_reviewers' => 'Обов\'язкові рецензенти',
'mandatory_reviewer_no_access' => 'Обов\'язковий рецензент «[user]» не має достатніх прав доступу.',
'march' => 'Березень',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => 'Обмеження розміру файлу',
'may' => 'Травень',
'menu_dropfolder' => '',

View File

@ -226,6 +226,7 @@ URL: [url]',
'backup_tools' => '备份工具',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => '时间段',
'bg_BG' => '保加利亚语',
@ -305,6 +306,7 @@ URL: [url]',
'comment_changed_email' => '评论更新',
'comment_for_current_version' => '版本说明',
'configure_extension' => '配置扩展',
'confirm_change_owner' => '',
'confirm_clear_cache' => '确认清除缓存吗?这将删除所有预先计算的预览图像。',
'confirm_create_fulltext_index' => '确认重新创建全文索引',
'confirm_move_document' => '请确认移动文件',
@ -875,6 +877,8 @@ URL: [url]',
'mandatory_reviewers' => '必选校对人',
'mandatory_reviewer_no_access' => '必须的评审员\'[user]\'没有足够的访问权限',
'march' => '三 月',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => '最大上传文件大小',
'may' => '五 月',
'menu_dropfolder' => '删除文件夹',

View File

@ -234,6 +234,7 @@ URL: [url]',
'backup_tools' => '備份工具',
'batch_change_owner' => '',
'batch_new_owner_msg' => '',
'batch_operation' => '',
'batch_operation_result' => '',
'between' => '時間段',
'bg_BG' => '保加利亞語',
@ -313,6 +314,7 @@ URL: [url]',
'comment_changed_email' => '',
'comment_for_current_version' => '版本說明',
'configure_extension' => '配置擴充套件',
'confirm_change_owner' => '',
'confirm_clear_cache' => '您真的要清除緩存嗎?這將刪除所有預先計算的預覽圖像。',
'confirm_create_fulltext_index' => '確認已新增之全文索引',
'confirm_move_document' => '請確認移動文件。',
@ -892,6 +894,8 @@ URL: [url]',
'mandatory_reviewers' => '強制性審稿人',
'mandatory_reviewer_no_access' => '強制性審閱者\'[user] \'沒有足夠的訪問權限。',
'march' => '三 月',
'mark_document' => '',
'mark_folder' => '',
'max_upload_size' => '最大上傳文件大小',
'may' => '五 月',
'menu_dropfolder' => '下拉目錄',

View File

@ -367,10 +367,15 @@ if($settings->_libraryFolder) {
$docsource = 'library';
$fullfile = tempnam(sys_get_temp_dir(), '');
if(SeedDMS_Core_File::copyFile($dms->contentDir . $content->getPath(), $fullfile)) {
if($_POST["name"]!="") {
$oext = pathinfo($content->getOriginalFileName(), PATHINFO_EXTENSION);
$origfilename = getFilenameByDocname(trim($_POST['name'])).".".$oext;
} else
$origfilename = $content->getOriginalFileName();
$file_ary[] = array(
'tmp_name' => $fullfile,
'type' => $content->getMimeType(),
'name' => $content->getOriginalFileName(),
'name' => $origfilename,
'size' => $content->getFileSize(),
'error' => 0,
'source' => 'library',

View File

@ -74,6 +74,7 @@ if(isset($_GET['eventtype']) && $_GET['eventtype']) {
if($view) {
$view->setParam('accessobject', $accessop);
$view->setParam('conversionmgr', $conversionmgr);
$view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax
$view->setParam('calendar', $calendar);
$view->setParam('start', $start);
@ -90,6 +91,7 @@ if($view) {
$view->setParam('cachedir', $settings->_cacheDir);
$view->setParam('previewWidthList', $settings->_previewWidthList);
$view->setParam('previewWidthDetail', $settings->_previewWidthDetail);
$view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array());
$view->setParam('timeout', $settings->_cmdTimeout);
$view->setParam('accessobject', $accessop);
$view->setParam('xsendfile', $settings->_enableXsendfile);

View File

@ -97,7 +97,7 @@ if($fullsearch) {
if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) {
$pageNumber = (integer)$_GET["pg"];
}
else if (!strcasecmp($_GET["pg"], "all")) {
elseif (!strcasecmp($_GET["pg"], "all")) {
$pageNumber = "all";
}
}
@ -218,7 +218,7 @@ if($fullsearch) {
$dcount = isset($facets['record_type']['document']) ? $facets['record_type']['document'] : 0 ;
}
}
if($pageNumber != 'all' && $searchresult['count'] > $limit) {
if(/* $pageNumber != 'all' && */$searchresult['count'] > $limit) {
$totalPages = (int) ($searchresult['count']/$limit);
if($searchresult['count']%$limit)
$totalPages++;
@ -564,11 +564,12 @@ if($fullsearch) {
}
}
$totalPages = 1;
if ((!isset($_GET['action']) || $_GET['action'] != 'export') && (!isset($_GET["pg"]) || strcasecmp($_GET["pg"], "all"))) {
if ((!isset($_GET['action']) || $_GET['action'] != 'export') /*&& (!isset($_GET["pg"]) || strcasecmp($_GET["pg"], "all"))*/) {
$totalPages = (int) (count($entries)/$limit);
if(count($entries)%$limit)
$totalPages++;
$entries = array_slice($entries, ($pageNumber-1)*$limit, $limit);
if($pageNumber != 'all')
$entries = array_slice($entries, ($pageNumber-1)*$limit, $limit);
} else
$totalPages = 1;
$facets = array();

View File

@ -47,14 +47,15 @@ if(isset($_GET['documentid']) && $_GET['documentid'] && is_numeric($_GET['docume
if($document = $dms->getDocument($_GET["documentid"])) {
if(isset($_GET['version']) && $_GET['version'] && is_numeric($_GET['version'])) {
$content = $document->getContentByVersion($_GET['version']);
} else {
$content = $document->getLatestContent();
}
}
}
if($view) {
$view->setParam('dms', $dms);
$view->setParam('user', $user);
$view->setParam('accessobject', $accessop);
$view->setParam('conversionmgr', $conversionmgr);
$view->setParam('onepage', $settings->_onePageMode); // do most navigation by reloading areas of pages with ajax
$view->setParam('showtree', showtree());
$view->setParam('fromdate', isset($_GET['fromdate']) ? $_GET['fromdate'] : '');
@ -65,6 +66,7 @@ if($view) {
$view->setParam('cachedir', $settings->_cacheDir);
$view->setParam('previewWidthList', $settings->_previewWidthList);
$view->setParam('previewWidthDetail', $settings->_previewWidthDetail);
$view->setParam('previewConverters', isset($settings->_converters['preview']) ? $settings->_converters['preview'] : array());
$view->setParam('timeout', $settings->_cmdTimeout);
$view->setParam('accessobject', $accessop);
$view->setParam('xsendfile', $settings->_enableXsendfile);

View File

@ -414,16 +414,16 @@ 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'=>$this->params['settings']->_httpRoot."out/out.MyDocuments.php", 'label'=>'my_documents');
$menuitems['my_documents'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyDocuments.php", 'label'=>getMLText('my_documents'));
if ($accessobject->check_view_access('MyAccount'))
$menuitems['my_account'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyAccount.php", 'label'=>'my_account');
$menuitems['my_account'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyAccount.php", 'label'=>getMLText('my_account'));
if ($accessobject->check_view_access('TransmittalMgr'))
$menuitems['my_transmittals'] = array('link'=>$this->params['settings']->_httpRoot."out/out.TransmittalMgr.php", 'label'=>'my_transmittals');
$menuitems['my_transmittals'] = array('link'=>$this->params['settings']->_httpRoot."out/out.TransmittalMgr.php", 'label'=>getMLText('my_transmittals'));
if($this->hasHook('userMenuItems'))
$menuitems = $this->callHook('userMenuItems', $menuitems);
if($menuitems) {
foreach($menuitems as $menuitem) {
echo "<li><a href=\"".$menuitem['link']."\">".getMLText($menuitem['label'])."</a></li>";
echo "<li><a href=\"".$menuitem['link']."\">".$menuitem['label']."</a></li>";
}
echo " <li class=\"divider\"></li>\n";
}
@ -510,11 +510,11 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
echo " <ul class=\"nav\">\n";
$menuitems = array();
/* calendar {{{ */
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['enablecalendar'] && $accessobject->check_view_access('Calendar')) $menuitems['calendar'] = array('link'=>$this->params['settings']->_httpRoot.'out/out.Calendar.php?mode='.$this->params['calendardefaultview'], 'label'=>getMLText("calendar"));
if ($accessobject->check_view_access('AdminTools')) $menuitems['admintools'] = array('link'=>$this->params['settings']->_httpRoot.'out/out.AdminTools.php', 'label'=>getMLText("admin_tools"));
if($this->params['enablehelp']) {
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$menuitems['help'] = array('link'=>$this->params['settings']->_httpRoot.'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'=>getMLText("help"));
}
/* }}} End of calendar */
@ -524,14 +524,14 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
foreach($menuitems as $menuitem) {
if(!empty($menuitem['children'])) {
echo " <li class=\"dropdown\">\n";
echo " <a class=\"dropdown-toggle\" data-toggle=\"dropdown\">".getMLText($menuitem['label'])." <i class=\"fa fa-caret-down\"></i></a>\n";
echo " <a class=\"dropdown-toggle\" data-toggle=\"dropdown\">".$menuitem['label']." <i class=\"fa fa-caret-down\"></i></a>\n";
echo " <ul class=\"dropdown-menu\" role=\"menu\">\n";
foreach($menuitem['children'] as $submenuitem) {
echo " <li><a href=\"".$submenuitem['link']."\"".(isset($submenuitem['target']) ? ' target="'.$submenuitem['target'].'"' : '').">".getMLText($submenuitem['label'])."</a></li>\n";
echo " <li><a href=\"".$submenuitem['link']."\"".(isset($submenuitem['target']) ? ' target="'.$submenuitem['target'].'"' : '').">".$submenuitem['label']."</a></li>\n";
}
echo " </ul>\n";
} else {
echo "<li><a href=\"".$menuitem['link']."\"".(isset($menuitem['target']) ? ' target="'.$menuitem['target'].'"' : '').">".getMLText($menuitem['label'])."</a></li>";
echo "<li><a href=\"".$menuitem['link']."\"".(isset($menuitem['target']) ? ' target="'.$menuitem['target'].'"' : '').">".$menuitem['label']."</a></li>";
}
}
echo " </ul>\n";
@ -1110,7 +1110,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
echo "</div>\n";
} /* }}} */
function pageList($pageNumber, $totalPages, $baseURI, $params) { /* {{{ */
function pageList($pageNumber, $totalPages, $baseURI, $params, $dataparams=[]) { /* {{{ */
$maxpages = 25; // skip pages when more than this is shown
$range = 5; // pages left and right of current page
@ -1129,11 +1129,17 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
$first=false;
}
$datastr = '';
if($dataparams) {
$datastr .= ' ';
foreach($dataparams as $k=>$v)
$datastr .= 'data-'.$k.'="'.$v.'"';
}
echo "<div class=\"pagination pagination-small\">";
echo "<ul>";
if($totalPages <= $maxpages) {
for ($i = 1; $i <= $totalPages; $i++) {
echo "<li ".($i == $pageNumber ? 'class="active"' : "" )."><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".$i."\">".$i."</a></li>";
echo "<li ".($i == $pageNumber ? 'class="active"' : "" )."><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".$i."\" data-page=\"".$i."\"".$datastr.">".$i."</a></li>";
}
} else {
if($pageNumber-$range > 1)
@ -1153,21 +1159,21 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
$end -= $diff;
}
if($pageNumber > 1)
echo "<li><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".($pageNumber-1)."\">&laquo;</a></li>";
echo "<li ".(1 == $pageNumber ? 'class="active"' : "" )."><a href=\"".$resultsURI.($first ? "?" : "&")."pg=1\">1</a></li>";
echo "<li><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".($pageNumber-1)."\" data-page=\"".($pageNumber-1)."\"".$datastr.">&laquo;</a></li>";
echo "<li ".(1 == $pageNumber ? 'class="active"' : "" )."><a href=\"".$resultsURI.($first ? "?" : "&")."pg=1\" data-page=\"1\"".$datastr.">1</a></li>";
if($start > 2)
echo "<li><span>...</span></li>";
for($j=$start; $j<=$end; $j++)
echo "<li ".($j == $pageNumber ? 'class="active"' : "" )."><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".$j."\">".$j."</a></li>";
echo "<li ".($j == $pageNumber ? 'class="active"' : "" )."><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".$j."\" data-page=\"".$j."\"".$datastr.">".$j."</a></li>";
if($end < $totalPages-1)
echo "<li><span>...</span></li>";
if($end < $totalPages)
echo "<li ".($totalPages == $pageNumber ? 'class="active"' : "" )."><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".$totalPages."\">".$totalPages."</a></li>";
echo "<li ".($totalPages == $pageNumber ? 'class="active"' : "" )."><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".$totalPages."\" data-page=\"".$totalPages."\"".$datastr.">".$totalPages."</a></li>";
if($pageNumber < $totalPages)
echo "<li><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".($pageNumber+1)."\">&raquo;</a></li>";
echo "<li><a href=\"".$resultsURI.($first ? "?" : "&")."pg=".($pageNumber+1)."\" data-page=\"".($pageNumber+1)."\"".$datastr.">&raquo;</a></li>";
}
if ($totalPages>1) {
echo "<li><a href=\"".$resultsURI.($first ? "?" : "&")."pg=all\">".getMLText("all_pages")."</a></li>";
echo "<li ".(0 == $pageNumber ? 'class="active"' : "" )."><a href=\"".$resultsURI.($first ? "?" : "&")."pg=all\" data-page=\"all\"".$datastr.">".getMLText("all_pages")."</a></li>";
}
echo "</ul>";
echo "</div>";
@ -3891,7 +3897,7 @@ $(document).ready(function() {
*
* @param object $document document
*/
protected function printTimelineJs($timelineurl, $height=300, $start='', $end='', $skip=array()) { /* {{{ */
protected function printTimelineJs($timelineurl, $height=300, $start='', $end='', $skip=array(), $onselect="") { /* {{{ */
if(!$timelineurl)
return;
?>
@ -3918,21 +3924,16 @@ $(document).ready(function() {
'locale': '<?php echo $this->params['session']->getLanguage() ?>'
};
function onselect() {
var sel = timeline.getSelection();
if (sel.length) {
if (sel[0].row != undefined) {
var row = sel[0].row;
console.log(timeline.getItem(sel[0].row));
item = timeline.getItem(sel[0].row);
$('div.ajax').trigger('update', {documentid: item.docid, version: item.version, statusid: item.statusid, statuslogid: item.statuslogid, fileid: item.fileid});
}
}
}
$(document).ready(function () {
// Instantiate our timeline object.
timeline = new links.Timeline(document.getElementById('timeline'), options);
links.events.addListener(timeline, 'select', onselect);
<?php
if($onselect):
?>
links.events.addListener(timeline, 'select', <?= $onselect ?>);
<?php
endif;
?>
$.getJSON(
'<?php echo $timelineurl ?>',
function(data) {

View File

@ -43,6 +43,8 @@ class SeedDMS_View_Calendar extends SeedDMS_Theme_Style {
$event = $this->params['event'];
$strictformcheck = $this->params['strictformcheck'];
$cachedir = $this->params['cachedir'];
$conversionmgr = $this->params['conversionmgr'];
$previewconverters = $this->params['previewConverters'];
$previewwidthlist = $this->params['previewWidthList'];
$previewwidthdetail = $this->params['previewWidthDetail'];
$timeout = $this->params['timeout'];
@ -52,6 +54,10 @@ class SeedDMS_View_Calendar extends SeedDMS_Theme_Style {
print $this->folderListHeader();
print "<tbody>\n";
$previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidthdetail, $timeout, $xsendfile);
if($conversionmgr)
$previewer->setConversionMgr($conversionmgr);
else
$previewer->setConverters($previewconverters);
echo $this->documentListRow($document, $previewer);
echo "</tbody>\n</table>\n";
}
@ -125,6 +131,8 @@ class SeedDMS_View_Calendar extends SeedDMS_Theme_Style {
$dms = $this->params['dms'];
$start = explode('-', $this->params['start']);
$cachedir = $this->params['cachedir'];
$conversionmgr = $this->params['conversionmgr'];
$previewconverters = $this->params['previewConverters'];
$previewwidthlist = $this->params['previewWidthList'];
$previewwidthdetail = $this->params['previewWidthDetail'];
$timeout = $this->params['timeout'];
@ -146,6 +154,10 @@ class SeedDMS_View_Calendar extends SeedDMS_Theme_Style {
print "<th>".getMLText("action")."</th>\n";
print "</tr>\n</thead>\n<tbody>\n";
$previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidthdetail, $timeout, $xsendfile);
if($conversionmgr)
$previewer->setConversionMgr($conversionmgr);
else
$previewer->setConverters($previewconverters);
foreach($data as $i=>$item) {
/* Filter out timeline events for the documents not happened on the
* selected day

View File

@ -443,7 +443,7 @@ class SeedDMS_View_DocumentVersionDetail extends SeedDMS_Theme_Style {
case 0: // Approver is an individual.
$required = $dms->getUser($a["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_user")." '".$r["required"]."'";
$reqName = getMLText("unknown_user")." '".$a["required"]."'";
}
else {
$reqName = "<i class=\"fa fa-user\"></i> ".htmlspecialchars($required->getFullName()." (".$required->getLogin().")");
@ -452,7 +452,7 @@ class SeedDMS_View_DocumentVersionDetail extends SeedDMS_Theme_Style {
case 1: // Approver is a group.
$required = $dms->getGroup($a["required"]);
if (!is_object($required)) {
$reqName = getMLText("unknown_group")." '".$r["required"]."'";
$reqName = getMLText("unknown_group")." '".$a["required"]."'";
}
else {
$reqName = "<i class=\"fa fa-group\"></i> ".htmlspecialchars($required->getName());

View File

@ -75,6 +75,7 @@ $(document).ready( function() {
window.location.href = url;
});
/*
$('#changeowner').on('click', function(e) {
e.preventDefault();
var url = "";
@ -89,6 +90,70 @@ $(document).ready( function() {
url += '&'+$.param(values);
window.location.href = url;
});
*/
<?php if($this->getParam('theme') !== 'bootstrap4'): ?>
$('body').on('click', 'a.change-owner-btn', function(ev){
ev.preventDefault();
ev.stopPropagation();
confirmmsg = $(ev.currentTarget).attr('confirmmsg');
href = $(ev.currentTarget).attr('href');
bootbox.dialog(confirmmsg, [{
"label" : "<i class='fa fa-user'></i> <?= getMLText("batch_change_owner") ?>",
"class" : "btn-danger",
"callback": function() {
var url = "";
url = href+'&newowner='+($('#newowner').val());
var inputs = $('input[name^=\"marks\"]');
var values = {};
inputs.each(function() {
if(this.checked)
values[this.name] = 1;
});
url += '&'+$.param(values);
window.location.href = url;
}
}, {
"label" : "<?= getMLText("cancel") ?>",
"class" : "btn-cancel",
"callback": function() {
}
}]);
});
<?php else: ?>
$('body').on('click', 'a.change-owner-btn', function(ev){
ev.preventDefault();
ev.stopPropagation();
confirmmsg = $(ev.currentTarget).attr('confirmmsg');
href = $(ev.currentTarget).attr('href');
bootbox.confirm({
"message": confirmmsg,
"buttons": {
"confirm": {
"label" : "<i class='fa fa-user'></i> <?= getMLText("batch_change_owner") ?>",
"className" : "btn-danger",
},
"cancel": {
"label" : " <?= getMLText("cancel") ?>",
"className" : "btn-secondary",
}
},
"callback": function(result) {
if(result) {
var url = "";
url = href+'&newowner='+($('#newowner').val());
var inputs = $('input[name^=\"marks\"]');
var values = {};
inputs.each(function() {
if(this.checked)
values[this.name] = 1;
});
url += '&'+$.param(values);
window.location.href = url;
}
}
});
});
<?php endif; ?>
});
<?php
// $this->printFolderChooserJs("form1");
@ -940,9 +1005,13 @@ function typeahead() { /* {{{ */
'class'=>'chzn-select',
'options'=>$options,
'placeholder'=>getMLText('select_users'),
'attributes'=>array(array('style', 'width: 100%;'))
)
);
print $this->html_link('Search', array_merge($_GET, array('action'=>'changeowner')), array('class'=>'btn btn-primary', 'id'=>'changeowner'), "<i class=\"fa fa-user\"></i> ".getMLText("batch_change_owner"), false, true)."\n";
// print $this->html_link('Search', array_merge($_GET, array('action'=>'changeowner')), array('class'=>'btn btn-primary', 'id'=>'changeowner'), "<i class=\"fa fa-user\"></i> ".getMLText("batch_change_owner"), false, true)."\n";
print $this->html_link('Search', array_merge($_GET, array('action'=>'changeowner')), array('class'=>'btn btn-primary change-owner-btn mt-4', 'confirmmsg'=>htmlspecialchars(getMLText("confirm_change_owner", array ()), ENT_QUOTES)), "<i class=\"fa fa-user\"></i> ".getMLText("batch_change_owner"), false, true)."\n";
$content = ob_get_clean();
$this->printAccordion(getMLText('batch_change_owner'), $content);
}
@ -970,7 +1039,7 @@ function typeahead() { /* {{{ */
}
*/
echo $this->infoMsg(getMLText("search_report", array("count"=>$total, "doccount" => $totaldocs, "foldercount" => $totalfolders, 'searchtime'=>$searchTime)));
$this->pageList($pageNumber, $totalpages, "../out/out.Search.php", $urlparams);
$this->pageList((int) $pageNumber, $totalpages, "../out/out.Search.php", $urlparams);
// $this->contentContainerStart();
$txt = $this->callHook('searchListHeader', $orderby, 'asc');
@ -1086,7 +1155,7 @@ function typeahead() { /* {{{ */
else
print "</tbody></table>\n";
// $this->contentContainerEnd();
$this->pageList($pageNumber, $totalpages, "../out/out.Search.php", $_GET);
$this->pageList((int) $pageNumber, $totalpages, "../out/out.Search.php", $_GET);
} else {
$numResults = $totaldocs + $totalfolders;
if ($numResults == 0) {

View File

@ -176,9 +176,9 @@ class SeedDMS_View_Settings extends SeedDMS_Theme_Style {
<td><?= getMLText($title) ?></td>
<td>
<?php if($multiple) { ?>
<select class="form-control" name="<?= $name ?>[]" multiple>
<select class="chzn-select form-control" style="width: 100%;" name="<?= $name ?>[]" multiple>
<?php } else { ?>
<select class="form-control" name="<?= $name ?>">
<select class="chzn-select form-control" style="width: 100%;" name="<?= $name ?>">
<?php }
foreach($values as $i=>$value) {
$optval = trim($isass ? $i : $value);
@ -589,7 +589,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk))
case 'select':
if(!empty($conf['options'])) {
$selections = empty($settings->_extensions[$extname][$confkey]) ? array() : explode(",", $settings->_extensions[$extname][$confkey]);
echo "<select class=\"chzn-select\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "").">";
echo "<select class=\"chzn-select\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." style=\"width: 100%;\">";
foreach($conf['options'] as $key=>$opt) {
echo "<option value=\"".$key."\"";
if(in_array($key, $selections))
@ -604,7 +604,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk))
case "categories":
$categories = $dms->getDocumentCategories();
if($categories) {
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_category")."\">";
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_category")."\" style=\"width: 100%;\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($categories as $category) {
@ -619,7 +619,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk))
case "users":
$users = $dms->getAllUsers();
if($users) {
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_user")."\">";
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_user")."\" style=\"width: 100%;\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($users as $curuser) {
@ -634,7 +634,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk))
case "groups":
$recs = $dms->getAllGroups();
if($recs) {
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_group")."\">";
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_group")."\" style=\"width: 100%;\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($recs as $rec) {
@ -651,7 +651,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk))
$attrtype = empty($conf['attrtype']) ? 0 : $conf['attrtype'];
$recs = $dms->getAllAttributeDefinitions($objtype, $attrtype);
if($recs) {
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_attrdef")."\" data-no_results_text=\"".getMLText('unknown_attrdef')."\">";
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_attrdef")."\" data-no_results_text=\"".getMLText('unknown_attrdef')."\" style=\"width: 100%;\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($recs as $rec) {
@ -668,7 +668,7 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk))
case "workflows":
$recs = $dms->getAllWorkflows();
if($recs) {
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_attribute_value")."\">";
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_attribute_value")."\" style=\"width: 100%;\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($recs as $rec) {

View File

@ -41,6 +41,8 @@ class SeedDMS_View_Timeline extends SeedDMS_Theme_Style {
$document = $this->params['document'];
$version = $this->params['version'];
$cachedir = $this->params['cachedir'];
$conversionmgr = $this->params['conversionmgr'];
$previewconverters = $this->params['previewConverters'];
$previewwidthlist = $this->params['previewWidthList'];
$previewwidthdetail = $this->params['previewWidthDetail'];
$timeout = $this->params['timeout'];
@ -50,6 +52,10 @@ class SeedDMS_View_Timeline extends SeedDMS_Theme_Style {
print $this->folderListHeader();
print "<tbody>\n";
$previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidthdetail, $timeout, $xsendfile);
if($conversionmgr)
$previewer->setConversionMgr($conversionmgr);
else
$previewer->setConverters($previewconverters);
$extracontent = array();
$extracontent['below_title'] = $this->getListRowPath($document);
echo $this->documentListRow($document, $previewer, 0, false, $extracontent);
@ -158,10 +164,21 @@ $(document).ready(function () {
);
});
});
function onselect() {
var sel = timeline.getSelection();
if (sel.length) {
if (sel[0].row != undefined) {
var row = sel[0].row;
console.log(timeline.getItem(sel[0].row));
item = timeline.getItem(sel[0].row);
$('div.ajax').trigger('update', {documentid: item.docid, version: item.version, statusid: item.statusid, statuslogid: item.statuslogid, fileid: item.fileid});
}
}
}
<?php
$this->printDeleteDocumentButtonJs();
$timelineurl = 'out.Timeline.php?action=data&fromdate='.date('Y-m-d', $from).'&todate='.date('Y-m-d', $to).'&skip='.urldecode(http_build_query(array('skip'=>$skip)));
$this->printTimelineJs($timelineurl, 550, ''/*date('Y-m-d', $from)*/, ''/*date('Y-m-d', $to+1)*/, $skip);
$this->printTimelineJs($timelineurl, 550, ''/*date('Y-m-d', $from)*/, ''/*date('Y-m-d', $to+1)*/, $skip, 'onselect');
$this->printClickDocumentJs();
} /* }}} */

View File

@ -155,6 +155,8 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Theme_Style {
$cachedir = $this->params['cachedir'];
$conversionmgr = $this->params['conversionmgr'];
$previewconverters = $this->params['previewConverters'];
$previewwidthlist = $this->params['previewWidthList'];
$previewwidthdetail = $this->params['previewWidthDetail'];
$timeout = $this->params['timeout'];
$xsendfile = $this->params['xsendfile'];
$document = $this->params['document'];

View File

@ -337,11 +337,11 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
echo " <ul class=\"navbar-nav\">\n";
$menuitems = array();
/* calendar {{{ */
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 ($this->params['user']->isAdmin()) $menuitems['admintools'] = array('link'=>$this->params['settings']->_httpRoot.'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'=>getMLText("calendar"));
if ($accessobject->check_view_access('AdminTools')) $menuitems['admintools'] = array('link'=>$this->params['settings']->_httpRoot.'out/out.AdminTools.php', 'label'=>getMLText("admin_tools"));
if($this->params['enablehelp']) {
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$menuitems['help'] = array('link'=>$this->params['settings']->_httpRoot.'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'=>getMLText("help"));
}
/* }}} End of calendar */
@ -351,14 +351,14 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
foreach($menuitems as $menuitem) {
if(!empty($menuitem['children'])) {
echo " <li class=\"nav-item dropdown\">\n";
echo " <a class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\">".getMLText($menuitem['label'])."</a>\n";
echo " <a class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\">".$menuitem['label']."</a>\n";
echo " <div class=\"dropdown-menu dropdown-menu-left\">\n";
foreach($menuitem['children'] as $submenuitem) {
echo " <a class=\"dropdown-item\" href=\"".$submenuitem['link']."\"".(isset($submenuitem['target']) ? ' target="'.$submenuitem['target'].'"' : '').">".getMLText($submenuitem['label'])."</a>\n";
echo " <a class=\"dropdown-item\" href=\"".$submenuitem['link']."\"".(isset($submenuitem['target']) ? ' target="'.$submenuitem['target'].'"' : '').">".$submenuitem['label']."</a>\n";
}
echo " </div>\n";
} else {
echo "<li class=\"nav-item\"><a class=\"nav-link\" href=\"".$menuitem['link']."\"".(isset($menuitem['target']) ? ' target="'.$menuitem['target'].'"' : '').">".getMLText($menuitem['label'])."</a></li>";
echo "<li class=\"nav-item\"><a class=\"nav-link\" href=\"".$menuitem['link']."\"".(isset($menuitem['target']) ? ' target="'.$menuitem['target'].'"' : '').">".$menuitem['label']."</a></li>";
}
}
echo " </ul>\n";
@ -408,16 +408,16 @@ 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'=>$this->params['settings']->_httpRoot."out/out.MyDocuments.php?inProcess=1", 'label'=>'my_documents');
$menuitems['my_documents'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyDocuments.php?inProcess=1", 'label'=>getMLText('my_documents'));
if ($accessobject->check_view_access('MyAccount'))
$menuitems['my_account'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyAccount.php", 'label'=>'my_account');
$menuitems['my_account'] = array('link'=>$this->params['settings']->_httpRoot."out/out.MyAccount.php", 'label'=>getMLText('my_account'));
if ($accessobject->check_view_access('TransmittalMgr'))
$menuitems['my_transmittals'] = array('link'=>$this->params['settings']->_httpRoot."out/out.TransmittalMgr.php", 'label'=>'my_transmittals');
$menuitems['my_transmittals'] = array('link'=>$this->params['settings']->_httpRoot."out/out.TransmittalMgr.php", 'label'=>getMLText('my_transmittals'));
if($this->hasHook('userMenuItems'))
$menuitems = $this->callHook('userMenuItems', $menuitems);
if($menuitems) {
foreach($menuitems as $menuitem) {
echo " <a class=\"dropdown-item\" href=\"".$menuitem['link']."\">".getMLText($menuitem['label'])."</a>\n";
echo " <a class=\"dropdown-item\" href=\"".$menuitem['link']."\">".$menuitem['label']."</a>\n";
}
echo " <div class=\"dropdown-divider\"></div>\n";
}
@ -1010,7 +1010,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
} /* }}} */
function pageList($pageNumber, $totalPages, $baseURI, $params) { /* {{{ */
function pageList($pageNumber, $totalPages, $baseURI, $params, $dataparams=[]) { /* {{{ */
$maxpages = 25; // skip pages when more than this is shown
$range = 2; // pages left and right of current page
@ -1029,11 +1029,17 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
$first=false;
}
$datastr = '';
if($dataparams) {
$datastr .= ' ';
foreach($dataparams as $k=>$v)
$datastr .= 'data-'.$k.'="'.$v.'"';
}
echo "<nav aria-label=\"pagination\">";
echo "<ul class=\"pagination pagination-sm\">";
if($totalPages <= $maxpages) {
for ($i = 1; $i <= $totalPages; $i++) {
echo "<li class=\"page-item".($i == $pageNumber ? ' active' : "" )."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".$i."\">".$i."</a></li>";
echo "<li class=\"page-item".($i == $pageNumber ? ' active' : "" )."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".$i."\" data-page=\"".$i."\"".$datastr.">".$i."</a></li>";
}
} else {
if($pageNumber-$range > 1)
@ -1053,21 +1059,21 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
$end -= $diff;
}
// if($pageNumber > 1)
echo "<li class=\"page-item".($pageNumber == 1 ? " disabled" : "")."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".($pageNumber-1)."\">&laquo;</a></li>";
echo "<li class=\"page-item".(1 == $pageNumber ? ' active' : "" )."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=1\">1</a></li>";
echo "<li class=\"page-item".($pageNumber == 1 ? " disabled" : "")."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".($pageNumber-1)."\" data-page=\"".($pageNumber-1)."\"".$datastr.">&laquo;</a></li>";
echo "<li class=\"page-item".(1 == $pageNumber ? ' active' : "" )."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=1\" data-page=\"1\"".$datastr.">1</a></li>";
if($start > 2)
echo "<li class=\"page-item disabled\"><a class=\"page-link\">...</a></li>";
for($j=$start; $j<=$end; $j++)
echo "<li class=\"page-item".($j == $pageNumber ? ' active' : "" )."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".$j."\">".$j."</a></li>";
echo "<li class=\"page-item".($j == $pageNumber ? ' active' : "" )."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".$j."\" data-page=\"".$j."\"".$datastr.">".$j."</a></li>";
if($end < $totalPages-1)
echo "<li class=\"page-item disabled\"><a class=\"page-link\">...</a></li>";
if($end < $totalPages)
echo "<li class=\"page-item".($totalPages == $pageNumber ? ' active' : "" )."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".$totalPages."\">".$totalPages."</a></li>";
echo "<li class=\"page-item".($totalPages == $pageNumber ? ' active' : "" )."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".$totalPages."\" data-page=\"".$totalPages."\"".$datastr.">".$totalPages."</a></li>";
if($pageNumber < $totalPages)
echo "<li class=\"page-item\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".($pageNumber+1)."\">&raquo;</a></li>";
echo "<li class=\"page-item\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=".($pageNumber+1)."\" data-page=\"".($pageNumber+1)."\"".$datastr.">&raquo;</a></li>";
}
if ($totalPages>1) {
echo "<li class=\"page-item\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=all\">".getMLText("all_pages")."</a></li>";
echo "<li class=\"page-item".(0 == $pageNumber ? ' active' : "" )."\"><a class=\"page-link\" href=\"".$resultsURI.($first ? "?" : "&")."pg=all\" data-page=\"all\"".$datastr.">".getMLText("all_pages")."</a></li>";
}
echo "</ul>";
echo "</nav>";
@ -3846,7 +3852,7 @@ $(document).ready(function() {
*
* @param object $document document
*/
protected function printTimelineJs($timelineurl, $height=300, $start='', $end='', $skip=array()) { /* {{{ */
protected function printTimelineJs($timelineurl, $height=300, $start='', $end='', $skip=array(), $onselect="") { /* {{{ */
if(!$timelineurl)
return;
?>
@ -3873,21 +3879,16 @@ $(document).ready(function() {
'locale': '<?php echo $this->params['session']->getLanguage() ?>'
};
function onselect() {
var sel = timeline.getSelection();
if (sel.length) {
if (sel[0].row != undefined) {
var row = sel[0].row;
console.log(timeline.getItem(sel[0].row));
item = timeline.getItem(sel[0].row);
$('div.ajax').trigger('update', {documentid: item.docid, version: item.version, statusid: item.statusid, statuslogid: item.statuslogid, fileid: item.fileid});
}
}
}
$(document).ready(function () {
// Instantiate our timeline object.
timeline = new links.Timeline(document.getElementById('timeline'), options);
links.events.addListener(timeline, 'select', onselect);
<?php
if($onselect):
?>
links.events.addListener(timeline, 'select', <?= $onselect ?>);
<?php
endif;
?>
$.getJSON(
'<?php echo $timelineurl ?>',
function(data) {

View File

@ -62,7 +62,7 @@ function initMost() {
$(".chzn-select").select2({
theme: "bootstrap4",
width: '100%',
width: 'resolve',
templateResult: chzn_template_func//,
//templateSelection: chzn_template_func
});

2
webdav/.htaccess Normal file
View File

@ -0,0 +1,2 @@
RewriteEngine on
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]