Files
Facilitor/APPL/Shared/UploadForm_save.asp
Jos Groot Lipman fcbac73ae0 FSN#41529 Upload mogelijkheid voor xxxx.xsl
svn path=/Website/trunk/; revision=34844
2017-08-07 11:21:10 +00:00

400 lines
15 KiB
Plaintext

<%@ LANGUAGE = JavaScript %>
<% /*
$Revision$
$Id$
File: upploadform_save.asp
Description: Opvangscript van uploadform.asp
Parameters:
extfilter extensie filter
pkey ALG_RUIMTE_KEY of ...
pModule "ALG" of ...
pKenmerk_key ALG_KENMERK_KEY of ...
Context: Vanuit uploadform.asp
Note: Na submit sluiten we onzelf
Met TAMPER bescherming!
*/
if (Server.ScriptTimeout < 600) Server.ScriptTimeout = 600; // 10 minuten moet echt genoeg zijn
var pKey = getQParamInt("key", -1);
var pModule = getQParamSafe("module");
var pNiveau = getQParamSafe("niveau", "");
if (pModule == "MLD" && pNiveau == "M")
var LOCKED_USER_OK = { "xmlnode": "melding", "key": pKey };
else if (pModule == "MLD" && pNiveau == "O")
var LOCKED_USER_OK = { "xmlnode": "opdracht", "key": pKey };
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="./flexfiles.inc" -->
<!-- #include file="../Shared/upload.inc" -->
<!-- #include file='../cad/cad_scan_dwf.inc' -->
<!-- #include file="../Shared/json2.js" -->
<%
protectQS.verify(); // tamper check
FCLTHeader.Requires({ plugins:["jQuery"]
});
var pKenmerk_key = getQParamInt("kenmerk_key", -1);
var pAlgLevel = getQParam("kenmerk_module", "");
var params = flexProps(pModule, pKey, String(pKenmerk_key), pNiveau, {alglevel: pAlgLevel});
var doEncrypt = (params.encrypt? 1 : 0);
var regFilter = null;
if (params.extFilter)
{
// extFilter="pdf,tiff" of "pdf tiff" of "pdf;tiff"
regFilter = params.extFilter;
regFilter = regFilter.replace(/( |,|;)/g,"|"); // Altijd | karakter
regFilter = ".*\\." + "(" + regFilter + ")$"; // er moet een punt voor en extensie is aan het einde
}
var fso = Server.CreateObject("Scripting.FileSystemObject")
%>
<html>
<head>
<% FCLTHeader.Generate();
__Log("Opslaan onder: " + params.AttachPath);
var found_files = [];
var found_fields = {};
function iso8601Date(jsDate)
{
var str = padout(jsDate.getFullYear())
+ padout(jsDate.getMonth() + 1)
+ padout(jsDate.getDate())
+ "T"
+ padout(jsDate.getHours())
+ padout(jsDate.getMinutes())
+ padout(jsDate.getSeconds());
return str;
}
function js_add_file(name, data, contenttype, counter)
{
var safename = safe.filename(name.split("\\")[name.split("\\").length - 1]); // eventuele padnaam eraf
__Log("Upload file: " + name + " is safe: " + safename);
// iPad/IPhone uploaden directe foto altijd als 'Image.jpg' wat erg lastig is
if (safename.match(/image.jpg/i) || safename.match(/image.jpeg/i) || safename.match(/image.png/i))
{
// Bij gelijktijdig uploaden van bestanden is een timestamp op seconde niet toereikend.
// We doen de teller er ook nog maar bij.
var ext = safename.split(".")[safename.split(".").length - 1];
safename = "Image_{0}{1}.{2}".format(iso8601Date(new Date), counter>0?"_" + counter:"", ext);
__Log("-->Ios: " + safename);
}
found_files.push({ name: safename, data: data, contenttype: contenttype});
}
function js_add_field(name, data)
{
found_fields[name] = data;
}
function check_filename(pinfo)
{
var filename = safe.filename(pinfo.name);
var msg = "";
if (filename == "" || pinfo.data == "")
{
msg = "Empty file or name?";
}
else if (regFilter && (!new RegExp(regFilter, "ig").test(filename)))
{
msg = L("lcl_shared_file_ext_invalid_start") + params.extFilter + L("lcl_shared_file_ext_invalid_end");
}
else if (!new RegExp(S("flexAllowedExt"), "ig").test(filename))
{
msg = L("lcl_shared_file_ext_not_allowed");
}
return (msg ? " (" + filename +": " + msg + ")" : "");
}
var VB_result = VB_getfiles();
var result = { message: VB_result("message") || "",
safefilename: []
};
//__Log(found_fields);
//__Log(found_files);
if (!result.message) // dikke kans dat dan het token er ook niet is
{
protectRequest.validateToken(found_fields["__RequestVerificationToken"]);
// Obscuur: hier geen 'i' gebruiken omdat upload.inc/ getString die ook al gebruikt
// Je krijgt daar dan 'Illegal Assignment', ik verzin het niet
for (var j = 0; j < found_files.length; j++)
{
var finfo = found_files[j];
var safefilename = safe.filename(finfo.name);
var msg = check_filename(finfo);
if (msg == "")
{
result.safefilename.push(safefilename);
if (doEncrypt) // Wordt (nog) niet gebruikt.
{
var oZip = Server.CreateObject("SLNKDWF.Zip");
oZip.Open(fullpath + safefilename + ".encrypted");
oZip.EncryptFromString(safefilename, finfo.data);
}
else
{
var BinaryStream = Server.CreateObject("ADODB.Stream");
BinaryStream.Type = 1; // adTypeBinary
BinaryStream.Open();
try
{
BinaryStream.Write(finfo.data);
// Save binary data To disk
__Log("Saving to: " + params.AttachPath + safefilename);
CreateFullPath(params.AttachPath);
if (params.keephistory && fso.FileExists(params.AttachPath + safefilename))
{
var jsDate = new Date();
var backupTime = String(jsDate.getFullYear()) + padout(jsDate.getMonth() + 1) + padout(jsDate.getDate()) + "_"
+ padout(jsDate.getHours()) + padout(jsDate.getMinutes())+ padout(jsDate.getSeconds());
// backupTime vlak voor de extensie plakken
var backupName = safefilename.replace(/(\.[a-z]*)$/i, "_" + backupTime + "$1");
fso.MoveFile(params.AttachPath + safefilename, params.AttachPath + backupName);
__DoLog("Replaced {0}, previous version in {1}".format(params.AttachPath + safefilename, backupName));
}
BinaryStream.SaveToFile(params.AttachPath + safefilename, 2); // adSaveCreateOverWrite
}
catch(e)
{
result.message += "Saving {0} failed: {1} ".format(safefilename, e.description);
__DoLog("Saving to {0} failed: {1}".format(params.AttachPath + safefilename, e.description), "#f0f");
}
}
}
else
result.message += msg;
}
//__Log(result);
// Toevoegen bijlage/bestand tracken.
if (pKey > -1 && params.trackcode && (params.kenmerktype == "E" || params.kenmerktype == "F" || params.kenmerktype == "M"))
{
if (pModule == "BEZ")
{ // Voor afpraken heb ik de afspraak key nodig i.p.v. de bezoekerskey om de kenmerk omschrijving te bepalen.
var sql = "SELECT bez_afspraak_key"
+ " FROM bez_bezoekers"
+ " WHERE bez_bezoekers_key = " + pKey;
oRs = Oracle.Execute(sql);
var afspr_key = oRs("bez_afspraak_key").Value;
oRs.close();
pKey = String(afspr_key);
}
for (j=0; j<result.safefilename.length; j++)
{
ptxt = L("lcl_shared_attachment_add").format(params.kenmerkoms, result.safefilename[j]);
shared.trackaction(params.trackcode, pKey, ptxt);
}
}
}
if (!result.message && params.forcesingle)
{ // Er mag maar 1 bestand bestaan.
// Verwijder alle andere bestanden.
if (result.safefilename.length>1)
{
result.message += L("lcl_shared_upload_toomany");
}
else
{
var f = fso.GetFolder(params.AttachPath);
for (fc = new Enumerator(f.files); !fc.atEnd(); fc.moveNext())
{
var vFileName = fc.item().Name;
if (vFileName != result.safefilename[0])
{
__Log("Autodelete: " + params.AttachPath + vFileName)
DeleteFile(params.AttachPath + vFileName);
}
}
}
}
if (result.message && result.message != "")
{
result.message = L("lcl_shared_upload_error_start") + result.message + L("lcl_shared_upload_error_end");
}
else
{
checkWebconfig(params.AttachRootPath);
for (j=0; j<result.safefilename.length; j++)
{
result_safefilename = result.safefilename[j];
// Eerst Resize/crop
if (params.regexp && result_safefilename.match(/\.(png|jpg|jpeg)$/i))
{
var Format = params.regexp.match(/^([RrCc])(\d*)x(\d*)$/i); // P800x600
if (Format && Format.length == 4)
{
var oIMG = new ActiveXObject("SLNKDWF.ImageConvert");
try
{
oIMG.Open(params.AttachPath + result_safefilename);
}
catch(e)
{
result.message = L("lcl_shared_thumbnail_error") + e.description;
// Gewoon opruimen
DeleteFile(params.AttachPath + result_safefilename);
}
var RrCc = Format[1];
var h0 = h = parseInt(Format[2], 10);
var w0 = w = parseInt(Format[3], 10);
if (RrCc == "R" || RrCc == "r") // Dan niet croppen maar aspect ratio behouden
{
if (oIMG.Width * h > w * oIMG.Height)
h = oIMG.Height / oIMG.Width * w;
else
w = oIMG.Width / oIMG.Height * h;
}
if (oIMG.Height < h || oIMG.Width < w) // Zou er iets vergroot gaan worden.
{
if (RrCc == "R" || RrCc == "C") // Dan zijn we streng en eisen we minimale afmeting
{
result.message = L("lcl_shared_photo_small").format(h0, w0, oIMG.Height, oIMG.Width);
DeleteFile(params.AttachPath + result_safefilename);
}
else // Dan maar niet, we vergtoten niet.
{
h = oIMG.Height;
w = oIMG.Width;
}
}
if (!result.message && (oIMG.Height != h || oIMG.Width != w))
{
try {
__Log("Resize/Cropping from w=" + oIMG.Width + " h=" + oIMG.Height + " to w=" + w + " h=" + h);
oIMG.Width = w;
oIMG.Height = h;
oIMG.SaveAs(params.AttachPath + result_safefilename);
}
catch (e)
{
result.message = L("lcl_shared_thumbnail_error") + e.description;
// Gewoon opruimen
DeleteFile(params.AttachPath + result_safefilename);
}
}
}
}
if (!result.message)
switch(pModule)
{
case "SML": // Thumb altijd
try {
maxThumbW = 60;
maxThumbH = 80;
if (oIMG.Width / oIMG.Height > maxThumbW / maxThumbH)
{
oIMG.Height = oIMG.Height / oIMG.Width * maxThumbW;
oIMG.Width = maxThumbW;
}
else
{
oIMG.Width = oIMG.Width / oIMG.Height * maxThumbH;
oIMG.Height = maxThumbH;
}
CreateFullPath(params.AttachPath + "thumb/");
oIMG.SaveAs(params.AttachPath + "thumb/" + result_safefilename);
}
catch (e)
{
result.message = L("lcl_shared_thumbnail_error") + e.description;
DeleteFile(params.AttachPath + "thumb/" + result_safefilename);
}
break;
case "FGII":
// Direct scannen nu, indien dwf bestand. Tekening kan vaker gebruikt worden.
var sql = "SELECT cad_tekening_key"
+ " FROM cad_tekening"
+ " WHERE cad_tekening_filenaam || '.dwf' = " + safe.quoted_sql(result_safefilename);
var oRs = Oracle.Execute(sql);
while (!oRs.eof)
{
var cad_tek_key = oRs("cad_tekening_key").value;
result.message = scanDWF(cad_tek_key, 1);
oRs.MoveNext();
}
break;
}
}
}
%><script>
<% if (result.message) { %>
FcltMgr.alert("<%=safe.jsstring(result.message)%>");
<% } %>
var JSONdata = "<%=safe.jsstring(JSON.stringify(result.safefilename))%>";
var filename_arr = eval('(' + JSONdata + ')');
parent.uploadDone(filename_arr); // Zoo fout....
</script>
<%
Response.End;
%>
<script language="VBScript" runat="Server">
Dim UploadRequest
'' // Vult via de (JavaScript) functie js_add_file de globale found_files
'' // Verder doen we echt zo veel mogelijk in JavaScript
Public Function VB_getfiles()
Dim myErr
Set result = Server.CreateObject("Scripting.Dictionary")
byteCount = Request.TotalBytes
if byteCount = 0 then Response.End
on error resume next
RequestBin = Request.BinaryRead(byteCount)
myErr = Err.Description
on error goto 0
If myErr <> "" Then
result.add "message", myErr
Set VB_getfiles = result
Exit Function
End If
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin
'' // Vul via de (Javascipt) functie js_add_field de globale found_fields
'' // met de hidden form-fields uit de header
Dim ur_key, i, var_naam, var_waarde, var_filename, var_data
ur_key = UploadRequest.Keys
for i = 0 To UploadRequest.Count -1
var_naam = ur_key(i)
if UploadRequest.Item(var_naam).Exists("ContentType") then
var_waarde = UploadRequest.Item(var_naam).Item("FileName")
'' // En dan nu nog de bestanden..
contentType = UploadRequest.Item(var_naam).Item("ContentType")
filepathname = UploadRequest.Item(var_naam).Item("FileName")
var_data = MultiByteToBinary(UploadRequest.Item(var_naam).Item("Value"))
js_add_file filepathname, var_data, contentType, i
else
var_waarde = UploadRequest.Item(var_naam).Item("Value")
end if
js_add_field var_naam, var_waarde
next
Set VB_getfiles = result
End Function
</script>