From 05e163a39d2b3925f11054c68ceb512bb9fd9fb8 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 31 Jan 2017 17:27:33 +0100 Subject: [PATCH] add support for fine uploader --- op/op.AddFile.php | 128 ++++++++++++++++-------------- views/bootstrap/class.AddFile.php | 116 +++++++++++++++++++-------- 2 files changed, 149 insertions(+), 95 deletions(-) diff --git a/op/op.AddFile.php b/op/op.AddFile.php index befaf9ddc..cb9641965 100644 --- a/op/op.AddFile.php +++ b/op/op.AddFile.php @@ -42,69 +42,75 @@ if ($document->getAccessMode($user) < M_READWRITE) { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied")); } -if (is_uploaded_file($_FILES["userfile"]["tmp_name"]) && $_FILES["userfile"]["size"] > 0 && $_FILES['userfile']['error']!=0){ - UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("uploading_failed")); -} - -$name = $_POST["name"]; -$comment = $_POST["comment"]; - -if($_FILES["userfile"]["error"]) { - UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_occured")); -} - -$userfiletmp = $_FILES["userfile"]["tmp_name"]; -$userfiletype = $_FILES["userfile"]["type"]; -$userfilename = $_FILES["userfile"]["name"]; - -$fileType = ".".pathinfo($userfilename, PATHINFO_EXTENSION); - -if($settings->_overrideMimeType) { - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $userfiletype = finfo_file($finfo, $userfiletmp); -} - -$res = $document->addDocumentFile($name, $comment, $user, $userfiletmp, - basename($userfilename),$fileType, $userfiletype ); - -if (is_bool($res) && !$res) { - UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_occured")); -} else { - // Send notification to subscribers. - if($notifier) { - $notifyList = $document->getNotifyList(); - -/* - $subject = "###SITENAME###: ".$document->getName()." - ".getMLText("new_file_email"); - $message = getMLText("new_file_email")."\r\n"; - $message .= - getMLText("name").": ".$name."\r\n". - getMLText("comment").": ".$comment."\r\n". - getMLText("user").": ".$user->getFullName()." <". $user->getEmail() .">\r\n". - "URL: ###URL_PREFIX###out/out.ViewDocument.php?documentid=".$document->getID()."\r\n"; - - $subject=$subject; - $message=$message; - - $notifier->toList($user, $document->_notifyList["users"], $subject, $message); - foreach ($document->_notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message); +if(isset($_POST['fineuploaderuuids']) && $_POST['fineuploaderuuids']) { + $uuids = explode(';', $_POST['fineuploaderuuids']); + $names = explode(';', $_POST['fineuploadernames']); + foreach($uuids as $i=>$uuid) { + $fullfile = $settings->_stagingDir.'/'.basename($uuid); + if(file_exists($fullfile)) { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mimetype = finfo_file($finfo, $fullfile); + $_FILES["userfile"]['tmp_name'][] = $fullfile; + $_FILES["userfile"]['type'][] = $mimetype; + $_FILES["userfile"]['name'][] = isset($names[$i]) ? $names[$i] : $uuid; + $_FILES["userfile"]['size'][] = filesize($fullfile); + $_FILES["userfile"]['error'][] = 0; } -*/ + } +} - $subject = "new_file_email_subject"; - $message = "new_file_email_body"; - $params = array(); - $params['name'] = $name; - $params['document'] = $document->getName(); - $params['username'] = $user->getFullName(); - $params['comment'] = $comment; - $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); - $params['sitename'] = $settings->_siteName; - $params['http_root'] = $settings->_httpRoot; - $notifier->toList($user, $notifyList["users"], $subject, $message, $params); - foreach ($notifyList["groups"] as $grp) { - $notifier->toGroup($user, $grp, $subject, $message, $params); +for ($file_num=0;$file_num $document->getName())),getMLText("uploading_zerosize")); + } + if (is_uploaded_file($_FILES["userfile"]["tmp_name"][$file_num]) && $_FILES['userfile']['error'][$file_num] != 0){ + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("uploading_failed")); + } + if($_FILES["userfile"]["error"][$file_num]) { + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); + } + + if(count($_FILES["userfile"]["tmp_name"]) == 1 && !empty($_POST['name'])) + $name = $_POST["name"]; + else + $name = $_FILES["userfile"]['name'][$file_num]; + $comment = $_POST["comment"]; + + $userfiletmp = $_FILES["userfile"]["tmp_name"][$file_num]; + $userfiletype = $_FILES["userfile"]["type"][$file_num]; + $userfilename = $_FILES["userfile"]["name"][$file_num]; + + $fileType = ".".pathinfo($userfilename, PATHINFO_EXTENSION); + + if($settings->_overrideMimeType) { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $userfiletype = finfo_file($finfo, $userfiletmp); + } + + $res = $document->addDocumentFile($name, $comment, $user, $userfiletmp, + basename($userfilename),$fileType, $userfiletype ); + + if (is_bool($res) && !$res) { + UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_occured")); + } else { + // Send notification to subscribers. + if($notifier) { + $notifyList = $document->getNotifyList(); + + $subject = "new_file_email_subject"; + $message = "new_file_email_body"; + $params = array(); + $params['name'] = $name; + $params['document'] = $document->getName(); + $params['username'] = $user->getFullName(); + $params['comment'] = $comment; + $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID(); + $params['sitename'] = $settings->_siteName; + $params['http_root'] = $settings->_httpRoot; + $notifier->toList($user, $notifyList["users"], $subject, $message, $params); + foreach ($notifyList["groups"] as $grp) { + $notifier->toGroup($user, $grp, $subject, $message, $params); + } } } } diff --git a/views/bootstrap/class.AddFile.php b/views/bootstrap/class.AddFile.php index 7811e15d5..8804ee128 100644 --- a/views/bootstrap/class.AddFile.php +++ b/views/bootstrap/class.AddFile.php @@ -32,40 +32,79 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_AddFile extends SeedDMS_Bootstrap_Style { function js() { /* {{{ */ + $enablelargefileupload = $this->params['enablelargefileupload']; + $partitionsize = $this->params['partitionsize']; header('Content-Type: application/javascript'); + if($enablelargefileupload) + $this->printFineUploaderJs('../op/op.UploadChunks.php', $partitionsize); ?> -function checkForm() -{ - msg = new Array(); - if ($("#userfile").val() == "") msg.push(""); - if ($("#name").val() == "") msg.push(""); -_strictFormCheck) && $settings->_strictFormCheck) { -?> - if ($("#comment").val() == "") msg.push(""); - - if (msg != "") - { - noty({ - text: msg.join('
'), - type: 'error', - dismissQueue: true, - layout: 'topRight', - theme: 'defaultTheme', - _timeout: 1500, - }); - return false; - } - else - return true; -} $(document).ready( function() { - $('body').on('submit', '#fileupload', function(ev){ - if(checkForm()) return; - ev.preventDefault(); + /* The fineuploader validation is actually checking all fields that can contain + * a file to be uploaded. First checks if an alternative input field is set, + * second loops through the list of scheduled uploads, checking if at least one + * file will be submitted. + */ + jQuery.validator.addMethod("fineuploader", function(value, element, params) { + uploader = params[0]; + arr = uploader.getUploads(); + for(var i in arr) { + if(arr[i].status == 'submitted') + return true; + } + return false; + }, ""); + $("#form1").validate({ + debug: false, + ignore: ":hidden:not(.do_validate)", + invalidHandler: function(e, validator) { + noty({ + text: (validator.numberOfInvalids() == 1) ? "".replace('#', validator.numberOfInvalids()) : "".replace('#', validator.numberOfInvalids()), + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500, + }); + }, + + submitHandler: function(form) { + manualuploader.uploadStoredFiles(); + }, + + rules: { + + fineuploaderuuids: { + fineuploader: [ manualuploader ] + } + + 'userfile[]': { + required: true + } + + }, + messages: { + name: "", + comment: "", + 'userfile[]': "" + }, + errorPlacement: function( error, element ) { + if ( element.is( ":file" ) ) { + error.appendTo( element.parent().parent().parent()); + } else { + error.appendTo( element.parent()); + } + } }); }); params['strictformcheck']; $enablelargefileupload = $this->params['enablelargefileupload']; + $this->htmlAddHeader(''."\n", 'js'); + if($enablelargefileupload) + $this->htmlAddHeader(''."\n", 'js'); + $this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName())))); $this->globalNavigation($folder); $this->contentStart(); @@ -89,7 +132,7 @@ $(document).ready( function() {
'.getMLText('link_alt_updatedocument').'

', "out.AddFile2.php?documentid=".$document->getId()); } ?> @@ -98,13 +141,18 @@ $(document).ready( function() { $this->contentContainerStart(); ?> -
+
- printFileChooser('userfile', false); ?> +printFineUploaderHtml(); + else + $this->printFileChooser('userfile[]', false); +?>
@@ -120,7 +168,7 @@ $(document).ready( function() {
- +