138 lines
5.4 KiB
PHP
138 lines
5.4 KiB
PHP
<% /*
|
||
$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;
|
||
}
|
||
%> |