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

This commit is contained in:
Uwe Steinmann 2025-12-01 16:50:09 +01:00
commit b5b2e82e25
12 changed files with 834 additions and 430 deletions

View File

@ -358,6 +358,9 @@
- use table for list of caches
- propper error msgs when saving extension configuration
- creating backup archives has been removed
- add javascript table sorter
- use table sorter on clear cache page and conversion services page
- droping an url in the drag&drop area will download the url
--------------------------------------------------------------------------------
Changes in version 5.1.42

View File

@ -242,6 +242,15 @@ module.exports = function (grunt) {
],
dest: bootstrapDir + '/editor.md',
flatten: false
},{
expand: true,
cwd: nodeDir + '/tablesort/dist/',
src: [
'tablesort.min.js',
'sorts/**'
],
dest: bootstrapDir + '/tablesort',
flatten: false
},{
expand: true,
src: [

View File

@ -71,7 +71,8 @@
"cache/memcached-adapter": "^1.2",
"symfony/console": "^7.2",
"twig/twig": "^3.0",
"league/commonmark": "^2.7"
"league/commonmark": "^2.7",
"symfony/process": "^7.3"
},
"require-dev": {
"composer/composer": "dev-main"

View File

@ -74,7 +74,8 @@
"cache/memcached-adapter": "^1.2",
"symfony/console": "^7.2",
"twig/twig": "^3.0",
"league/commonmark": "^2.7"
"league/commonmark": "^2.7",
"symfony/process": "^7.3"
},
"require-dev": {
"composer/composer": "dev-main",

View File

@ -793,6 +793,217 @@ switch($command) {
}
break; /* }}} */
case 'uploadremotedocument': /* {{{ */
if($user) {
if(checkFormKey('')) {
if (!isset($_POST["folderid"]) || !is_numeric($_POST["folderid"]) || intval($_POST["folderid"])<1) {
header('Content-Type: application/json');
echo json_encode(array('success'=>false, 'message'=>getMLText("invalid_folder_id")));
exit;
}
$folderid = $_POST["folderid"];
$folder = $dms->getFolder($folderid);
if (!is_object($folder)) {
header('Content-Type: application/json');
echo json_encode(array('success'=>false, 'message'=>getMLText("invalid_folder_id")));
exit;
}
if ($folder->getAccessMode($user, 'addDocument') < M_READWRITE) {
header('Content-Type: application/json');
echo json_encode(array('success'=>false, 'message'=>getMLText("access_denied")));
exit;
}
if($settings->_quota > 0) {
$remain = checkQuota($user);
if ($remain < 0) {
header('Content-Type: application/json');
echo json_encode(array('success'=>false, 'message'=>getMLText("quota_exceeded", array('bytes'=>SeedDMS_Core_File::format_filesize(abs($remain))))));
exit;
}
}
$fullfile = tempnam(sys_get_temp_dir(), '');
$fp = fopen($fullfile, 'w');
set_time_limit(0); // unlimited max execution time
$headers = [];
$options = array(
CURLOPT_FILE => $fp,
CURLOPT_TIMEOUT => 120,
CURLOPT_URL => $_POST['remoteurl'],
CURLOPT_HEADER => false,
CURLOPT_FOLLOWLOCATION => true,
);
$options[CURLOPT_HEADERFUNCTION] = function($curl, $header) use (&$headers) {
$len = strlen($header);
$header = explode(':', $header, 2);
if (count($header) < 2) // ignore invalid headers
return $len;
$headers[strtolower(trim($header[0]))][] = trim($header[1]);
return $len;
};
if($settings->_proxyUrl) {
$options[CURLOPT_PROXY] = $settings->_proxyUrl;
if($settings->_proxyUser) {
$options[CURLOPT_PROXYUSERPWD] = $settings->_proxyUser.':'.$settings->_proxyPassword;
}
}
$ch = curl_init();
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
fclose($fp);
$userfiletmp = $fullfile;
$userfilename = basename(urldecode($_POST['remoteurl']));
if (preg_match('/Content-Disposition:.*?filename="(.+?)"/', $headers['content-disposition'][0], $matches)) {
$userfilename = $matches[1];
}
$userfiletype = $headers['content-type'][0];
$fileType = ".".pathinfo($userfilename, PATHINFO_EXTENSION);
if($fileType == ".") {
$fileType = ".".SeedDMS_Core_File::fileExtension($userfiletype);
$userfilename .= ".".SeedDMS_Core_File::fileExtension($userfiletype);
}
//$finfo = finfo_open(FILEINFO_MIME_TYPE);
//finfo_file($finfo, $fullfile);
if (!empty($_POST["name"]))
$name = $_POST["name"];
else
$name = utf8_basename($userfilename);
/* Check if name already exists in the folder */
if(!$settings->_enableDuplicateDocNames) {
if($folder->hasDocumentByName($name)) {
header('Content-Type: application/json');
echo json_encode(array('success'=>false, 'message'=>getMLText("document_duplicate_name")));
exit;
}
}
if(isset($_POST["attributes"]))
$attributes = $_POST["attributes"];
else
$attributes = array();
if(isset($_POST["comment"]))
$comment = trim($_POST["comment"]);
else
$comment = '';
// Get the list of reviewers and approvers for this document.
$reviewers = array();
$approvers = array();
$reviewers["i"] = array();
$reviewers["g"] = array();
$approvers["i"] = array();
$approvers["g"] = array();
$workflow = null;
if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'traditional_only_approval') {
// add mandatory reviewers/approvers
if($settings->_workflowMode == 'traditional') {
$mreviewers = getMandatoryReviewers($folder, null, $user);
if($mreviewers['i'])
$reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']);
if($mreviewers['g'])
$reviewers['g'] = array_merge($reviewers['g'], $mreviewers['g']);
}
$mapprovers = getMandatoryApprovers($folder, null, $user);
if($mapprovers['i'])
$approvers['i'] = array_merge($approvers['i'], $mapprovers['i']);
if($mapprovers['g'])
$approvers['g'] = array_merge($approvers['g'], $mapprovers['g']);
} elseif($settings->_workflowMode == 'advanced') {
$workflow = $user->getMandatoryWorkflow();
}
$expires = false;
if($settings->_presetExpirationDate) {
$expires = strtotime($settings->_presetExpirationDate);
}
$keywords = isset($_POST["keywords"]) ? trim($_POST["keywords"]) : '';
$categories = isset($_POST["categories"]) ? $_POST["categories"] : null;
$cats = array();
if($categories) {
foreach($categories as $catid) {
if($cat = $dms->getDocumentCategory($catid))
$cats[] = $cat;
}
}
$controller = Controller::factory('AddDocument', array('dms'=>$dms, 'user'=>$user));
$controller->setParam('documentsource', 'upload');
$controller->setParam('folder', $folder);
$controller->setParam('fulltextservice', $fulltextservice);
$controller->setParam('name', $name);
$controller->setParam('comment', $comment);
$controller->setParam('expires', $expires);
$controller->setParam('keywords', $keywords);
$controller->setParam('categories', $cats);
$controller->setParam('owner', $user);
$controller->setParam('userfiletmp', $userfiletmp);
$controller->setParam('userfilename', $userfilename);
$controller->setParam('filetype', $fileType);
$controller->setParam('userfiletype', $userfiletype);
$minmax = $folder->getDocumentsMinMax();
$deviation = rand(10, 1000)/10;
if($settings->_defaultDocPosition == 'start')
$controller->setParam('sequence', $minmax['min'] - $deviation);
else
$controller->setParam('sequence', $minmax['max'] + $deviation);
$controller->setParam('reviewers', $reviewers);
$controller->setParam('approvers', $approvers);
$controller->setParam('reqversion', 1);
$controller->setParam('versioncomment', '');
$controller->setParam('attributes', $attributes);
$controller->setParam('attributesversion', array());
$controller->setParam('workflow', $workflow);
$controller->setParam('notificationgroups', array());
$controller->setParam('notificationusers', array());
$controller->setParam('maxsizeforfulltext', $settings->_maxSizeForFullText);
$controller->setParam('defaultaccessdocs', $settings->_defaultAccessDocs);
if(!$document = $controller()) {
$err = $controller->getErrorMsg();
if(is_string($err))
$errmsg = getMLText($err);
elseif(is_array($err)) {
$errmsg = getMLText($err[0], $err[1]);
} else {
$errmsg = $err;
}
header('Content-Type: application/json');
echo json_encode(array('success'=>false, 'message'=>$errmsg));
exit;
} else {
// Send notification to subscribers of folder.
if($notifier) {
$notifier->sendNewDocumentMail($document, $user);
}
}
header('Content-Type: application/json');
echo json_encode(array('success'=>true, 'message'=>getMLText('splash_document_updated'), 'data'=>$document->getID()));
add_log_line("updated document ".$document->getId());
} else {
header('Content-Type: application/json');
echo json_encode(array('success'=>false, 'message'=>getMLText('invalid_request_token'), 'data'=>''));
}
}
break; /* }}} */
case 'uploaddocument': /* {{{ */
if($user) {
if(checkFormKey('')) {

View File

@ -38,6 +38,7 @@
"popper.js": "^1.16.1",
"select2": "^4.0.13",
"spectrum-colorpicker2": "^2.0.10",
"tablesort": "^5.6.0",
"vis-timeline": "^7.4.7"
}
}

View File

@ -2077,7 +2077,8 @@ $(document).ready(function() {
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $targetfolder) {
$tmp[] = '<a href="'.$this->params['settings']->_httpRoot.'out/out.ViewFolder.php?folderid='.$targetfolder->getId().'">'.htmlspecialchars($targetfolder->getName()).'</a>';
if ($targetfolder)
$tmp[] = '<a href="'.$this->params['settings']->_httpRoot.'out/out.ViewFolder.php?folderid='.$targetfolder->getId().'">'.htmlspecialchars($targetfolder->getName()).'</a>';
}
return implode('<br />', $tmp);
break;
@ -2085,7 +2086,8 @@ $(document).ready(function() {
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $targetdoc) {
$tmp[] = '<a href="'.$this->params['settings']->_httpRoot.'out/out.ViewDocument.php?documentid='.$targetdoc->getId().'">'.htmlspecialchars($targetdoc->getName()).'</a>';
if ($targetdoc)
$tmp[] = '<a href="'.$this->params['settings']->_httpRoot.'out/out.ViewDocument.php?documentid='.$targetdoc->getId().'">'.htmlspecialchars($targetdoc->getName()).'</a>';
}
return implode('<br />', $tmp);
break;
@ -2093,7 +2095,8 @@ $(document).ready(function() {
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $curuser) {
$tmp[] = htmlspecialchars($curuser->getFullname()." (".$curuser->getLogin().")");
if ($curuser)
$tmp[] = htmlspecialchars($curuser->getFullname()." (".$curuser->getLogin().")");
}
return implode('<br />', $tmp);
break;
@ -2101,7 +2104,8 @@ $(document).ready(function() {
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $curgroup) {
$tmp[] = htmlspecialchars($curgroup->getName());
if ($curgroup)
$tmp[] = htmlspecialchars($curgroup->getName());
}
return implode('<br />', $tmp);
break;

View File

@ -13,11 +13,6 @@
* @version Release: @package_version@
*/
/**
* Include parent class
*/
//require_once("class.Bootstrap.php");
/**
* Class which outputs the html page for ClearCache view
*
@ -31,11 +26,18 @@
*/
class SeedDMS_View_ClearCache extends SeedDMS_Theme_Style {
function js() { /* {{{ */
header('Content-Type: application/javascript; charset=UTF-8');
?>
new Tablesort(document.getElementById('clearcachetable'));
<?php
} /* }}} */
protected function output($name, $title, $space, $c) {
echo '<tr><td><input type="checkbox" name="'.$name.'" value="1" checked></td>';
echo '<td>'.$title.'</td>';
echo '<td>'.($space !== NULL ? SeedDMS_Core_File::format_filesize($space) : '').'</td>';
echo '<td>'.($c !== NULL ? $c : '').'</td>';
echo '<td data-sort="'.((int) $space).'">'.($space !== NULL ? SeedDMS_Core_File::format_filesize($space) : '').'</td>';
echo '<td data-sort="'.((int) $c).'">'.($c !== NULL ? $c : '').'</td>';
echo '</tr>';
}
@ -44,6 +46,9 @@ class SeedDMS_View_ClearCache extends SeedDMS_Theme_Style {
$user = $this->params['user'];
$cachedir = $this->params['cachedir'];
$this->htmlAddHeader('<script type="text/javascript" src="../views/'.$this->theme.'/vendors/tablesort/tablesort.min.js"></script>'."\n", 'js');
$this->htmlAddHeader('<script type="text/javascript" src="../views/'.$this->theme.'/vendors/tablesort/sorts/tablesort.number.min.js"></script>'."\n", 'js');
$this->htmlStartPage(getMLText("admin_tools"));
$this->globalNavigation();
$this->contentStart();
@ -53,9 +58,9 @@ class SeedDMS_View_ClearCache extends SeedDMS_Theme_Style {
?>
<form action="../op/op.ClearCache.php" name="form1" method="post">
<?php echo createHiddenFieldWithKey('clearcache'); ?>
<table class="table table-sm table-condensed table-hover">
<table id="clearcachetable" class="table table-sm table-condensed table-hover">
<thead>
<tr><th></th><th>Cache</th><th>Size</th><th>Files</th></tr>
<tr><th data-sort-method="none"></th><th data-sort-method="none">Cache</th><th>Size</th><th>Files</th></tr>
</thead>
<tbody>
<?php

View File

@ -22,14 +22,21 @@
*/
class SeedDMS_View_ConversionServices extends SeedDMS_Theme_Style {
function js() { /* {{{ */
header('Content-Type: application/javascript; charset=UTF-8');
?>
new Tablesort(document.getElementById('servicetable'));
<?php
} /* }}} */
/**
* List all registered conversion services
*
*/
function list_conversion_services($allservices) { /* {{{ */
echo "<table class=\"table table-condensed table-sm\">\n";
echo "<table id=\"servicetable\" class=\"table table-condensed table-sm\">\n";
echo "<thead>";
echo "<tr><th>".getMLText('service_list_from')."</th><th>".getMLText('service_list_to')."</th><th>".getMLText('class_name')."</th><th>".getMLText('service_list_info')."</th></tr>\n";
echo "<tr><th>".getMLText('service_list_from')."</th><th>".getMLText('service_list_to')."</th><th>".getMLText('class_name')."</th><th data-sort-method=\"none\">".getMLText('service_list_info')."</th></tr>\n";
echo "</thead>";
echo "<tbody>";
foreach($allservices as $from=>$tos) {
@ -48,6 +55,9 @@ class SeedDMS_View_ConversionServices extends SeedDMS_Theme_Style {
$user = $this->params['user'];
$conversionmgr = $this->params['conversionmgr'];
$this->htmlAddHeader('<script type="text/javascript" src="../views/'.$this->theme.'/vendors/tablesort/tablesort.min.js"></script>'."\n", 'js');
$this->htmlAddHeader('<script type="text/javascript" src="../views/'.$this->theme.'/vendors/tablesort/sorts/tablesort.number.min.js"></script>'."\n", 'js');
$this->htmlStartPage(getMLText("admin_tools"));
$this->globalNavigation();
$this->contentStart();
@ -57,7 +67,7 @@ class SeedDMS_View_ConversionServices extends SeedDMS_Theme_Style {
$allservices = $conversionmgr->getServices();
if($data = $dms->getStatisticalData('docspermimetype')) {
$this->contentHeading(getMLText("list_conversion_overview"));
echo "<table class=\"table table-condensed table-sm\">\n";
echo "<table id=\"mimetypetable\" class=\"table table-condensed table-sm\">\n";
echo "<thead>";
echo "<tr><th>".getMLText('mimetype')."</th><th>".getMLText('preview')."</th><th>".getMLText('fullsearch')."</th><th>".getMLText('preview_pdf')."</th></tr>\n";
echo "</thead>";

View File

@ -767,7 +767,7 @@ $(document).ready( function() {
function onAddClipboard(ev) { /* {{{ */
ev.preventDefault();
var source_info = JSON.parse(ev.originalEvent.dataTransfer.getData("text"));
var source_info = JSON.parse(ev.originalEvent.dataTransfer.getData("text/json"));
source_type = source_info.type;
source_id = source_info.id;
formtoken = source_info.formtoken;
@ -1004,16 +1004,117 @@ function onAddClipboard(ev) { /* {{{ */
}
}
SeedDMSUpload.handleFileUpload = function(target_id, target_type, items,obj,statusbar) {
/* target is set for the quick upload area */
// var target_id = obj.data('target');
// var target_type = 'folder';
/* droptarget is set for folders and documents in lists */
// var droptarget = obj.data('droptarget');
// if(droptarget) {
// target_type = droptarget.split("_")[0];
// target_id = droptarget.split("_")[1];
// }
SeedDMSUpload.handleUrlUpload = function(target_id, target_type, url, obj, status, afteruploadfunc) {
if(target_type == 'folder' && target_id) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('folderid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('command', 'uploadremotedocument');
fd.append('remoteurl', url);
$.ajax({
url: ajaxurl,
type: "POST",
contentType: false,
dataType:"json",
processData: false,
cache: false,
data: fd,
success: function(data) {
if(data.success) {
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
// if(editBtnLabel)
// status.statusbar.after($('<a href="'+seeddms_webroot+'out/out.EditDocument.php?documentid=' + data.data + '" class="btn btn-mini btn-sm btn-primary">' + editBtnLabel + '</a>'));
if(afteruploadfunc) {
afteruploadfunc();
}
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
}
});
} else if(target_type == 'document' && target_id) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('documentid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('command', 'updateremotedocument');
fd.append('remoteurl', url);
} else if(target_type == 'attachment' && target_id) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('documentid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('command', 'addremotefile');
fd.append('remoteurl', url);
}
}
/* Upload a new file into a folder, as a new document version, or as
* a new attachment
*/
SeedDMSUpload.handleFileUpload = function(target_id, target_type, file, obj, statusbar, afteruploadfunc) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
if (target_type == "folder") {
fd.append('folderid', target_id);
fd.append('command', 'uploaddocument');
} else if (target_type == "document") {
fd.append('documentid', target_id);
fd.append('command', 'updatedocument');
} else if (target_type == "attachment") {
fd.append('documentid', target_id);
fd.append('command', 'addfile');
}
fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('comment') !== 'undefined') {
fd.append('comment', obj.data('comment'));
}
if (typeof obj.data('keywords') !== 'undefined') {
fd.append('keywords', obj.data('keywords'));
}
fd.append('userfile', file);
SeedDMSUpload.getFormData(fd, obj.data('attributes'), 'attributes');
SeedDMSUpload.getFormData(fd, obj.data('categories'), 'categories');
statusbar.parent().show();
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
}
/* Upload several files (of type FileSystemEntry) as new documents
* into a folder, or as attachments, or as a new document version.
* items may contain elements of type FileSystemFileEntry or
* FileSystemDirectoryEntry.
*/
SeedDMSUpload.handleFilesUpload = function(target_id, target_type, items, obj, statusbar) {
var afterupload = obj.data('afterupload');
if(afterupload) {
afteruploadfunc = eval(afterupload);
@ -1025,40 +1126,10 @@ function onAddClipboard(ev) { /* {{{ */
}
if(target_type == 'folder' && target_id) {
for (var i = 0; i < items.length; i++) {
var item = items[i]; //.webkitGetAsEntry();
var item = items[i];
if (item.isFile) {
item.file(function(file) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('folderid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('comment') !== 'undefined') {
fd.append('comment', obj.data('comment'));
}
if (typeof obj.data('keywords') !== 'undefined') {
fd.append('keywords', obj.data('keywords'));
}
fd.append('userfile', file);
fd.append('command', 'uploaddocument');
SeedDMSUpload.getFormData(fd, obj.data('attributes'), 'attributes');
SeedDMSUpload.getFormData(fd, obj.data('categories'), 'categories');
// fd.append('path', file.webkitRelativePath);
statusbar.parent().show();
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
SeedDMSUpload.handleFileUpload(target_id, target_type, file, obj, statusbar, afteruploadfunc);
});
} else if(item.isDirectory) {
var fd = new FormData();
@ -1074,7 +1145,7 @@ function onAddClipboard(ev) { /* {{{ */
// obj.data('afterupload', '()=>{}');
var dirReader = item.createReader();
dirReader.readEntries(function(entries) {
SeedDMSUpload.handleFileUpload(fid, 'folder', entries, obj, statusbar);
SeedDMSUpload.handleFilesUpload(fid, 'folder', entries, obj, statusbar);
});
}
/* Just reload the parent folder */
@ -1085,62 +1156,19 @@ function onAddClipboard(ev) { /* {{{ */
}
} else if(target_type == 'document' && target_id) {
for (var i = 0; i < items.length; i++) {
var item = items[i]; //.webkitGetAsEntry();
var item = items[i];
if (item.isFile) {
item.file(function(file) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('documentid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('userfile', file);
fd.append('command', 'updatedocument');
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status);
$("div.ajax[data-action='folderList']").trigger('update', {folderid: seeddms_folder});
} else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
SeedDMSUpload.handleFileUpload(target_id, target_type, file, obj, statusbar, afteruploadfunc);
});
}
}
} else if(target_type == 'attachment' && target_id) {
for (var i = 0; i < items.length; i++) {
var item = items[i]; //.webkitGetAsEntry();
var item = items[i];
if (item.isFile) {
item.file(function(file) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('documentid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('userfile', file);
fd.append('command', 'addfile');
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status, function(){
$("div.ajax[data-action='documentFiles']").trigger('update', {documentid: target_id});
});
} else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
SeedDMSUpload.handleFileUpload(target_id, target_type, file, obj, statusbar, function(){$("div.ajax[data-action='documentFiles']").trigger('update', {documentid: target_id});});
});
}
}
@ -1172,16 +1200,51 @@ $(document).ready(function() { /* {{{ */
target_type = attr_rel.split("_")[0];
target_id = attr_rel.split("_")[1];
var files = e.originalEvent.dataTransfer.files;
var afterupload = $(this).data('afterupload');
if(afterupload) {
afteruploadfunc = eval(afterupload);
} else {
afteruploadfunc = function() {
if(target_id == seeddms_folder)
$("div.ajax[data-action='folderList']").trigger('update', {folderid: seeddms_folder});
}
}
var items = e.originalEvent.dataTransfer.items;
//We need to send dropped files to Server
newitems = [];
newsysfiles = [];
newfile = null;
if(items.length > 0) {
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
/* Dropping an image from a web page will result in several items, containing
* the image as a file, the url with type text/uri-list and text/plain,
* the image tag with type text/html.
*/
for (const item of items) {
// console.log('kind: '+item.kind);
// console.log('type: '+item.type);
if (item.kind === "file" && item.webkitGetAsEntry()) {
newsysfiles.push(item.webkitGetAsEntry());
} else if (item.kind === "file" && (f = item.getAsFile())) {
newfile = f;
}
}
if (newsysfiles.length > 0) {
SeedDMSUpload.handleFilesUpload(target_id, target_type, newsysfiles, $(this), $(this));
} else if (newfile) {
SeedDMSUpload.handleFileUpload(target_id, target_type, newfile, $(this), $(this), afteruploadfunc);
} else {
/* Do a second iteration because getAsString() seems to be aysnc */
for (const item of items) {
if (item.kind === "string" && item.type === "text/uri-list") {
item.getAsString((s) => {
try {
url = new URL(s);
SeedDMSUpload.handleUrlUpload(target_id, target_type, url.href, $(this), null, afteruploadfunc);
} catch(e) {
}
});
}
}
}
SeedDMSUpload.handleFileUpload(target_id, target_type, newitems, $(this), $(this));
}
});
@ -1210,109 +1273,123 @@ $(document).ready(function() { /* {{{ */
files = e.originalEvent.dataTransfer.files;
items = e.originalEvent.dataTransfer.items;
if(target_type == 'folder') {
/* check for files, because items has an entry if no file was dropped */
if(files.length > 0) {
// console.log('Drop '+files.length+' files on '+target_type+' '+target_id);
newitems = [];
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
newitems = [];
for (const item of items) {
console.log('kind: '+item.kind);
console.log('type: '+item.type);
if (item.kind === "file" && item.webkitGetAsEntry()) {
newitems.push(item.webkitGetAsEntry());
} else if (item.kind === "file" && (f=item.getAsFile())) {
// newitems.push(f);
// console.log(f);
}
SeedDMSUpload.handleFileUpload(target_id, target_type, newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
}
if (newitems.length > 0) {
SeedDMSUpload.handleFilesUpload(target_id, target_type, newitems, $(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
} else {
/* The data is passed in dataTransfer. The items are meaning less. */
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type;
source_id = source_info.id;
formtoken = source_info.formtoken;
// console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id);
if(source_type == 'document') {
var bootbox_message = trans.confirm_move_document;
if(source_info.name)
bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
bootbox.dialog(bootbox_message, [{
"label" : "<i class='fa fa-remove'></i> "+trans.move_document,
"class" : "btn-danger",
"callback": function() {
$.get(seeddms_webroot+'op/op.Ajax.php',
{ command: 'movedocument', docid: source_id, targetfolderid: target_id, formtoken: formtoken },
function(data) {
if(data.success) {
$('#table-row-document-'+source_id).hide('slow');
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
},
'json'
);
}
}, {
"label" : trans.cancel,
"class" : "btn-cancel",
"callback": function() {
}
}]);
try {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text/json"));
source_type = source_info.type;
source_id = source_info.id;
formtoken = source_info.formtoken;
// console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id);
if(source_type == 'document') {
var bootbox_message = trans.confirm_move_document;
if(source_info.name)
bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
bootbox.dialog(bootbox_message, [{
"label" : "<i class='fa fa-remove'></i> "+trans.move_document,
"class" : "btn-danger",
"callback": function() {
$.get(seeddms_webroot+'op/op.Ajax.php',
{ command: 'movedocument', docid: source_id, targetfolderid: target_id, formtoken: formtoken },
function(data) {
if(data.success) {
$('#table-row-document-'+source_id).hide('slow');
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
},
'json'
);
}
}, {
"label" : trans.cancel,
"class" : "btn-cancel",
"callback": function() {
}
}]);
url = seeddms_webroot+"out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id;
// document.location = url;
} else if(source_type == 'folder' && source_id != target_id) {
var bootbox_message = trans.confirm_move_folder;
if(source_info.name)
bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
bootbox.dialog(bootbox_message, [{
"label" : "<i class='fa fa-arrow-right'></i> "+trans.move_folder,
"class" : "btn-danger",
"callback": function() {
$.get(seeddms_webroot+'op/op.Ajax.php',
{ command: 'movefolder', folderid: source_id, targetfolderid: target_id, formtoken: formtoken },
function(data) {
if(data.success) {
$('#table-row-folder-'+source_id).hide('slow');
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
},
'json'
);
}
}, {
"label" : trans.cancel,
"class" : "btn-cancel",
"callback": function() {
}
}]);
url = seeddms_webroot+"out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id;
// document.location = url;
} else if(source_type == 'folder' && source_id != target_id) {
var bootbox_message = trans.confirm_move_folder;
if(source_info.name)
bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
bootbox.dialog(bootbox_message, [{
"label" : "<i class='fa fa-arrow-right'></i> "+trans.move_folder,
"class" : "btn-danger",
"callback": function() {
$.get(seeddms_webroot+'op/op.Ajax.php',
{ command: 'movefolder', folderid: source_id, targetfolderid: target_id, formtoken: formtoken },
function(data) {
if(data.success) {
$('#table-row-folder-'+source_id).hide('slow');
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
},
'json'
);
}
}, {
"label" : trans.cancel,
"class" : "btn-cancel",
"callback": function() {
}
}]);
url = seeddms_webroot+"out/out.MoveFolder.php?folderid="+source_id+"&targetid="+target_id;
// document.location = url;
url = seeddms_webroot+"out/out.MoveFolder.php?folderid="+source_id+"&targetid="+target_id;
// document.location = url;
}
} catch(e) {
}
try {
url = new URL(e.originalEvent.dataTransfer.getData("text"));
console.log(url.href);
SeedDMSUpload.handleUrlUpload(target_id, target_type, url.href, $(e.currentTarget), $('div.statusbar-container h1'));
} catch(e) {
}
}
} else if(target_type == 'document') {
@ -1432,7 +1509,7 @@ $(document).ready(function() { /* {{{ */
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
}
SeedDMSUpload.handleFileUpload(target_id, target_type, newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
SeedDMSUpload.handleFilesUpload(target_id, target_type, newitems, $(e.currentTarget), $('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
}
}
});
@ -1459,7 +1536,7 @@ $(document).ready(function() { /* {{{ */
timeout: 3000
});
*/
e.originalEvent.dataTransfer.setData("text", JSON.stringify(dragStartInfo));
e.originalEvent.dataTransfer.setData("text/json", JSON.stringify(dragStartInfo));
});
$(document).on('dragstart', '.table-row-document', function (e) {
@ -1472,7 +1549,7 @@ $(document).ready(function() { /* {{{ */
formtoken : $(e.target).attr('formtoken'),
name: $(e.target).data('name')+''
};
e.originalEvent.dataTransfer.setData("text", JSON.stringify(dragStartInfo));
e.originalEvent.dataTransfer.setData("text/json", JSON.stringify(dragStartInfo));
});
/* Dropping item on alert below clipboard */
@ -1521,7 +1598,7 @@ $(document).ready(function() { /* {{{ */
$(e.target).parent().css('border', '1px solid white');
target_type = attr_rel.split("_")[0];
target_id = attr_rel.split("_")[1];
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text/json"));
source_type = source_info.type;
source_id = source_info.id;
formtoken = source_info.formtoken;

View File

@ -2021,7 +2021,8 @@ $(document).ready(function() {
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $targetfolder) {
$tmp[] = '<a href="'.$this->params['settings']->_httpRoot.'out/out.ViewFolder.php?folderid='.$targetfolder->getId().'">'.htmlspecialchars($targetfolder->getName()).'</a>';
if ($targetfolder)
$tmp[] = '<a href="'.$this->params['settings']->_httpRoot.'out/out.ViewFolder.php?folderid='.$targetfolder->getId().'">'.htmlspecialchars($targetfolder->getName()).'</a>';
}
return implode('<br />', $tmp);
break;
@ -2029,7 +2030,8 @@ $(document).ready(function() {
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $targetdoc) {
$tmp[] = '<a href="'.$this->params['settings']->_httpRoot.'out/out.ViewDocument.php?documentid='.$targetdoc->getId().'">'.htmlspecialchars($targetdoc->getName()).'</a>';
if ($targetdoc)
$tmp[] = '<a href="'.$this->params['settings']->_httpRoot.'out/out.ViewDocument.php?documentid='.$targetdoc->getId().'">'.htmlspecialchars($targetdoc->getName()).'</a>';
}
return implode('<br />', $tmp);
break;
@ -2037,7 +2039,8 @@ $(document).ready(function() {
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $curuser) {
$tmp[] = htmlspecialchars($curuser->getFullname()." (".$curuser->getLogin().")");
if ($curuser)
$tmp[] = htmlspecialchars($curuser->getFullname()." (".$curuser->getLogin().")");
}
return implode('<br />', $tmp);
break;
@ -2045,7 +2048,8 @@ $(document).ready(function() {
$attrs = $attribute->getValueAsArray();
$tmp = array();
foreach($attrs as $curgroup) {
$tmp[] = htmlspecialchars($curgroup->getName());
if ($curgroup)
$tmp[] = htmlspecialchars($curgroup->getName());
}
return implode('<br />', $tmp);
break;

View File

@ -117,6 +117,7 @@ function initMost() { /* {{{ */
$(".chzn-select-folder").select2({ /* {{{ */
theme: "bootstrap4",
width: 'resolve',
debug: false,
ajax: {
url: seeddms_webroot+"op/op.Ajax.php",
delay: 500,
@ -815,7 +816,7 @@ $(document).ready( function() {
function onAddClipboard(ev) { /* {{{ */
ev.preventDefault();
var source_info = JSON.parse(ev.originalEvent.dataTransfer.getData("text"));
var source_info = JSON.parse(ev.originalEvent.dataTransfer.getData("text/json"));
source_type = source_info.type;
source_id = source_info.id;
formtoken = source_info.formtoken;
@ -1052,16 +1053,117 @@ function onAddClipboard(ev) { /* {{{ */
}
}
SeedDMSUpload.handleFileUpload = function(target_id, target_type, items,obj,statusbar) {
/* target is set for the quick upload area */
// var target_id = obj.data('target');
// var target_type = 'folder';
/* droptarget is set for folders and documents in lists */
// var droptarget = obj.data('droptarget');
// if(droptarget) {
// target_type = droptarget.split("_")[0];
// target_id = droptarget.split("_")[1];
// }
SeedDMSUpload.handleUrlUpload = function(target_id, target_type, url, obj, status, afteruploadfunc) {
if(target_type == 'folder' && target_id) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('folderid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('command', 'uploadremotedocument');
fd.append('remoteurl', url);
$.ajax({
url: ajaxurl,
type: "POST",
contentType: false,
dataType:"json",
processData: false,
cache: false,
data: fd,
success: function(data) {
if(data.success) {
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
// if(editBtnLabel)
// status.statusbar.after($('<a href="'+seeddms_webroot+'out/out.EditDocument.php?documentid=' + data.data + '" class="btn btn-mini btn-sm btn-primary">' + editBtnLabel + '</a>'));
if(afteruploadfunc) {
afteruploadfunc();
}
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
}
});
} else if(target_type == 'document' && target_id) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('documentid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('command', 'updateremotedocument');
fd.append('remoteurl', url);
} else if(target_type == 'attachment' && target_id) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('documentid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('command', 'addremotefile');
fd.append('remoteurl', url);
}
}
/* Upload a new file into a folder, as a new document version, or as
* a new attachment
*/
SeedDMSUpload.handleFileUpload = function(target_id, target_type, file, obj, statusbar, afteruploadfunc) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
if (target_type == "folder") {
fd.append('folderid', target_id);
fd.append('command', 'uploaddocument');
} else if (target_type == "document") {
fd.append('documentid', target_id);
fd.append('command', 'updatedocument');
} else if (target_type == "attachment") {
fd.append('documentid', target_id);
fd.append('command', 'addfile');
}
fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('comment') !== 'undefined') {
fd.append('comment', obj.data('comment'));
}
if (typeof obj.data('keywords') !== 'undefined') {
fd.append('keywords', obj.data('keywords'));
}
fd.append('userfile', file);
SeedDMSUpload.getFormData(fd, obj.data('attributes'), 'attributes');
SeedDMSUpload.getFormData(fd, obj.data('categories'), 'categories');
statusbar.parent().show();
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
}
/* Upload several files (of type FileSystemEntry) as new documents
* into a folder, or as attachments, or as a new document version.
* items may contain elements of type FileSystemFileEntry or
* FileSystemDirectoryEntry.
*/
SeedDMSUpload.handleFilesUpload = function(target_id, target_type, items, obj, statusbar) {
var afterupload = obj.data('afterupload');
if(afterupload) {
afteruploadfunc = eval(afterupload);
@ -1073,40 +1175,10 @@ function onAddClipboard(ev) { /* {{{ */
}
if(target_type == 'folder' && target_id) {
for (var i = 0; i < items.length; i++) {
var item = items[i]; //.webkitGetAsEntry();
var item = items[i];
if (item.isFile) {
item.file(function(file) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('folderid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('comment') !== 'undefined') {
fd.append('comment', obj.data('comment'));
}
if (typeof obj.data('keywords') !== 'undefined') {
fd.append('keywords', obj.data('keywords'));
}
fd.append('userfile', file);
fd.append('command', 'uploaddocument');
SeedDMSUpload.getFormData(fd, obj.data('attributes'), 'attributes');
SeedDMSUpload.getFormData(fd, obj.data('categories'), 'categories');
// fd.append('path', file.webkitRelativePath);
statusbar.parent().show();
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
SeedDMSUpload.handleFileUpload(target_id, target_type, file, obj, statusbar, afteruploadfunc);
});
} else if(item.isDirectory) {
var fd = new FormData();
@ -1122,7 +1194,7 @@ function onAddClipboard(ev) { /* {{{ */
// obj.data('afterupload', '()=>{}');
var dirReader = item.createReader();
dirReader.readEntries(function(entries) {
SeedDMSUpload.handleFileUpload(fid, 'folder', entries, obj, statusbar);
SeedDMSUpload.handleFilesUpload(fid, 'folder', entries, obj, statusbar);
});
}
/* Just reload the parent folder */
@ -1133,62 +1205,19 @@ function onAddClipboard(ev) { /* {{{ */
}
} else if(target_type == 'document' && target_id) {
for (var i = 0; i < items.length; i++) {
var item = items[i]; //.webkitGetAsEntry();
var item = items[i];
if (item.isFile) {
item.file(function(file) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('documentid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('userfile', file);
fd.append('command', 'updatedocument');
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status);
$("div.ajax[data-action='folderList']").trigger('update', {folderid: seeddms_folder});
} else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
SeedDMSUpload.handleFileUpload(target_id, target_type, file, obj, statusbar, afteruploadfunc);
});
}
}
} else if(target_type == 'attachment' && target_id) {
for (var i = 0; i < items.length; i++) {
var item = items[i]; //.webkitGetAsEntry();
var item = items[i];
if (item.isFile) {
item.file(function(file) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('documentid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
fd.append('userfile', file);
fd.append('command', 'addfile');
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status, function(){
$("div.ajax[data-action='documentFiles']").trigger('update', {documentid: target_id});
});
} else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
SeedDMSUpload.handleFileUpload(target_id, target_type, file, obj, statusbar, function(){$("div.ajax[data-action='documentFiles']").trigger('update', {documentid: target_id});});
});
}
}
@ -1220,16 +1249,51 @@ $(document).ready(function() { /* {{{ */
target_type = attr_rel.split("_")[0];
target_id = attr_rel.split("_")[1];
var files = e.originalEvent.dataTransfer.files;
var afterupload = $(this).data('afterupload');
if(afterupload) {
afteruploadfunc = eval(afterupload);
} else {
afteruploadfunc = function() {
if(target_id == seeddms_folder)
$("div.ajax[data-action='folderList']").trigger('update', {folderid: seeddms_folder});
}
}
var items = e.originalEvent.dataTransfer.items;
//We need to send dropped files to Server
newitems = [];
newsysfiles = [];
newfile = null;
if(items.length > 0) {
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
/* Dropping an image from a web page will result in several items, containing
* the image as a file, the url with type text/uri-list and text/plain,
* the image tag with type text/html.
*/
for (const item of items) {
// console.log('kind: '+item.kind);
// console.log('type: '+item.type);
if (item.kind === "file" && item.webkitGetAsEntry()) {
newsysfiles.push(item.webkitGetAsEntry());
} else if (item.kind === "file" && (f = item.getAsFile())) {
newfile = f;
}
}
if (newsysfiles.length > 0) {
SeedDMSUpload.handleFilesUpload(target_id, target_type, newsysfiles, $(this), $(this));
} else if (newfile) {
SeedDMSUpload.handleFileUpload(target_id, target_type, newfile, $(this), $(this), afteruploadfunc);
} else {
/* Do a second iteration because getAsString() seems to be aysnc */
for (const item of items) {
if (item.kind === "string" && item.type === "text/uri-list") {
item.getAsString((s) => {
try {
url = new URL(s);
SeedDMSUpload.handleUrlUpload(target_id, target_type, url.href, $(this), null, afteruploadfunc);
} catch(e) {
}
});
}
}
}
SeedDMSUpload.handleFileUpload(target_id, target_type, newitems, $(this), $(this));
}
});
@ -1258,121 +1322,135 @@ $(document).ready(function() { /* {{{ */
files = e.originalEvent.dataTransfer.files;
items = e.originalEvent.dataTransfer.items;
if(target_type == 'folder') {
/* check for files, because items has an entry if no file was dropped */
if(files.length > 0) {
// console.log('Drop '+files.length+' files on '+target_type+' '+target_id);
newitems = [];
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
newitems = [];
for (const item of items) {
console.log('kind: '+item.kind);
console.log('type: '+item.type);
if (item.kind === "file" && item.webkitGetAsEntry()) {
newitems.push(item.webkitGetAsEntry());
} else if (item.kind === "file" && (f=item.getAsFile())) {
// newitems.push(f);
// console.log(f);
}
SeedDMSUpload.handleFileUpload(target_id, target_type, newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
}
if (newitems.length > 0) {
SeedDMSUpload.handleFilesUpload(target_id, target_type, newitems, $(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
} else {
/* The data is passed in dataTransfer. The items are meaning less. */
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type;
source_id = source_info.id;
formtoken = source_info.formtoken;
// console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id);
if(source_type == 'document') {
var bootbox_message = trans.confirm_move_document;
if(source_info.name)
bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
bootbox.dialog({
"message" : bootbox_message,
"buttons" : {
"cancel" : {
"label" : trans.cancel,
"className" : "btn-secondary",
"callback": function() {
}
},
"move" : {
"label" : "<i class='fa fa-remove'></i> "+trans.move_document,
"className" : "btn-danger",
"callback": function() {
$.get(seeddms_webroot+'op/op.Ajax.php',
{ command: 'movedocument', docid: source_id, targetfolderid: target_id, formtoken: formtoken },
function(data) {
if(data.success) {
$('#table-row-document-'+source_id).hide('slow');
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
},
'json'
);
try {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text/json"));
source_type = source_info.type;
source_id = source_info.id;
formtoken = source_info.formtoken;
// console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id);
if(source_type == 'document') {
var bootbox_message = trans.confirm_move_document;
if(source_info.name)
bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
bootbox.dialog({
"message" : bootbox_message,
"buttons" : {
"cancel" : {
"label" : trans.cancel,
"className" : "btn-secondary",
"callback": function() {
}
},
"move" : {
"label" : "<i class='fa fa-remove'></i> "+trans.move_document,
"className" : "btn-danger",
"callback": function() {
$.get(seeddms_webroot+'op/op.Ajax.php',
{ command: 'movedocument', docid: source_id, targetfolderid: target_id, formtoken: formtoken },
function(data) {
if(data.success) {
$('#table-row-document-'+source_id).hide('slow');
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
},
'json'
);
}
}
}
}
});
});
url = seeddms_webroot+"out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id;
// document.location = url;
} else if(source_type == 'folder' && source_id != target_id) {
var bootbox_message = trans.confirm_move_folder;
if(source_info.name)
bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
bootbox.dialog({
"message" : bootbox_message,
"buttons" : {
"cancel" : {
"label" : trans.cancel,
"className" : "btn-secondary",
"callback": function() {
}
},
"move" : {
"label" : "<i class='fa fa-arrow-right'></i> "+trans.move_folder,
"className" : "btn-danger",
"callback": function() {
$.get(seeddms_webroot+'op/op.Ajax.php',
{ command: 'movefolder', folderid: source_id, targetfolderid: target_id, formtoken: formtoken },
function(data) {
if(data.success) {
$('#table-row-folder-'+source_id).hide('slow');
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
},
'json'
);
url = seeddms_webroot+"out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id;
// document.location = url;
} else if(source_type == 'folder' && source_id != target_id) {
var bootbox_message = trans.confirm_move_folder;
if(source_info.name)
bootbox_message += "<p> "+escapeHtml(source_info.name)+' <i class="fa fa-arrow-right"></i> '+escapeHtml(target_name)+"</p>";
bootbox.dialog({
"message" : bootbox_message,
"buttons" : {
"cancel" : {
"label" : trans.cancel,
"className" : "btn-secondary",
"callback": function() {
}
},
"move" : {
"label" : "<i class='fa fa-arrow-right'></i> "+trans.move_folder,
"className" : "btn-danger",
"callback": function() {
$.get(seeddms_webroot+'op/op.Ajax.php',
{ command: 'movefolder', folderid: source_id, targetfolderid: target_id, formtoken: formtoken },
function(data) {
if(data.success) {
$('#table-row-folder-'+source_id).hide('slow');
noty({
text: data.message,
type: 'success',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 1500
});
} else {
noty({
text: data.message,
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 3500
});
}
},
'json'
);
}
}
}
}
});
});
url = seeddms_webroot+"out/out.MoveFolder.php?folderid="+source_id+"&targetid="+target_id;
// document.location = url;
url = seeddms_webroot+"out/out.MoveFolder.php?folderid="+source_id+"&targetid="+target_id;
// document.location = url;
}
} catch(e) {
}
try {
url = new URL(e.originalEvent.dataTransfer.getData("text"));
console.log(url.href);
SeedDMSUpload.handleUrlUpload(target_id, target_type, url.href, $(e.currentTarget), $('div.statusbar-container h1'));
} catch(e) {
}
}
} else if(target_type == 'document') {
@ -1406,14 +1484,14 @@ $(document).ready(function() { /* {{{ */
"label" : "<i class='fa fa-link'></i> "+trans.upload_new_version,
"className" : "btn-danger",
"callback": function() {
SeedDMSUpload.handleFileUpload(target_id, target_type, newitems,$(e.currentTarget),$('div.statusbar-container h1'));
SeedDMSUpload.handleFilesUpload(target_id, target_type, newitems,$(e.currentTarget),$('div.statusbar-container h1'));
}
}
}
});
}
} else {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text/json"));
source_type = source_info.type;
source_id = source_info.id;
formtoken = source_info.formtoken;
@ -1505,7 +1583,7 @@ $(document).ready(function() { /* {{{ */
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
}
SeedDMSUpload.handleFileUpload(target_id, target_type, newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
SeedDMSUpload.handleFilesUpload(target_id, target_type, newitems, $(e.currentTarget), $('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
}
}
});
@ -1532,7 +1610,7 @@ $(document).ready(function() { /* {{{ */
timeout: 3000
});
*/
e.originalEvent.dataTransfer.setData("text", JSON.stringify(dragStartInfo));
e.originalEvent.dataTransfer.setData("text/json", JSON.stringify(dragStartInfo));
});
$(document).on('dragstart', '.table-row-document', function (e) {
@ -1545,7 +1623,7 @@ $(document).ready(function() { /* {{{ */
formtoken : $(e.target).attr('formtoken'),
name: $(e.target).data('name')+''
};
e.originalEvent.dataTransfer.setData("text", JSON.stringify(dragStartInfo));
e.originalEvent.dataTransfer.setData("text/json", JSON.stringify(dragStartInfo));
});
/* Dropping item on alert below clipboard */
@ -1594,7 +1672,7 @@ $(document).ready(function() { /* {{{ */
$(e.target).parent().css('border', '1px solid white');
target_type = attr_rel.split("_")[0];
target_id = attr_rel.split("_")[1];
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text/json"));
source_type = source_info.type;
source_id = source_info.id;
formtoken = source_info.formtoken;