Files
Facilitor/APPL/API2/model_custom_fields.inc
Jos Groot Lipman 7021a5357d FSN#32922 API2 issues herzien
svn path=/Website/trunk/; revision=26292
2015-09-14 09:16:39 +00:00

138 lines
5.4 KiB
PHP
Raw Blame History

<% /*
$Revision$
$Id$
File: model_custom_fields.inc
Description: Flexkenmerken model
Parameters:
Context:
Notes:
*/
%>
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="../Shared/resultset_flex.inc"-->
<%
function model_custom_fields(formodel, flexModule, flexParams)
{
flexParams = flexParams || {};
this.module = flexModule;
this.table = "flex";
this.primary = "kenmerk_key";
this.records_name = "custom_fields";
this.record_name = "custom_field";
// this.records_title = L("lcl_orders");
// this.record_title = L("lcl_opdr_info");
// getSqlFlex heeft bij multi-language 'user' al nodig voor de lcl's
// daarom hieronder een indirecte/ delayed fntablesql
this.fntablesql = function _fntablesql()
{
var theSqlFlex = getSqlFlex(flexModule, formodel.primary, flexParams);
return "(" + theSqlFlex + ") flex";
}
this.fields =
{ "id": { dbs: "kenmerk_key", typ: "key" }, // TODO: dit klopt niet helemaal. De echte unieke waarde is bez_kenmerkwaarde_key
"value": { dbs: "waarde", typ: "varchar" },
"type": { dbs: "kenmerktype", typ: "varchar" },
"sequence": { dbs: "volgnummer", typ: "number" },
"label": { dbs: "omschrijving", typ: "varchar" },
"flexparentkey": { dbs: "flexparentkey", typ: "key" },
// TODO: record.flexparentid wordt er uitgestript vanwege niet teruglinken naar de parent
// we hebben hem echter wel nodig. Dit moet beter....
"xflexparentkey": { dbs: "xflexparentkey", typ: "key", sql: "flexparentkey" }
};
// Deze functie wordt na de GET aangeroepen. De bijlagen zijn zo afwijkend
// dat ik dat niet fatsoenlijk in 'fields' verwerkt kreeg
this.post_get = function (record)
{
if (record.type == 'F' || record.type == 'M')
{
var flexparam = flexProps(flexModule, record.xflexparentkey, String(record.id), flexParams.pNiveau,
{ getFiles: true, api2name: formodel.records_name });
record.attachments = [];
for (var f in flexparam.files)
{
var file = flexparam.files[f];
record.attachments.push({ name: file.name,
date: file.date,
size: file.size,
content_url: file.deepurl,
digest: file.digest })
};
}
delete record["xflexparentkey"]; // nu niet meer nodig
}
this.streamattachment = function(filter, flexfields)
{
for (var fid in flexfields)
{
if (flexfields[fid].id == filter.subfolder && flexfields[fid].attachments)
{
for (var i = 0; i < flexfields[fid].attachments.length; i++)
{
var att = flexfields[fid].attachments[i];
if (att.name.toLowerCase() == filter.filename.toLowerCase()) // Gevonden!!!!
{
params = flexProps(this.module, filter.id, filter.subfolder, flexParams.pNiveau);
// In de praktijk (b)lijkt IE de ETag niet te sturen voor downloads
// maar wij ondersteunen het in ieder geval wel.
var eTag = '"' + att.digest + '"';
Response.AddHeader("ETag", eTag);
if (Request.ServerVariables("HTTP_IF_NONE_MATCH") == eTag)
{ // We hebben een match!
Response.Clear();
Response.Status = "304 Not modified";
Response.End;
}
StreamFile(params.AttachPath, att.name, "application/octet-stream");
}
}
}
}
__Log(filter);
Response.Status = "404 Not Found";
}
this.list = { columns: ["id", "label", "value"] }
// Merk op: g<><67>n eigen REST_GET
// We kunnen alleen via een include van een parent die dan ook
// vooral alle autorisatiecontrole voor ons kan verzorgen
// this.REST_GET = generic_REST_GET(this, {});
}
function set_custom_field(jsondata, kenmerk_key, val, typ)
{
for (var i=0; i< jsondata.custom_fields.length; i++)
{
if (jsondata.custom_fields[i].id == kenmerk_key)
{
jsondata.custom_fields[i].value = val;
return; // direct klaar
}
}
if (!typ)
abort_with_warning("Cannot set_custom_field key '{0}' without type".format(kenmerk_key));
jsondata.custom_fields.push({ id: kenmerk_key, value: val, type: typ });
}
function get_custom_field(jsondata, kenmerk_key)
{
for (var i=0; i< jsondata.custom_fields.length; i++)
{
if (jsondata.custom_fields[i].id == kenmerk_key)
{
return jsondata.custom_fields[i].value; // direct klaar
}
}
return null;
}
%>