Skip to content

Commit 6e890fd

Browse files
added support for type linkedobjectfield
1 parent 569d517 commit 6e890fd

File tree

4 files changed

+140
-19
lines changed

4 files changed

+140
-19
lines changed

l10n/default-values-from-pool.csv

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@ defaultvaluefielddefinitor.data_table.fieldtype,Feldtyp,Fieldtype
1818
defaultvaluefielddefinitor.data_table.dantevoc,DANTE-Vokabular (falls zutreffend),DANTE-Vocabulary (if applicable)
1919
defaultvaluefielddefinitor.data_table.dantemode,DANTE-Plugin-Modus (falls zutreffend),DANTE-Plugin-Mode (if applicable)
2020

21+
defaultvaluefielddefinitor.data_table.fieldname_datamodel,Datenmodell-Feldname (bei Typ=Objekttyp),Datamodel fieldname (if type=objecttype)
22+
2123
defaultvaluefielddefinitor.data_table.fieldtype.input,Text (einzeilig),Text (oneliner)
2224
defaultvaluefielddefinitor.data_table.fieldtype.dante,DANTE-Plugin,DANTE-Plugin
25+
defaultvaluefielddefinitor.data_table.fieldtype.record,Datensatz,Record
2326

2427
defaultvaluefielddefinitor.data_table.dantemode.empty,Ohne,Without
2528
defaultvaluefielddefinitor.data_table.dantemode.dropdown,Dropdown,Dropdown

src/webfrontend/field-definitor-base-config.coffee

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,22 @@ class DefaultValueFieldDefinitorBaseConfig extends BaseConfigPlugin
1616
value: value
1717
)
1818

19+
# generate fieldtypeoptions (in order to pass the used objecttype to the poolmanager)
20+
fieldTypeOptions = [
21+
text: $$("defaultvaluefielddefinitor.data_table.fieldtype.input")
22+
value: 'input'
23+
,
24+
text: $$("defaultvaluefielddefinitor.data_table.fieldtype.dante")
25+
value: 'dante'
26+
]
27+
# füge für jeden
28+
for ot in ez5.schema.CURRENT._objecttypes
29+
objectType = new Objecttype(new Table("CURRENT", ot.table_id))
30+
fieldTypeOptions.push(
31+
text: $$("defaultvaluefielddefinitor.data_table.fieldtype.record") + ' (' + objectType.name() + ')'
32+
value: 'record' + '|||' + objectType.name()
33+
)
34+
1935
# generate form with datatable
2036
field =
2137
type: CUI.Form
@@ -45,13 +61,12 @@ class DefaultValueFieldDefinitorBaseConfig extends BaseConfigPlugin
4561
type: CUI.Select
4662
text: $$("defaultvaluefielddefinitor.data_table.fieldtype.label")
4763
name: "fieldtype"
48-
options: [
49-
text: $$("defaultvaluefielddefinitor.data_table.fieldtype.input")
50-
value: 'input'
51-
,
52-
text: $$("defaultvaluefielddefinitor.data_table.fieldtype.dante")
53-
value: 'dante'
54-
]
64+
options: fieldTypeOptions
65+
,
66+
form:
67+
label: $$("defaultvaluefielddefinitor.data_table.fieldname_datamodel")
68+
type: CUI.Input
69+
name: "fieldname_datamodel"
5570
,
5671
form:
5772
label: $$("defaultvaluefielddefinitor.data_table.dantevoc")

src/webfrontend/mask-splitter-default-values.coffee

Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ class ez5.ShowPoolDefaultValuesInMask extends CustomMaskSplitter
6060
defaultValueFromPool = entry
6161
if typeof defaultValueFromPool == 'object'
6262
defaultValueFromPool = defaultValueFromPool?.conceptName
63+
if !defaultValueFromPool
64+
if entry?._standard?[1].text
65+
# try in active frontendlanguage
66+
defaultValueFromPool = entry?._standard[1]?.text[ez5.loca.getLanguage()]
67+
# else get first language
68+
if !defaultValueFromPool
69+
defaultValueFromPool = entry?._standard[1]?.text[Object.keys(entry._standard[1].text)[0]]
6370

6471
fieldsRendererPlain = @__customFieldsRenderer.fields[0]
6572
fields = fieldsRendererPlain.getFields() or []
@@ -79,6 +86,9 @@ class ez5.ShowPoolDefaultValuesInMask extends CustomMaskSplitter
7986

8087
innerFieldsCollection = @renderInnerFields(opts)
8188

89+
if innerFieldsCollection.length == 0
90+
return
91+
8292
selectedElement = innerFieldsCollection.item(0)
8393

8494
fieldnameblock = selectedElement.querySelector('.ez5-field-block-header')
@@ -95,6 +105,7 @@ class ez5.ShowPoolDefaultValuesInMask extends CustomMaskSplitter
95105
# wenn Feld einen Wert hat, dann Standardwert nicht anzeigen
96106
buttonClassHidden = ''
97107
labelClassHidden = 'show'
108+
98109
if opts.data[field.ColumnSchema.name]
99110
# if field has value, show x-button and hide defaultvalue from pool
100111
buttonClassHidden = 'show'
@@ -103,14 +114,21 @@ class ez5.ShowPoolDefaultValuesInMask extends CustomMaskSplitter
103114
# if field has no value, show default value and hide button
104115
if opts.data[field.ColumnSchema.name] == {} || opts.data[field.ColumnSchema.name] == null || (typeof opts.data[field.ColumnSchema.name] == 'object' && ! opts.data[field.ColumnSchema.name]?.conceptURI) || (opts.data[field.ColumnSchema.name] == '')
105116
labelClassHidden = 'show'
106-
buttonClassHidden = 'hidden'
117+
buttonClassHidden = 'hidden'
118+
119+
# linkedobjecttype
120+
if opts.data[field.ColumnSchema.name]?._standard
121+
buttonClassHidden = 'show'
122+
labelClassHidden = 'hidden'
107123

108-
# if dante-popover or dante-treeview => Don't use the xbutton
124+
# if dante-popover or dante-treeview or objecttype => Don't use the xbutton
109125
noxbuttonuseclass = ''
110126
# check if it is popover / treeview
111127
checkForDropdown = CUI.dom.matchSelector(selectedElement, ".customPluginEditorLayout.dropdown")[0]
112128
checkForInput = CUI.dom.matchSelector(selectedElement, ".cui-input.cui-data-field")[0]
113129
checkForDANTEInput = CUI.dom.matchSelector(selectedElement, ".pluginDirectSelectEditInput")[0]
130+
checkForLinkedObjecttype = CUI.dom.matchSelector(selectedElement, ".ez-linked-object-edit-object")[0]
131+
114132
if ! checkForDropdown && ! checkForInput
115133
noxbuttonuseclass = 'noxbutton'
116134
if checkForDANTEInput
@@ -130,7 +148,7 @@ class ez5.ShowPoolDefaultValuesInMask extends CustomMaskSplitter
130148
# get type
131149
type = domData.__cls
132150

133-
# if dante
151+
# if dante or objecttype
134152
if type == 'Form'
135153
domData.unsetData()
136154
domData.opts.data = {}
@@ -211,20 +229,22 @@ class ez5.ShowPoolDefaultValuesInMask extends CustomMaskSplitter
211229
CUI.dom.addClass(defaultLabelElement, 'show')
212230

213231
# listen for changes in field and show or hide buttons
232+
if selectedElement[0]
233+
selectedNode = selectedElement[0]
234+
else
235+
selectedNode = selectedElement
236+
237+
# dante and input
214238
CUI.Events.listen
215239
type: ["data-changed"]
216-
node: selectedElement[0]
240+
node: selectedNode
217241
call: (ev, info) =>
218242
# if value is not empty, hide default value and show button
219243
hasValue = false
220244
if opts.data[field.ColumnSchema.name]
221245
hasValue = true
222246
if opts.data[field.ColumnSchema.name] == null || opts.data[field.ColumnSchema.name] == {}
223247
hasValue = false
224-
if typeof opts.data[field.ColumnSchema.name] == 'object'
225-
if ! opts.data[field.ColumnSchema.name]?.conceptURI
226-
opts.data[field.ColumnSchema.name] = {}
227-
hasValue = false
228248

229249
if hasValue
230250
# show button
@@ -242,6 +262,30 @@ class ez5.ShowPoolDefaultValuesInMask extends CustomMaskSplitter
242262
node: selectedElement
243263
bubble: true
244264

265+
# linkedobjecttype
266+
CUI.Events.listen
267+
type: ["editor-changed"]
268+
node: selectedNode
269+
call: (ev, info) =>
270+
# if value is not empty, hide default value and show button
271+
hasValue = false
272+
if opts.data[field.ColumnSchema.name]
273+
hasValue = true
274+
if opts.data[field.ColumnSchema.name] == null || opts.data[field.ColumnSchema.name] == {}
275+
hasValue = false
276+
277+
if hasValue
278+
# show button
279+
CUI.dom.addClass(xButton, 'show')
280+
# show default value
281+
CUI.dom.removeClass(defaultLabelElement, 'show')
282+
else
283+
# hide button
284+
CUI.dom.removeClass(xButton, 'show')
285+
# hide default value
286+
CUI.dom.addClass(defaultLabelElement, 'show')
287+
288+
245289
div = CUI.dom.element("div", class: "fylr-plugin-default-values-from-pool" )
246290
return CUI.dom.append(div, verticalLayout)
247291

@@ -254,6 +298,9 @@ class ez5.ShowPoolDefaultValuesInMask extends CustomMaskSplitter
254298
if fields
255299
field = fields[0]
256300

301+
if !field
302+
return
303+
257304
fieldType = field.ColumnSchema.type
258305
if ! fieldType in that._getAllowedFieldTypes()
259306
return
@@ -275,10 +322,12 @@ class ez5.ShowPoolDefaultValuesInMask extends CustomMaskSplitter
275322
if typeof fieldValue == 'object'
276323
if fieldValue?.conceptName
277324
fieldValue = fieldValue.conceptName
278-
else
279-
if defaultValueFromPool?.conceptName
325+
else if defaultValueFromPool?.conceptName
280326
fieldValue = defaultValueFromPool.conceptName
281327
isDefaultValue = true
328+
else if fieldValue?._standard
329+
fieldValue = fieldValue?._standard[1]?.text[frontendLanguage]
330+
isDefaultValue = false
282331
else if typeof fieldValue == 'string' || typeof fieldValue == 'undefined'
283332
if fieldValue == '' || fieldValue == undefined
284333
if defaultValueFromPool?.conceptName

src/webfrontend/pool-manager-default-values.coffee

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ class ez5.PoolManagerDefaultValues extends ez5.PoolPlugin
1414

1515
fields = []
1616

17-
# build fields (only input and dante are allowed)
17+
# build fields (only input, dante are allowed)
1818
for field in config.data_table
1919

2020
if field?.fieldname && field?.label && field?.objecttype && field?.fieldtype
2121

22+
##########################################################################################
2223
# input text_online
24+
##########################################################################################
2325
if field.fieldtype == 'input'
2426
newField =
2527
type: CUI.Input
@@ -30,10 +32,13 @@ class ez5.PoolManagerDefaultValues extends ez5.PoolPlugin
3032
hint: 'Objecttype: ' + field.objecttype + ' - Fieldname: ' + field.fieldname
3133
fields.push newField
3234

35+
##########################################################################################
36+
# DANTE-field
37+
##########################################################################################
3338
if field.fieldtype == 'dante'
3439
newField =
3540
type: CUI.DataFieldProxy
36-
# but save-button does not
41+
name: 'dante'
3742
element: ((field) ->
3843
return (datafield) ->
3944
data = datafield.getData()
@@ -62,6 +67,55 @@ class ez5.PoolManagerDefaultValues extends ez5.PoolPlugin
6267
hint: 'Objecttype: ' + field.objecttype + ' - Fieldname: ' + field.fieldname
6368
fields.push newField
6469

70+
##########################################################################################
71+
# Objecttype-Link
72+
##########################################################################################
73+
if field.fieldtype.startsWith 'record' && field?.fieldname_datamodel != ''
74+
objecttype = field?.objecttype
75+
linkedObjecttype = field?.fieldtype.split('|||')[1]
76+
fieldnameDatamodel = field?.fieldname_datamodel
77+
schemaTable = ez5.schema.CURRENT._table_by_name?[objecttype]
78+
if !schemaTable
79+
console.log "schemaTable not found. field: ", field
80+
return
81+
82+
# loop through all tables and find fieldSchema
83+
fieldSchema = false
84+
_preferred_mask = schemaTable._preferred_mask
85+
maskFields = schemaTable._preferred_mask.fields
86+
87+
for maskField in maskFields
88+
if maskField?._column?.name == fieldnameDatamodel
89+
fieldSchema = maskField
90+
break
91+
if !fieldSchema
92+
console.log "fieldSchema not found. field: ", field
93+
return
94+
95+
masks = ez5.mask.CURRENT._masks_by_table_id[schemaTable.table_id]
96+
mask = false
97+
# loop through all masks and find the one with the name __all_fields
98+
for maskEntry in masks
99+
if maskEntry.name.endsWith '__all_fields'
100+
mask = maskEntry
101+
break
102+
if !mask
103+
mask = masks[0]
104+
105+
mask = new Mask("CURRENT", mask.mask_id)
106+
107+
newField =
108+
type: CUI.DataFieldProxy
109+
name: 'linkedObject'
110+
element: (field) =>
111+
linkedObjectField = new LinkedObject(mask, fieldSchema)
112+
linkedObjectField = linkedObjectField.renderEditorInput(@_pool.data.pool.custom_data, {}, {})
113+
return linkedObjectField
114+
form:
115+
label: field.label
116+
hint: 'Objecttype: ' + field.objecttype + ' - Fieldname: ' + field.fieldname
117+
fields.push newField
118+
65119
that = @
66120
tabs.push
67121
name: $$('defaultvaluesfrompool.pool.manager.default.values.tab.headline')

0 commit comments

Comments
 (0)