FSN#44507: (PDA) Bijlagen toevoegen herzien savepoint

svn path=/Website/branches/v2017.2/; revision=35631
This commit is contained in:
Jos Groot Lipman
2017-10-10 13:05:22 +00:00
parent 6707e6b16a
commit b0c4f71075
9 changed files with 254 additions and 108 deletions

View File

@@ -319,32 +319,42 @@ api2_rest = {
{
var bytes = Request.TotalBytes;
if (bytes == 0)
{ // TODO
//__DoLog("api_gen_import empty body posted", "#ffff00");
//Response.Write("Error: no data posted for API import");
//Response.End; // Grof maar anders AiAi, dat is nog erger
}
api2.error(400, "Empty file");
var fileStream = Server.CreateObject("ADODB.Stream");
fileStream.Type = 1; // adTypeBinary eerst nog
fileStream.Open();
fileStream.Write(Request.BinaryRead(bytes));
try
{
fileStream.Write(Request.BinaryRead(bytes));
}
catch(e)
{
var msg = L("lcl_shared_upload_error_start") + e.description + L("lcl_shared_upload_error_end");
api2.error(400, msg);
}
jsondata["custom_fields"][0]["attachments"][0].datastream = fileStream;
if (key == 0) // new record
{
var token = model.includes["custom_fields"].model.REST_POST(requestparams, jsondata.custom_fields[0], -1);
var record = { xflexparentkey: -1, propertyid: jsondata.custom_fields[0].propertyid};
var fileparams = { getFiles: true, api2name: null, tmpfolder: token };
var data = model.includes["custom_fields"].model.get_file_info(requestparams, record, fileparams );
api2_rest.deliver(data, /* dummy model */ { record_name: "attachment" }, "json", true);
return;
}
else
{
method = "PUT"; // het moet altijd een update van een issue zijn
}
requestparams.custom_fields_only = true; // Voorkom bij nieuwe bijlage onnodige update vam hele issue
model["REST_" + method](requestparams, jsondata, key); // via het hoofdmodel met authorisatie controle en alles
var record = { xflexparentkey: key, propertyid: jsondata.custom_fields[0].propertyid};
var fileparams = { getFiles: true, api2name: model.records_name };
}
var data = model.includes["custom_fields"].model.get_file_info(requestparams, record, fileparams );
var data = model["REST_" + method](requestparams, jsondata, key); // via het hoofdmodel met authorisatie controle en alles
api2_rest.deliver(data, /* dummy model */ { record_name: "attachment" }, outputformat, true);
return;
}
// Geen atachment dus door met de reguliere code
var data = model["REST_" + method](requestparams, jsondata, key);
if (method == "GET")
{
if (!data.length) // mogelijk not authorized op hele record

View File

@@ -205,8 +205,7 @@ function model_custom_fields(formodel, flexModel, flexParams)
}
else
{
Response.Status = "422 Unprocessable Entity";
Response.End;
api2.error(422, L("lcl_shared_file_ext_not_allowed"));
}
}
}

View File

@@ -391,30 +391,41 @@ function model_issues(mld_key, params)
var this_mld = mld.func_enabled_melding(mld_key);
user.auth_required_or_abort(this_mld.canChange); // Geen wijzigingen toestaan bij onvoldoende rechten.
params = _pre_analyze_fields(params, jsondata);
// Verwijder voor PUT wat niet gewijzigd mag worden.
delete jsondata.name;
delete jsondata.contact;
delete jsondata.requestor;
delete jsondata.issuetype;
delete jsondata.location;
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
_analyze_fields(dbfields, params, jsondata);
_validate_fields(dbfields, params, jsondata);
if (params.custom_fields_only)
{
var mldUpd = { trackarray: [] };
}
else
{
params = _pre_analyze_fields(params, jsondata);
// Verwijder voor PUT wat niet gewijzigd mag worden.
delete jsondata.name;
delete jsondata.contact;
delete jsondata.requestor;
delete jsondata.issuetype;
delete jsondata.location;
var wheres = [" mld_melding_key = " + mld_key];
var mldUpd = buildTrackingUpdate("mld_melding", wheres.join(" AND " ), dbfields, { noValidateToken: true });
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
_analyze_fields(dbfields, params, jsondata);
_validate_fields(dbfields, params, jsondata);
var err = Oracle.Execute(mldUpd.sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
var wheres = [" mld_melding_key = " + mld_key];
var mldUpd = buildTrackingUpdate("mld_melding", wheres.join(" AND " ), dbfields, { noValidateToken: true });
var err = Oracle.Execute(mldUpd.sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
}
var mldtrack = api2.process_includes(params, this, jsondata, mld_key);
shared.trackaction("MLDUPD",
mld_key,
L("lcl_mld_is_mldupdtrack").format(mld_key) + (mldUpd.trackarray.length > 0? "\n" : "") + mldUpd.trackarray.join("\n"));
if (mldUpd.trackarray.length)
{
shared.trackaction("MLDUPD",
mld_key,
L("lcl_mld_is_mldupdtrack").format(mld_key) + (mldUpd.trackarray.length > 0? "\n" : "") + mldUpd.trackarray.join("\n"));
}
if (jsondata.status > 0)
mld.setmeldingstatus(mld_key, jsondata.status, "");

View File

@@ -8,7 +8,7 @@
<!-- /api2/attachments/sample.doc?... /default.asp?api2=attachments&filename=sample.doc&... -->
<rule name="attachments" stopProcessing="true">
<match url="^api2/([a-z0-9_]+)/(\d+)/attachments/(.*)/(.*)/?" />
<action type="Rewrite" url="default.asp?mode=attachment&amp;api2={R:1}&amp;id={R:2}&amp;subfolder={R:3}&amp;filename={UrlEncode:{R:4}}" appendQueryString="true" />
<action type="Rewrite" url="default.asp?mode=attachment&amp;format=auto&amp;api2={R:1}&amp;id={R:2}&amp;subfolder={R:3}&amp;filename={UrlEncode:{R:4}}" appendQueryString="true" />
</rule>
<!-- /api2/buildings/ /default.asp?api2=doc&format=doc -->
<rule name="Add trailing slash" stopProcessing="true">

View File

@@ -118,11 +118,15 @@ $.ajaxSetup(
{
if (XMLHttpRequest.status != 0)
{
FcltMgr.alert("JQuery Ajax Error: " + textStatus
+ "\n" + XMLHttpRequest.status + ": " + XMLHttpRequest.statusText
+ (errorThrown && errorThrown != XMLHttpRequest.statusText? "\n" + errorThrown:"")
+ "\n\n" + this.type + " " + this.url
+ "\n\n" + new Date().toLocaleString());
if (XMLHttpRequest.responseJSON && "error" in XMLHttpRequest.responseJSON)
var errtxt = XMLHttpRequest.responseJSON.error.message; // een api2.error(400, "Tekst");
else
errtxt = "JQuery Ajax Error: " + textStatus
+ "\n" + XMLHttpRequest.status + ": " + XMLHttpRequest.statusText
+ (errorThrown && errorThrown != XMLHttpRequest.statusText? "\n" + errorThrown:"")
+ "\n\n" + this.type + " " + this.url;
FcltMgr.alert(errtxt
+ "\n\n" + new Date().toLocaleString());
}
}
}

View File

@@ -1,5 +1,17 @@
/* Redmine - project management software
Copyright (C) 2006-2017 Jean-Philippe Lang */
/*
$Revision$
$Id$
File: attachments.js
Description: clientside functions for attachments
Note: Wordt nog alleen voor PDA gebruikt
Een bestand wordt na kiezen altijd direct geupload en
dan krijgen we een token terug welke we uiteindelijk
submitten
Er zit ook drag-and-drop code in die we (nog) niet gebruiken
Er zit ook progress-bar code in die we (nog) niet gebruiken
*/
function addFile(inputEl, file, eagerUpload) {
var attachmentsFields = $(inputEl).closest('.attachments_form').find('.attachments_fields');
@@ -14,15 +26,10 @@ function addFile(inputEl, file, eagerUpload) {
fileSpan.append(
$('<input>', { type: 'text', 'class': 'icon icon-attachment filename readonly', name: param +'[' + attachmentId + '][filename]', readonly: 'readonly'} ).val(file.name),
$('<input>', { type: 'text', 'class': 'description', name: param + '[' + attachmentId + '][description]', maxlength: 255, placeholder: $(inputEl).data('description-placeholder') } ).toggle(!eagerUpload),
$('<input>', { type: 'hidden', 'class': 'token', name: param + '[' + attachmentId + '][token]'} ),
$('<a>&nbsp</a>').attr({ href: "#", 'class': 'icon-only icon-del remove-upload' }).click(removeFile).toggle(!eagerUpload)
$('<a>&nbspXX</a>').attr({ href: "#", 'class': 'icon-only icon-del remove-upload' }).click(removeFile).toggle(!eagerUpload)
).appendTo(attachmentsFields);
if ($(inputEl).data('description') == 0) {
fileSpan.find('input.description').remove();
}
if(eagerUpload) {
ajaxUpload(file, attachmentId, fileSpan, inputEl);
}
@@ -44,6 +51,7 @@ function ajaxUpload(file, attachmentId, fileSpan, inputEl) {
}
function onProgress(e) {
return;
if(e.lengthComputable) {
this.progressbar( 'value', e.loaded * 100 / e.total );
}
@@ -59,8 +67,8 @@ function ajaxUpload(file, attachmentId, fileSpan, inputEl) {
})
.done(function(result) {
addInlineAttachmentMarkup(file);
progressSpan.progressbar( 'value', 100 ).remove();
fileSpan.find('input.description, a').css('display', 'inline-block');
//progressSpan.progressbar( 'value', 100 ).remove();
fileSpan.find('input.token').val(result.attachment.token)
})
.fail(function(result) {
progressSpan.text(result.statusText);
@@ -76,7 +84,7 @@ function ajaxUpload(file, attachmentId, fileSpan, inputEl) {
}
var progressSpan = $('<div>').insertAfter(fileSpan.find('input.filename'));
progressSpan.progressbar();
//progressSpan.progressbar();
fileSpan.addClass('ajax-waiting');
var maxSyncUpload = $(inputEl).data('max-concurrent-uploads');
@@ -102,9 +110,8 @@ function uploadBlob(blob, uploadUrl, attachmentId, options) {
progressEventHandler: $.noop
}, options);
uploadUrl = uploadUrl + '?attachment_id=' + attachmentId;
uploadUrl = uploadUrl + encodeURIComponent(blob.name) + '?attachment_id=' + attachmentId;
if (blob instanceof window.File) {
uploadUrl += '&filename=' + encodeURIComponent(blob.name);
uploadUrl += '&content_type=' + encodeURIComponent(blob.type);
}
@@ -112,7 +119,10 @@ function uploadBlob(blob, uploadUrl, attachmentId, options) {
type: 'POST',
contentType: 'application/octet-stream',
beforeSend: function(jqXhr, settings) {
jqXhr.setRequestHeader('Accept', 'application/js');
jqXhr.setRequestHeader('Accept', 'application/json');
jqXhr.setRequestHeader('X-CSRF-TOKEN', RVT_token );
// attach proper File object
settings.data = blob;
},

View File

@@ -37,7 +37,7 @@ var LOCKED_USER_OK = { "xmlnode": "melding", "key": mld_key };
<%
FCLTHeader.Requires({ js: ["./modernizr-3.3.0.custom.min.js"] });
FCLTHeader.Requires({ js: [rooturl+"/appl/pda/modernizr-3.3.0.custom.min.js", rooturl+"/appl/pda/attachments.js" ] });
FCLTHeader.Requires({plugins: ["suggest"]});
var action = getQParam("action", "");
@@ -270,6 +270,8 @@ if (addSubheader)
subjectSubheader = L("lcl_mobile_at").format(plaats_string);
}
var editKostenplaats = (stdm_info.ins_srtdiscipline_kostenklant==1 && stdm_info.kpnverplicht);
// TODO lcl.set_dialect(mld_melding.srtdisc, "MLD_SRTDISCIPLINE_KEY");
@@ -277,6 +279,11 @@ if (addSubheader)
<html>
<head>
<% FCLTMHeader.Generate({title: subject }); %>
<style>
.remove-upload {
xdisplay: block!important;
}
</style>
<script type="text/javascript">
var timerID=null;
function delayed(delay, fn)
@@ -291,7 +298,7 @@ if (addSubheader)
return false;
// E<>rst accepteren, dan saven. Ander heb je met BOF maar zonder FOF een probleem
$.post( "../mld/mld_accept_save.asp?mld_key=<%=mld_key%>"
$.post( "<%=rooturl%>/appl/mld/mld_accept_save.asp?mld_key=<%=mld_key%>"
, $("[name=meld]").serialize()
<% if (this_mld.canChange) { %>
, McltCallbackAndThen(function ()
@@ -318,7 +325,7 @@ if (addSubheader)
, $("[name=meld]").serialize()
, FcltCallbackAndThen(function ()
{
$.post( "../mld/mld_close_save.asp?mld_key=<%=mld_key%>"
$.post( "<%=rooturl%>/appl/mld/mld_close_save.asp?mld_key=<%=mld_key%>"
, $("[name=meld]").serialize()
, McltCallbackRefresh
, "json");
@@ -353,7 +360,7 @@ if (addSubheader)
urole: "fe",
autoorder: 1 };
<% protectRequest.dataToken("data"); %>
$.post("../mld/mld_edit_opdr_save.asp",
$.post("<%=rooturl%>/appl/mld/mld_edit_opdr_save.asp",
data,
McltCallbackAndThenAlways(function () { mld_submit_callback({success: true, mld_key: json.mld_key }) }),
"json");
@@ -368,7 +375,7 @@ if (addSubheader)
$("input[name=mld_key]").val(json.mld_key);
<% } else if (mld_key < 0){ %>
// Nieuwe melding aangemaakt. Altijd complete reload, we hebben nu een mld_key namelijk
window.location.href = "melding.asp?mld_key=" + json.mld_key;
window.location.href = "<%=rooturl%>/appl/pda/melding.asp?mld_key=" + json.mld_key;
<% } else { %>
// Opslaan button geklikt. Er hoeft niet gerefreshed te worden. Er kan direct weer gewijzigd worden (Afhandeling)
<% } %>
@@ -396,7 +403,7 @@ if (addSubheader)
function mld_forward()
{
window.location.href = "melding_new.asp?mld_key=<%=mld_key%>&action=forward";
window.location.href = "<%=rooturl%>/appl/pda/melding_new.asp?mld_key=<%=mld_key%>&action=forward";
}
function PasteFromSelectbox()
@@ -411,7 +418,7 @@ if (addSubheader)
function mld_forward_cancel()
{
window.location.href = "../pda/melding.asp?mld_key=<%=mld_key%>";
window.location.href = "<%=rooturl%>/appl/pda/melding.asp?mld_key=<%=mld_key%>";
}
function mld_forward_submit()
@@ -436,7 +443,7 @@ if (addSubheader)
autoorder: 1
};
<% protectRequest.dataToken("data"); %>
$.post("../mld/mld_edit_opdr_save.asp",
$.post("<%=rooturl%>/appl/mld/mld_edit_opdr_save.asp",
data,
McltCallbackAndThenAlways(afsluiten),
"json");
@@ -447,7 +454,7 @@ if (addSubheader)
function afsluiten(jdata)
{ // Sluit onszelf.
window.location.href = "melding.asp?mld_key=<%=mld_key%>";
window.location.href = "<%=rooturl%>/appl/pda/melding.asp?mld_key=<%=mld_key%>";
}
</script>
@@ -465,7 +472,7 @@ if (action != "forward")
// Altijd forcesave omdat we geen doublecheck aankunnen
%>
<form name="meld" id="meld" action="../mld/mld_edit_melding_save.asp" method="post">
<form name="meld" id="meld" action="<%=rooturl%>/appl/mld/mld_edit_melding_save.asp" method="post">
<input type="hidden" name="mld_key" value="<%=mld_key%>">
<input type="hidden" name="forcesave" id="forcesave" value="0">
<input type="hidden" name="parent_key" id="parent_key" value="-1">
@@ -503,6 +510,18 @@ if (action != "forward")
BLOCK_START({collapsed: true, title: (mld_info.mld_onderwerp == null ? L("lcl_mld_frame_algemeen") : mld_info.mld_onderwerp)});
var prs_melder = new Perslid(mld_info.melder_key);
ROFIELD("fld", L("lcl_caller") , prs_melder.naam(), { moreinfo: "tel:"+(prs_melder.prs_perslid_mobiel()||prs_melder.prs_perslid_telefoonnr()) });
if (S("mld_num_prefix_mode") == 1 && mld_info.kostenpl_key > 0 && !editKostenplaats)
{
var sql = "SELECT k.prs_kostenplaats_key kpkey"
+ " , " + S("prs_kpn_string") + " kpstring"
+ " FROM prs_kostenplaats k"
+ " WHERE k.prs_kostenplaats_key = " + mld_info.kostenpl_key;
var oRs = Oracle.Execute(sql);
ROFIELD("fld", L("lcl_mld_inf_Kostenplaats"), oRs("kpstring").Value);
oRs.Close();
}
ROFIELD("fld", L("lcl_mld_date_time") , toDateTimeString(mld_info.melddatum));
ROFIELD("fld", L("lcl_vakgroup") , (mld_info.prefix ? mld_info.prefix+"-" : "") + mld_info.ins_discipline_omschrijving);
BLOCK_END();
@@ -515,7 +534,7 @@ if (action != "forward")
FCLTpersoonselector("person",
"sgPerson",
{ perslidKey: mld_info.melder_key,
label: L("lcl_mld_name"),
xxlabel: L("lcl_mld_name"),
fieldNameKey: "person",
readonly: !personEditable,
autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
@@ -561,13 +580,13 @@ if (action != "forward")
ROFIELD("fld", L("lcl_gerelateerdeobjecten"), ins_name_arr.join("\n"), {multi: ins_name_arr.length > 1});
}
if (stdm_info.ins_srtdiscipline_kostenklant==1 && stdm_info.kpnverplicht) {
if (editKostenplaats) {
FCLTkostenplaatsselector("account",
"sgAccount",
user_key,
{ kostenplaatsKey: mld_info.kostenpl_key || -1,
label: L("lcl_mld_inf_Kostenplaats"),
xxxlabel: L("lcl_mld_inf_Kostenplaats"),
extraParamField: "module",
extracode: "M",
filtercode: "AA",
@@ -577,7 +596,8 @@ if (action != "forward")
else
{
%> <input type="hidden" name="account" id="sgAccount" value="<%=mld_info.kostenpl_key || -1 %>">
<%}
<%
}
if (mld_key > -1)
{
@@ -699,7 +719,7 @@ if (action != "forward")
if (mld_info.parent_key) // gekoppelde melding verwijst naar de parent voor afhandeling
{
var sprefix = mld.mld_prefix(mld_info.parent_key);
var params = { moreinfo: "melding.asp?mld_key=" + mld_info.parent_key, disabled: true};
var params = { moreinfo: rooturl+"/appl/pda/melding.asp?mld_key=" + mld_info.parent_key, disabled: true};
ROFIELD("fld", L("lcl_mld_completion_in"), sprefix + mld_info.parent_key, params);
}
else
@@ -782,7 +802,7 @@ if (action != "forward")
var this_opdr = mld.func_enabled_mld(mld_info.disc, "D"); // wat mag ik zoal op een nieuwe melding
if ((this_opdr.canORDBOFread) && showord)
{
opdr_page = "./orders_list.asp?mld_key="+mld_key+"&urole=" + (this_opdr.canORDBOFread? "bo" : urole);
opdr_page = rooturl+"/appl/pda/orders_list.asp?mld_key="+mld_key+"&urole=" + (this_opdr.canORDBOFread? "bo" : urole);
}
}
}
@@ -799,10 +819,7 @@ if (action != "forward")
BUTTON(L("lcl_close"), {click: "mld_close()", dataicon: "check"});
}
if (this_mld.canForward || this_mld.canFixMelding) { // bo2bo
BUTTON( (this_mld.canForward?L("lcl_forward"):L("lcl_fixmelding")),
{ click: "mld_forward()",
dataicon: "forward",
dataajax: "false"} );
BUTTON( (this_mld.canForward ? L("lcl_forward") : L("lcl_fixmelding")), {click: "mld_forward()", dataicon: "forward"});
}
var tsql = "SELECT COUNT(ins_deel_key) FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key;
toRs = Oracle.Execute(tsql);
@@ -811,10 +828,10 @@ if (action != "forward")
{
tsql = "SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key;
toRs1 = Oracle.Execute(tsql);
BUTTON(L("lcl_mobile_objecten")+" ("+toRs(0).value+")", {linkid: "./ins_deel.asp?ins_key="+toRs1("ins_deel_key").value, dataicon: "info", dataajax: 'false'});
BUTTON(L("lcl_mobile_objecten")+" ("+toRs(0).value+")", {linkid: rooturl+"/appl/pda/ins_deel.asp?ins_key="+toRs1("ins_deel_key").value, dataicon: "info", dataajax: "false"});
}
else
BUTTON(L("lcl_mobile_objecten")+" ("+toRs(0).value+")", {linkid: "./ins_list.asp?mld_key="+mld_key, dataicon: "info", dataajax: 'false'});
BUTTON(L("lcl_mobile_objecten")+" ("+toRs(0).value+")", {linkid: rooturl+"/appl/pda/ins_list.asp?mld_key="+mld_key, dataicon: "info", dataajax: "false"});
}
trackinglines = mobile.hastrackingpage('melding', mld_key);
if (trackinglines>0) {
@@ -823,10 +840,10 @@ if (action != "forward")
if (mfe.canReadNotes) { // Heb ik rechten om notities te zien
var tsql = "SELECT COUNT(*) FROM mld_melding_note n WHERE n.mld_melding_key = " + mld_key;
toRs = Oracle.Execute(tsql);
BUTTON(L("lcl_mld_frame_notes")+" ("+toRs(0).value+")", {linkid: "./notitie.asp?node=melding&key="+mld_key, dataicon: "comment", dataajax: 'false'});
BUTTON(L("lcl_mld_frame_notes")+" ("+toRs(0).value+")", {linkid: rooturl+"/appl/pda/notitie.asp?node=melding&key="+mld_key, dataicon: "comment", dataajax: "false"});
}
if (ruimte_key > -1 && user.checkAutorisation( "WEB_ALGUSE", true)) {
BUTTON(L("lcl_room"), {linkid: "./ruimte.asp?ruimte_key="+ruimte_key, dataicon: "info", dataajax: 'false'});
BUTTON(L("lcl_room"), {linkid: rooturl+"/appl/pda/ruimte.asp?ruimte_key="+ruimte_key, dataicon: "info", dataajax: "false"});
}
if (opdr_page != "") {
var tsql = "SELECT COUNT(*) FROM mld_opdr o WHERE o.mld_melding_key = " + mld_key
@@ -846,14 +863,10 @@ if (action != "forward")
if (mld_key > -1)
{
if (trackinglines>0) {
PAGE_START({id: "mld-2-"+mld_key, dialog: true})
PAGE_START({id: "mld-2-"+mld_key})
mobile.trackingpage('melding', mld_key, (mld_info.prefix || "")+ mld_key);
PAGE_END();
}
// Deze pagina zou nog niet hoeven als er geen notes zijn, geeft niks
PAGE_START({id: "mld-3-"+mld_key})
mobile.notespage('melding', mld_key, (mld_info.prefix || "")+ mld_key);
PAGE_END();
}
}
@@ -866,7 +879,7 @@ if (action == "forward")
HEADER({title: L("lcl_mld_forward_mld").format((mld_info.prefix || "") + mld_key), back:!qrc });
CONTENT_START();
%>
<form name="meld_fwd" id="meld_fwd" action="../mld/mld_forward_save.asp?mld_key=<%=mld_key%>" method="post">
<form name="meld_fwd" id="meld_fwd" action="<%=rooturl%>/appl/mld/mld_forward_save.asp?mld_key=<%=mld_key%>" method="post">
<input type="hidden" name="disc" id="disc" value="<%=disc_key%>">
<input type="hidden" name="stdm" id="stdm" value="<%=stdm_key%>">
<%
@@ -876,7 +889,7 @@ if (action == "forward")
RWFIELD("opmerk", L("lcl_mld_inf_Opmerking"), "", {multi: true, pclass: ((S("mld_forward_opm_flags") & 1) == 1? " required" : "")});
CONTROLGROUP_START()
BUTTON(L("lcl_forward"), {click: "mld_forward_submit()", dataicon: "check"} );
BUTTON(this_mld.canForward ? L("lcl_forward") : L("lcl_fixmelding"), {click: "mld_forward_submit()", dataicon: "check"} );
BUTTON(L("lcl_cancel"), {click: "mld_forward_cancel()", dataicon: "back"} );
CONTROLGROUP_END()
IFACE.FORM_END();

View File

@@ -1121,7 +1121,10 @@ function abort_with_warning(warning, code)
var codestr = String(code);
if (typeof code == "number")
{
var codestr = { 400: "Bad request", 403: "Forbidden", 404: "Forbidden" }[code];
var codestr = { 400: "Bad request",
403: "Forbidden",
404: "Not Found",
422: "Unprocessable Entity" }[code];
if (codestr)
code = code + " " + codestr;
}

View File

@@ -266,6 +266,26 @@ function listKenmerk(sql, module, key, props)
var hasfilter = props.hasfilter || false; // De kenmerken kunnen op naam gefilterd worden.
var tmpfolder = props.tmpfolder || "";
if (formobile)
{
var api2name = { "ALG": { "L": "locations",
"G": "buildings",
"R": "rooms"
},
"MLD": "issues",
"INS": "objects",
"RES": "reservations"
}[module] // niveau
if (api2name && typeof api2name == 'object')
api2name = api2name[props.kenmerk_module];
if (!api2name)
{
__DoLog(props);
__DoLog("What should api2name be for {0} and {1}?".format(module, props.kenmerk_module));
INTERNAL_ERROR_UNDEFINED_API2NAME;
}
}
var predone = false;
var colCount = 0; // Even/oneven zodat we weten of we links of rechts zitten
@@ -879,19 +899,54 @@ function listKenmerk(sql, module, key, props)
}
// KENMERKTYPE F/E (File) ===================================================================
var MasF = false; // M behandelen als F?
if ((ktype == 'F' || ktype == 'E' || ktype == 'M') && formobile)
var lijst = [];
if (formobile & (ktype == 'F' || ktype == 'E' || ktype == 'M'))
{
var lijst = BijlagenList(module, niveau, key, kkey, otherPath); // die hebben we dan nodig
var filehtmlarr = [];
for (var i = 0; i < lijst.length; i++)
{
var href = HTTP.urlzelfnoroot() + protectQS.create(OpenFlexFile(module, niveau, key, kkey, lijst[i]));
var html = '<a class="details fldflexM"'
+ ' href=\'' + safe.jsstring(href) + '\'" target="_blank">' + safe.html(lijst[i]) + '</a>';
filehtmlarr.push(html);
}
var kv = filehtmlarr.join("</br>");
if (!lijst.length && !readonlyfield)
{
kv += '<span id="attachments_form">';
kv += ' <span class="attachments_form">';
kv += ' <span class="attachments_fields">';
kv += ' </span>';
kv += ' <span class="add_attachment" style="">';
kv += ' <label for="attachments'+kkey+'" data-role="button" data-icon="cloud">' + L("lcl_select_file") + (kdim? "(" + safe.html(kdim) + ")":"") + "</label>"
kv += ' <input type="file"';
kv += ' name="attachments'+kkey+'"';
kv += ' id="attachments'+kkey+'"';
kv += ' class="file_selector filedrop"';
if (ktype == 'M')
kv += ' multiple="multiple"';
kv += ' onchange="addInputFiles(this);"';
//kv += ' data-max-file-size="5242880"';
//kv += ' data-max-file-size-message="This file cannot be uploaded because it exceeds the maximum allowed file size (5 MB)"';
kv += ' data-max-concurrent-uploads="2"';
kv += ' data-upload-path="{0}/api2/{1}/{2}/attachments/{3}/"'.format(rooturl, api2name, key<0?0:key, kkey);
kv += ' data-role="none"'; // zorg dat jQuery er verder af blijft, hij wordt toch hidden
kv += ' data-param="attachments"';
kv += ' data-description="true"';
//kv += ' data-description-placeholder="Optional description"';
//kv += ' (Maximum size: 5 MB)';
kv += ' />';
kv += ' </span>';
kv += ' </span>';
kv += '</span>';
kv += ' <script>$("label[data-role=button]").button()'; // waarom gaat dit niet vanzelf?
kv += '</script>';
}
}
if (ktype == 'M' && formobile && !lijst.length)
MasF = true; // Een M zonder files doen we als F zodat je tenminste <20><>n betand kunt toevoegen
if (ktype == 'F' || ktype == 'E' || MasF) // single File of Encrypted
else if (ktype == 'F' || ktype == 'E') // single File of Encrypted, reguliere GUI
{
if (formobile && lijst.length)
readonlyfield = true;
// Bedoeling is: toon de filenaam in een inputfield.
// In showmode/readonly kun je er op klikken als-ie bestaat, in editmode
// moet je de change button gebruiken om te wijzigen en is niet klikbaar.
@@ -919,16 +974,12 @@ function listKenmerk(sql, module, key, props)
// Mobile heeft een compleet eigen BijlagenForm.asp
if (kdim == 'xxx')
var url = rooturl + "/appl/shared/BijlagenSignature.asp"
else if (formobile)
var url = rooturl + "/appl/pda/BijlagenForm.asp"
else
var url = rooturl + "/appl/shared/BijlagenForm.asp"
url += "?module=" + module
+ "&key=" + key
+ (niveau != ""? "&niveau=" + niveau : "")
+ "&kenmerk_key=" + kkey
+ "&mobile=" + (formobile ? 1 : 0)
+ (formobile ? "&multi=" + (MasF ? 1 : 0) : "")
+ (props.kenmerk_module? "&kenmerk_module=" + props.kenmerk_module : "");
// nooit if (pReadonly) url += "&reado=1";
// nooit url += "&multi=1";
@@ -956,11 +1007,7 @@ function listKenmerk(sql, module, key, props)
saveUrl += "&kenmerk_module="+props.kenmerk_module;
};
var func = "onBijlagen";
if (formobile)
func = "onBijlagenMobile";
var blg = func + "('" + safe.jsstring(protectQS.create(url)) + "'"
var blg = "onBijlagen('" + safe.jsstring(protectQS.create(url)) + "'"
+ ",'" + (saveUrl?safe.jsstring(protectQS.create(saveUrl)):"") + "'"
+ ", false"
+ ", $('#" + fld + "')[0]"
@@ -1034,13 +1081,12 @@ function listKenmerk(sql, module, key, props)
}
// KENMERKTYPE M (Map) ======================================================================
// Mobiel hebben we hem al bij 'F' gedaan
if (ktype == 'M' && !MasF) // Map met bestanden is altijd heel simpel
else if (ktype == 'M') // Map met bestanden is altijd heel simpel
{
var requiredfield = (required ? required_class : "");
var identify = " id='" + nameprefix + idCounter + "val' name='" + nameprefix + idCounter + "val'";
var res = BijlagenButton(module, niveau, key, tmpfolder, kkey, readonlyfield || formobile, // Mobile altijd readonly
var res = BijlagenButton(module, niveau, key, tmpfolder, kkey, readonlyfield,
requiredfield, kdim, kregexp, otherPath, identify, L("lcl_appendixes_teller"), props)
kv = res.html;
if (res.count > 0)
@@ -1778,7 +1824,7 @@ function _saveFlexKenmerken(parentKey, params, flexdata) // TODO: support multiM
oRs.Close();
}
if (params.isNew && !params.noAttachments)
if (params.isNew && !params.noAttachments) // uploads oude stijl
{
var ktmpfolder = getFParam("ktmpfolder" + (params.tmpfolderNum? params.tmpfolderNum : 0), "");
if (ktmpfolder)
@@ -1789,7 +1835,7 @@ function _saveFlexKenmerken(parentKey, params, flexdata) // TODO: support multiM
vAttachPath2 = S("flexFilesPath") + "/" + flexPathArray[0] + "/" + subfolderKey(bepaalNiveau(params.moduleName, flexPathArray[1]), parentKey);
// Niet van toepassing: we doen altijd een hele folder hieronder.
// MoveFlexfiles(vAttachPath, vAttachPath2)
var fso = Server.CreateObject("Scripting.FileSystemObject")
var fso = Server.CreateObject("Scripting.FileSystemObject");
if (fso.FolderExists(vAttachPath))
{
__Log("Hernoem " + vAttachPath + " naar " + vAttachPath2);
@@ -1807,6 +1853,56 @@ function _saveFlexKenmerken(parentKey, params, flexdata) // TODO: support multiM
fso = null;
}
}
// Uploads nieuwe stijl
if (params.isNew)
{
for (var i = 1; i < 100; i++)
{
if (getFParam("attachments[" + i + "][filename]", "")) // de originele filenaam, doen we niets mee
{
// elk nieuw bestand zit in een eigen flexfiles\MLD\M__NEW__81968_mG5Yj9duWAwuK16XYYbKwoS3RfJOYCL6\2961
var ktmpfolder = getFParam("attachments[" + i + "][token]", "");
if (ktmpfolder)
{
var tmp_folder = "__NEW__" + user_key + "_" + safe.filename(ktmpfolder);
var vAttachPathSource = S("flexFilesPath") + "/" + params.flexPath + tmp_folder;
var flexPathArray = params.flexPath.split("/"); // MLD/M => MLD (0) en M (1)
var vAttachPathTarget = S("flexFilesPath") + "/" + flexPathArray[0] + "/" +
subfolderKey(bepaalNiveau(params.moduleName, flexPathArray[1]), parentKey);
var fso = Server.CreateObject("Scripting.FileSystemObject");
if (fso.FolderExists(vAttachPathSource))
{
if (!fso.FolderExists(vAttachPathTarget)) // nieuwe hoofdfolder is er nog niet
CreateFullPath(vAttachPathTarget); // het 1000-tal was er misschien ook nog niet.
// nu bestaat voor een melding 1021481 de folder flexfiles\MLD\M1021___\M1021481
// Misschien bestaat flexfiles\MLD\M1021___\M1021481\2803 ook al
try
{
var oFolder = fso.GetFolder(vAttachPathSource); // Doorloop de kenmerk keys (zal er *eentje* zijn)
var fc1 = new Enumerator(oFolder.SubFolders);
for (; !fc1.atEnd(); fc1.moveNext())
{
var folder = fc1.item(); // folder.Name is eigenlijk kenmerk_key
var fromFolder = vAttachPathSource + "/" + folder.Name;
var toFolder = vAttachPathTarget + "/" + folder.Name;
if (!fso.FolderExists(toFolder)) // kenmerkfolder is er nog niet
CreateFullPath(toFolder);
__Log("Verplaats inhoud " + fromFolder + "/*.* naar " + toFolder + "/");
fso.MoveFile (fromFolder + "/*.*", toFolder + "/");
}
fso.DeleteFolder(vAttachPathSource);
}
catch (ee)
{
__DoLog("MoveFlexfiles " + vAttachPathSource + " naar " + vAttachPathTarget + " mislukt: " + ee.description);
}
}
fso = null;
}
}
}
}
var trackarray = []; // eventuele tracking