Files
Facilitor/APPL/API2/model_custom_fields.inc
Erik Groener fb441b1705 FSN#39312 Verder ontsluiten van modellen via de API
svn path=/Website/trunk/; revision=32984
2017-02-28 15:31:59 +00:00

165 lines
5.7 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.records_name = "customfields";
this.record_name = "customfield";
this.table = "flex";
this.primary = "kenmerk_key";
this.records_title = L("custom_field_m");
this.record_title = L("custom_field");
// 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",
"label": L("lcl_key"),
"typ": "key"
}, // TODO: dit klopt niet helemaal. De echte unieke waarde is bez_kenmerkwaarde_key
"value": {
"dbs": "waarde",
"label": L("lcl_fac_value"),
"typ": "varchar"
},
"type": {
"dbs": "kenmerktype",
"label": L("mgt_srtkenmerk_kenmerktype"),
"typ": "varchar"
},
"sequence": {
"dbs": "volgnummer",
"label": L("mgt_kenmerk_volgnummer"),
"typ": "number" },
"label": {
"dbs": "omschrijving",
"label": L("mgt_srtkenmerk_label"),
"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.customfields.length; i++)
{
if (jsondata.customfields[i].id == kenmerk_key)
{
jsondata.customfields[i].value = val;
return; // direct klaar
}
}
if (!typ)
abort_with_warning("Cannot set_custom_field key '{0}' without type".format(kenmerk_key));
jsondata.customfields.push({ id: kenmerk_key, value: val, type: typ });
}
function get_custom_field(jsondata, kenmerk_key)
{
for (var i=0; i< jsondata.customfields.length; i++)
{
if (jsondata.customfields[i].id == kenmerk_key)
{
return jsondata.customfields[i].value; // direct klaar
}
}
return null;
}
%>