// function supportAjaxUploadWithProgress() { return supportFileAPI() && supportAjaxUploadProgressEvents() && supportFormData(); function supportFileAPI() { var fi = document.createElement('INPUT'); fi.type = 'file'; return 'files' in fi; }; function supportAjaxUploadProgressEvents() { var xhr = new XMLHttpRequest(); return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload)); }; function supportFormData() { return !! window.FormData; } } function getIframeContentJSON(iframe) { //IE may throw an "access is denied" error when attempting to access contentDocument on the iframe in some cases try { // iframe.contentWindow.document - for IE<7 var doc = iframe.contentDocument ? iframe.contentDocument : iframe.contentWindow.document; var response; var innerHTML = doc.body.innerHTML; //plain text response may be wrapped in
 tag
    if (innerHTML.slice(0, 5).toLowerCase() == "
" && innerHTML.slice(-6).toLowerCase() == "
") { innerHTML = doc.body.firstChild.firstChild.nodeValue; } response = jQuery.parseJSON(innerHTML); } catch(err) { response = {status: 'ERROR'}; } return response; } function updateProgressBar(data_progress, appendTo) { //console.log("Hier passiert was!"); if (updateProgressBar.progress == undefined) { updateProgressBar.progress = new Object(); if (typeof data_progress == "string") { // Element über ID = data_progress ermitteln updateProgressBar.progress.div = $('#' + data_progress); } else if (typeof data_progress == "object") { // Element wird als jQuery-Objekt übergeben updateProgressBar.progress.div = data_progress; } else { // Element komplett neu anlegen updateProgressBar.progress.div = $( '
' + '
Fortschritt:
' + '
' + '
' ); if (typeof appendTo == "object") { appendTo.append(updateProgressBar.progress.div); } } // Fortschrittsmeldung //updateProgressBar.progress.message = updateProgressBar.progress.div.find('div.message'); updateProgressBar.progress.message = updateProgressBar.progress.div.children('div:eq(0)'); // div.message updateProgressBar.progress.message_txt = updateProgressBar.progress.message.find('span'); // Fortschrittsbalken //updateProgressBar.progress.bar = updateProgressBar.progress.div.find('div.bar'); updateProgressBar.progress.bar = updateProgressBar.progress.div.children('div:eq(1)'); // div.bar updateProgressBar.progress.bar_txt = updateProgressBar.progress.bar.find('span'); updateProgressBar({ show: false, // [optional] Progress-Bereich komplett anzeigen/verstecken val: 0.0, // [optional] Progress-Wert als Zahl für Balken val_txt: "0 %", // [optional] Progress-Wert als Text für Anzeige im Balken message: "", // [optional] Fortschrittsmeldung message_error: false // [optional] Status des Fortschritts (true = Fehler, Fortschrittsmeldung wird rot angezeigt) }); // Gefundes/angelegtes Element zurückgeben return updateProgressBar.progress.div; } if (data_progress == undefined) { return; } if (data_progress.show != undefined && data_progress.show == false) { updateProgressBar.progress.div.hide(0); } // Fortschrittsbalken if (data_progress.val != undefined && data_progress.val_txt != undefined) { updateProgressBar.progress.bar.progressbar({value: data_progress.val}); updateProgressBar.progress.bar_txt.html(data_progress.val_txt); } // Fortschrittsmeldung if (data_progress.message != undefined) { updateProgressBar.progress.message_txt.html(data_progress.message); if (data_progress.message_error != undefined) { updateProgressBar.progress.message.toggleClass("txtError", data_progress.message_error); } } if (data_progress.show != undefined && data_progress.show == true) { updateProgressBar.progress.div.show(0); } } function uploadFinished(result) { if (result.status != undefined && result.status == "OK") { updateProgressBar({ val: 100, val_txt: "100 %", message: "Übertragung abgeschlossen", message_error: false }); } else { updateProgressBar({ message: "Übertragung fehlerhaft", message_error: true }); } setDialogButtons(dialog("dialog_upload"), "schliessen"); } function uploadError() { updateProgressBar({ message: "Übertragung fehlerhaft", message_error: true }); setDialogButtons(dialog("dialog_upload"), "schliessen"); } function uploadInterval(mode, intervalID) { if (mode == "start" && uploadInterval.intervalID == undefined && intervalID != undefined) { uploadInterval.intervalID = intervalID; return; } if (mode == "stop" && uploadInterval.intervalID != undefined && intervalID == undefined) { clearInterval(uploadInterval.intervalID); delete uploadInterval.intervalID; return; } // Gibt intervallID zurück, somit läuft dieses noch return uploadInterval.intervalID; } function uploadProgress(form_id) { console.log("form_id" + form_id); var data = new Array(); data.push({'name': $("#" + form_id).find("#upload_progress").attr("name"), 'value': $("#" + form_id).find("#upload_progress").val()}); $.ajax({ type: 'POST', url: '?fkt=upload_progress', dataType: 'json', data: data, success: function(data) { if (data != undefined && data != null && data.status != undefined) { if (data.status == "OK") { if (data.progress != undefined) { if (data.cancel != undefined && data.cancel == true) { // Interval für Fortschritt beenden, falls Übertragen abgebrochen wurde uploadInterval("stop"); $('#' + form_id).removeAttr("target"); $('#' + form_id + '_iframe').remove(); } // Fortschrittsangabe setzen updateProgressBar(data.progress); } else { // Interval für Fortschritt beenden, da Fehler uploadInterval("stop"); } } else { // status = ERROR, also Intervall beenden uploadInterval("stop"); } } else { // Interval für Fortschritt beenden, da Fehler uploadInterval("stop"); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { if (XMLHttpRequest.getAllResponseHeaders()) { // $.log.log('Loading: finished, error'); } else { // $.log.log('Loading: finished, cancel'); } // Interval für Fortschritt beenden, da Fehler uploadInterval("stop"); } }); } $(document).ready(function() { $('#preis').submit(function() { //wird anderweitig geprüft, kann erstmal ausgelassen werden if (checkUploadForm() == false) { // Formular enthält Fehler, also nicht absenden return false; } // Hier prüfen, ob IFrame oder FormData Dateiupload dialog("dialog_upload").data('supportAjaxUploadWithProgress', supportAjaxUploadWithProgress()); dialog("dialog_upload").dialog("open"); if (dialog("dialog_upload").data('supportAjaxUploadWithProgress') == true) { // FormData Dateiupload var data = new FormData(); for (var anzahl = 1; anzahl < 6; anzahl ++) { var input_file = $('#file_'+anzahl); var file_count = input_file.prop("files").length; //console.log("Datei "+ anzahl + ": "+file_count); for(var file_i = 0; file_i < file_count; file_i++) { data.append("dateien[]", input_file.prop("files")[file_i]); } } data.append("firma", $("#firma").val()); data.append("kundennummer", $("#kundennummer").val()); data.append("nachname", $("#nachname").val()); data.append("vorname", $("#vorname").val()); data.append("email", $("#email").val()); data.append("telefon", $("#telefon").val()); data.append("strasse", $("#strasse").val()); data.append("plz", $("#plz").val()); data.append("ort", $("#ort").val()); data.append("anzahl_beschaeftigte", $("#anzahl_beschaeftigte").val()); data.append("webseite", $("#webseite").val()); data.append("name", $("#name").val()); data.append("ziel", $("#ziel").val()); data.append("aktivitaeten", $("#aktivitaeten").val()); data.append("ergebnisse", $("#ergebnisse").val()); data.append("besonderheit", $("#besonderheit").val()); data.append("teilnahmebedingungen", $("#teilnahme").val()); data.append("datenschutz", $("#datenschutz").val()); $("input[name='aufmerksam[]']:checked").each(function() { data.append("aufmerksam[]", $(this).val()); }); data.append("typ", $("#typ").val()); data.append("kommentar", $("#kommentar").val()); var action = $('#preis').attr("action"); console.log("Action: "+action); dialog("dialog_upload").data('xhr', $.ajax({ url: action, data: data, type: "POST", dataType: "json", cache: false, contentType: false, processData: false, enctype: "multipart/form-data", xhr: function() { myXhr = $.ajaxSettings.xhr(); if (myXhr.upload) { myXhr.upload.addEventListener("progress", function(e) { if (e.lengthComputable) { // console.log("progress " + parseInt(e.loaded)); // console.log("progress " + parseInt(e.total)); // console.log("progress " + parseInt((e.loaded / e.total) * 100) + " %"); updateProgressBar({ val: parseInt((e.loaded / e.total) * 100), val_txt: "" + parseInt((e.loaded / e.total) * 100) + " %", message: "Übertragen …", message_error: false }); } }, false); } return myXhr; }, success: function(result) { // console.log("upload fertsch"); uploadFinished(result); }, error: function(jqXHR, textStatus) { // console.log("upload fehlerhaft"); uploadError(); return; } }) ); return false; } else { // IFrame Dateiupload // IE < 10 kann kein Ajax mit Upload, muss verstecktes Iframe sein // Formular ermitteln formular = $("#preis"); // IFrame für Upload erzeugen $('body').append(''); // Ziel des Formulars auf das IFrame verweisen formular.attr('target', formular.attr("id") + '_iframe'); // Load-Event an IFrame binden, und warten bis Upload fertig $('#' + formular.attr("id") + '_iframe').one("load", function(form_id) { return function() { var result = getIframeContentJSON($('#' + form_id + '_iframe')[0]); // Nach Laden des IFrames dieses wieder entfernen $('#' + form_id).removeAttr("target"); $('#' + form_id + '_iframe').remove(); // Ergebnis auswerten uploadFinished(result); }; }(formular.attr("id")) ); // Fortschritt zyklisch abrufen lassen uploadInterval("start", setInterval( function(form_id) { return function() { uploadProgress(form_id); }; }(formular.attr("id")), 2 * 1000 // 2 sec )); return true; } }); }); function checkUploadForm() { var error = new Array(); var files = $("input[name='dateien[]']"); files.each(function(index, file) { if (file.value == "") { //error.push("Bitte wählen Sie eine Datei aus, die hochgeladen werden soll."); } else { if (supportAjaxUploadWithProgress() && file.files[0].size > $(file).parent().find('input[name=MAX_FILE_SIZE]').val()) { // Moderne Browser können mit JS die Dateigröße bestimmen error.push("Die ausgewählte Datei ist gößer als die maximale Dateigröße. Bitte wählen Sie eine andere Datei."); } } }); var err_len = error.length if (err_len > 0) { var error_html = ""; for (err_i = 0; err_i < err_len; err_i++) { error_html += "

" + error[err_i] + "

"; } dialog("dialog_error").html(error_html).dialog("open"); return false; } return true; } function dialog(id) { //console.log("irgendwas"); if (dialog.dialoge == undefined) { dialog.dialoge = new Object(); } if (dialog.dialoge[id] == undefined) { var funct = "dialogInit_" + id; if (typeof window[funct] === "function") { var funct_args = new Array(); funct_args.push(id); dialog.dialoge[id] = window[funct].apply(null, funct_args); } } return dialog.dialoge[id]; } function dialogInit_dialog_error(id) { return $('
') .dialog({ autoOpen: false, modal: true, resizable: false, width: 700, title: "Fehler", maxHeight: $(window).height(), open: function() { $(this).dialog('option', 'maxHeight', $(window).height()); }, buttons: [ { text: "OK", click: function() { $(this).dialog("close"); } } ] }); } function validEmailNewTLDs(email) { // TopLevelDomains mit mehr als 2 Zeichen zugelassen var strReg = "^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,}){1}$"; var regex = new RegExp(strReg); return(regex.test(email)); } // Upload Dialog function dialogInit_dialog_upload(id) { return $('
') .dialog({ autoOpen: false, modal: true, resizable: false, width:700, create: function() { // Fortschrittsbalken im Dialog aufnehmen updateProgressBar(undefined, $(this)); }, open: function(event, ui) { // Buttons setzen setDialogButtons($(this), "abbrechen"); // Fortschrittsbalken mit 0% anzeigen updateProgressBar({ show: true, val: 0, val_txt: "0 %", message: "", message_error: false }); }, // beforeClose: function(event, ui) { // }, close: function(event, ui) { if ($(this).data('supportAjaxUploadWithProgress') == true) { // FormData Dateiupload if($(this).data('xhr') && $(this).data('xhr').readyState != 4) { $(this).data('xhr').abort(); } } else { // IFrame Dateiupload if (uploadInterval("get") != undefined) { // console.log("cancel upload"); $.ajax({ type: 'POST', url: '?fkt=upload_cancel', dataType: 'json', data: $('#preis').serializeArray(), success: function(data){ if (data != undefined && data != null && data.error != undefined && data.error == "OK") { // Abbruch ausgelöst, angezeigt durch progress interval } else { } }, error: function(XMLHttpRequest, textStatus, errorThrown) { if (XMLHttpRequest.getAllResponseHeaders()) { } else { } // Fehler beim Versuch des Abbuchs des Uploads, also auch hier das Interval beenden uploadInterval("stop"); } }); } } }, buttons: [ { text: "Übertragung abbrechen", click: function(event, ui) { if ($(this).data('supportAjaxUploadWithProgress') == true) { // FormData Dateiupload if($(this).data('xhr') && $(this).data('xhr').readyState != 4) { $(this).data('xhr').abort(); } } else { // IFrame Dateiupload if (uploadInterval("get") != undefined) { // console.log("cancel upload"); $.ajax({ type: 'POST', url: '?fkt=upload_cancel', dataType: 'json', data: $('#preis').serializeArray(), success: function(data){ if (data != undefined && data != null && data.error != undefined && data.error == "OK") { // Abbruch ausgelöst, angezeigt durch progress interval } else { } }, error: function(XMLHttpRequest, textStatus, errorThrown) { if (XMLHttpRequest.getAllResponseHeaders()) { } else { } // Fehler beim Versuch des Abbuchs des Uploads, also auch hier das Interval beenden uploadInterval("stop"); } }); } } updateProgressBar({ message: "Übertragung abgebrochen", message_error: true }); // Buttons setzen $(this).siblings(".ui-dialog-buttonpane").find('.ui-dialog-buttonset button:eq(0)').hide(0); // Übertragung abbrechen $(this).siblings(".ui-dialog-buttonpane").find('.ui-dialog-buttonset button:eq(1)').show(0); // Schließen } }, { text: "Schließen", click: function() { $(this).dialog("close"); /* $("#preis").each(function(){ this.reset(); }); */ $("#preis").trigger("reset"); $("#preis").hide(); $("#erfolg").show(); //$("#empf_1").prop('disabled', false); } } ] }); } function setDialogButtons(dialog, button) { if (button == "abbrechen") { // console.log("setDialogButtons " + button); dialog.siblings(".ui-dialog-buttonpane").find('.ui-dialog-buttonset button:eq(0)').show(0); // Übertragung abbrechen dialog.siblings(".ui-dialog-buttonpane").find('.ui-dialog-buttonset button:eq(1)').hide(0); // Schließen } else if (button == "schliessen") { // console.log("setDialogButtons " + button); dialog.siblings(".ui-dialog-buttonpane").find('.ui-dialog-buttonset button:eq(0)').hide(0); // Übertragung abbrechen dialog.siblings(".ui-dialog-buttonpane").find('.ui-dialog-buttonset button:eq(1)').show(0); // Schließen } }