Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Eteri
erp5
Commits
6a893b8d
Commit
6a893b8d
authored
Aug 29, 2017
by
Tomáš Peterka
Committed by
Tomáš Peterka
Aug 29, 2017
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[json_style] Add FormBoxField to getHateoas and refactor json_style/Base_edit
parent
a5a2f1cd
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
219 additions
and
270 deletions
+219
-270
bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/Base_edit.py
...emplateItem/portal_skins/erp5_hal_json_style/Base_edit.py
+59
-72
bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.py
...rtal_skins/erp5_hal_json_style/ERP5Document_getHateoas.py
+160
-198
No files found.
bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/Base_edit.py
View file @
6a893b8d
"""
"""Handle form - REQUEST interaction.
This script validates a form to the current REQUEST,
processes the REQUEST to extract form data and editors,
- Validate a form to the current REQUEST
then updates the current context with the form data
- Extract form data and editors from REQUEST,
by calling edit on it or by invoking editors.
- Update current context with form data by calling edit or invoking editors
:param silent: int (0|1) means that the edit action is not invoked by a form
submit but rather by an internal code thus the return value
contains as much usefull info as possible
TODO: split the generic form validation logic
TODO: split the generic form validation logic
from the context update logic
from the context update logic
...
@@ -36,7 +40,7 @@ if not silent_mode and not request.AUTHENTICATED_USER.has_permission('Modify por
...
@@ -36,7 +40,7 @@ if not silent_mode and not request.AUTHENTICATED_USER.has_permission('Modify por
try
:
try
:
# Validate
# Validate
form
.
validate_all_to_request
(
request
,
key_prefix
=
key_prefix
)
form
.
validate_all_to_request
(
request
,
key_prefix
=
key_prefix
)
except
FormValidationError
,
validation_errors
:
except
FormValidationError
as
validation_errors
:
# Pack errors into the request
# Pack errors into the request
field_errors
=
form
.
ErrorFields
(
validation_errors
)
field_errors
=
form
.
ErrorFields
(
validation_errors
)
request
.
set
(
'field_errors'
,
field_errors
)
request
.
set
(
'field_errors'
,
field_errors
)
...
@@ -51,37 +55,39 @@ except FormValidationError, validation_errors:
...
@@ -51,37 +55,39 @@ except FormValidationError, validation_errors:
request
.
RESPONSE
.
setStatus
(
400
)
request
.
RESPONSE
.
setStatus
(
400
)
return
context
.
ERP5Document_getHateoas
(
form
=
form
,
REQUEST
=
request
,
mode
=
'form'
)
return
context
.
ERP5Document_getHateoas
(
form
=
form
,
REQUEST
=
request
,
mode
=
'form'
)
def
editListBox
(
listbox_field
,
listbox
):
def
editListBox
(
listbox_field
,
listbox
):
""" Function called to edit a listbox
"""Go through every item in the listbox and call its `edit` with modified values."""
"""
if
listbox
is
None
:
if
listbox
is
not
None
:
return
gv
=
{}
if
listbox_field
.
has_value
(
'global_attributes'
):
# extract hidden (global) attributes from request to be used in listbox's update
hidden_attributes
=
map
(
lambda
x
:
x
[
0
],
listbox_field
.
get_value
(
'global_attributes'
))
global_attr
=
{
hidden_key
:
getattr
(
request
,
hidden_key
,
None
)
for
k
in
hidden_attributes
:
for
hidden_key
,
_
in
listbox_field
.
get_value
(
'global_attributes'
)}
\
gv
[
k
]
=
getattr
(
request
,
k
,
None
)
if
listbox_field
.
has_value
(
'global_attributes'
)
\
for
url
,
v
in
listbox
.
items
():
else
{}
v
.
update
(
gv
)
for
item_url
,
item_value
in
listbox
.
items
():
item_value
.
update
(
global_attr
)
# Form: '' -> ERP5: None
# Form: '' -> ERP5: None
encapsulated_editor_list
=
[]
editor_list
=
[]
cleaned_v
=
{}
value_dict
=
{}
for
key
,
value
in
v
.
items
():
for
key
,
value
in
item_value
.
items
():
# for every value decide whether it is an attribute or an editor
if
hasattr
(
value
,
'edit'
):
if
hasattr
(
value
,
'edit'
):
encapsulated_
editor_list
.
append
(
value
)
editor_list
.
append
(
value
)
else
:
else
:
if
value
==
''
:
value_dict
[
key
]
=
value
if
value
!=
''
else
None
value
=
None
cleaned_v
[
key
]
=
value
if
cleaned_v
:
if
value_dict
:
if
listbox_edit
is
None
:
if
listbox_edit
is
None
:
obj
=
context
.
restrictedTraverse
(
url
)
obj
=
context
.
restrictedTraverse
(
item_url
)
obj
.
edit
(
edit_order
=
edit_order
,
**
cleaned_v
)
obj
.
edit
(
edit_order
=
edit_order
,
**
value_dict
)
for
editor
in
editor_list
:
editor
.
edit
(
obj
)
else
:
else
:
listbox_edit
(
url
,
edit_order
,
cleaned_v
)
listbox_edit
(
item_url
,
edit_order
,
value_dict
)
for
encapsulated_editor
in
encapsulated_editor_list
:
encapsulated_editor
.
edit
(
obj
)
def
editMatrixBox
(
matrixbox_field
,
matrixbox
):
def
editMatrixBox
(
matrixbox_field
,
matrixbox
):
""" Function called to edit a Matrix box
""" Function called to edit a Matrix box
...
@@ -184,43 +190,24 @@ def editMatrixBox(matrixbox_field, matrixbox):
...
@@ -184,43 +190,24 @@ def editMatrixBox(matrixbox_field, matrixbox):
else
:
else
:
return
"Cell %s does not exist"
%
str
(
k
)
return
"Cell %s does not exist"
%
str
(
k
)
field_prefix_len
=
len
(
field_prefix
)
def
parseField
(
f
):
edit_kwargs
=
{}
# keyword arguments for `edit` function on context
"""
encapsulated_editor_list
=
[]
# editors placed inside REQUEST object
Parse given form field, to put them in
MARKER
=
[]
# placeholder for an empty value
kw or in encapsulated_editor_list
"""
k
=
f
.
id
if
f
.
has_value
(
'alternate_name'
):
k
=
f
.
get_value
(
'alternate_name'
)
or
f
.
id
v
=
getattr
(
request
,
k
,
MARKER
)
if
hasattr
(
v
,
'edit'
):
# This is an encapsulated editor
# call it
encapsulated_editor_list
.
append
(
v
)
elif
v
is
not
MARKER
:
if
k
.
startswith
(
field_prefix
):
# We only take into account
# the object attributes
k
=
k
[
field_prefix_len
:]
# Form: '' -> ERP5: None
if
v
==
''
:
v
=
None
kw
[
k
]
=
v
# Some initilizations
kw
=
{}
encapsulated_editor_list
=
[]
MARKER
=
[]
message
=
Base_translateString
(
"Data updated."
)
message
=
Base_translateString
(
"Data updated."
)
try
:
try
:
# We process all the field in form and
# extract all listbox's object form fields from the request and `edit` the object
# we check if they are in the request,
# then we edit them
for
field
in
form
.
get_fields
():
for
field
in
form
.
get_fields
():
parseField
(
field
)
# Dispatch field either to `edit_kwargs` (in case of simple fields) or to `encapsulated_editor_list` in case of editors
field_name
=
field
.
id
if
not
field
.
has_value
(
'alternate_name'
)
else
(
field
.
get_value
(
'alternate_name'
)
or
field
.
id
)
field_value
=
getattr
(
request
,
field_name
,
MARKER
)
if
hasattr
(
field_value
,
'edit'
):
# field is an encapsulated editor; call it later
encapsulated_editor_list
.
append
(
field_value
)
elif
field_value
is
not
MARKER
and
field_name
.
startswith
(
field_prefix
):
# object own attribute (fix value Form: '' -> ERP5: None)
edit_kwargs
[
field_name
[
len
(
field_prefix
):]]
=
field_value
if
field_value
!=
''
else
None
## XXX We need to find a way not to use meta_type.
## XXX We need to find a way not to use meta_type.
field_meta_type
=
field
.
meta_type
field_meta_type
=
field
.
meta_type
...
@@ -229,19 +216,19 @@ try:
...
@@ -229,19 +216,19 @@ try:
if
(
field_meta_type
==
'ListBox'
):
if
(
field_meta_type
==
'ListBox'
):
editListBox
(
field
,
request
.
get
(
field
.
id
))
editListBox
(
field
,
request
.
get
(
field
.
id
))
el
if
(
field_meta_type
==
'MatrixBox'
):
if
(
field_meta_type
==
'MatrixBox'
):
editMatrixBox
(
field
,
request
.
get
(
field
.
id
))
editMatrixBox
(
field
,
request
.
get
(
field
.
id
))
# Return parsed values
# Return parsed values
if
silent_mode
:
return
(
kw
,
encapsulated_editor_list
),
'edit'
if
silent_mode
:
return
(
edit_kwargs
,
encapsulated_editor_list
),
'edit'
# Maybe we should build a list of objects we need
# Maybe we should build a list of objects we need
# Update basic attributes
# Update basic attributes
context
.
edit
(
REQUEST
=
request
,
edit_order
=
edit_order
,
**
kw
)
context
.
edit
(
REQUEST
=
request
,
edit_order
=
edit_order
,
**
edit_kwargs
)
for
encapsulated_editor
in
encapsulated_editor_list
:
for
encapsulated_editor
in
encapsulated_editor_list
:
encapsulated_editor
.
edit
(
context
)
encapsulated_editor
.
edit
(
context
)
except
ActivityPendingError
,
e
:
except
ActivityPendingError
as
e
:
message
=
Base_translateString
(
"%s"
%
e
)
message
=
Base_translateString
(
str
(
e
)
)
if
message_only
:
if
message_only
:
return
message
return
message
...
...
bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.py
View file @
6a893b8d
...
@@ -93,106 +93,91 @@ def getFieldDefault(traversed_document, field, key, value=None):
...
@@ -93,106 +93,91 @@ def getFieldDefault(traversed_document, field, key, value=None):
result
=
"%s"
%
result
result
=
"%s"
%
result
return
result
return
result
def
renderField
(
traversed_document
,
field
,
form_relative_url
,
value
=
None
,
meta_type
=
None
,
key
=
None
,
key_prefix
=
None
,
selection_params
=
None
):
def
renderField
(
traversed_document
,
field
,
form_relative_url
,
value
=
None
,
meta_type
=
None
,
key
=
None
,
key_prefix
=
None
,
selection_params
=
None
):
"""Extract important field's attributes into `result` dictionary."""
if
meta_type
is
None
:
if
meta_type
is
None
:
meta_type
=
field
.
meta_type
meta_type
=
field
.
meta_type
if
key
is
None
:
if
key
is
None
:
key
=
field
.
generate_field_key
(
key_prefix
=
key_prefix
)
key
=
field
.
generate_field_key
(
key_prefix
=
key_prefix
)
if
meta_type
==
"ProxyField"
:
result
=
renderField
(
traversed_document
,
field
,
form_relative_url
,
value
,
meta_type
=
field
.
getRecursiveTemplateField
().
meta_type
,
key
=
key
,
key_prefix
=
key_prefix
,
selection_params
=
selection_params
)
elif
meta_type
==
"ListField"
:
result
=
{
result
=
{
"type"
:
meta_type
,
"type"
:
meta_type
,
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"key"
:
key
,
"key"
:
key
,
"editable"
:
field
.
get_value
(
"editable"
),
"css_class"
:
field
.
get_value
(
"css_class"
),
"css_class"
:
field
.
get_value
(
"css_class"
),
"editable"
:
field
.
get_value
(
"editable"
),
"hidden"
:
field
.
get_value
(
"hidden"
),
"hidden"
:
field
.
get_value
(
"hidden"
),
"description"
:
field
.
get_value
(
"description"
),
"description"
:
field
.
get_value
(
"description"
),
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
}
"required"
:
field
.
get_value
(
"required"
),
if
"Field"
in
meta_type
:
# fields have default value and can be required (unlike boxes)
result
.
update
({
"required"
:
field
.
get_value
(
"required"
)
if
field
.
has_value
(
"required"
)
else
None
,
"default"
:
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
),
})
if
meta_type
==
"ProxyField"
:
return
renderField
(
traversed_document
,
field
,
form_relative_url
,
value
,
meta_type
=
field
.
getRecursiveTemplateField
().
meta_type
,
key
=
key
,
key_prefix
=
key_prefix
,
selection_params
=
selection_params
)
if
meta_type
in
(
"ListField"
,
"RadioField"
,
"ParallelListField"
,
"MultiListField"
):
result
.
update
({
# XXX Message can not be converted to json as is
# XXX Message can not be converted to json as is
"items"
:
field
.
get_value
(
"items"
),
"items"
:
field
.
get_value
(
"items"
),
})
if
meta_type
==
"ListField"
:
result
.
update
({
"first_item"
:
field
.
get_value
(
"first_item"
),
"first_item"
:
field
.
get_value
(
"first_item"
),
}
})
result
[
"default"
]
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
elif
meta_type
==
"RadioField"
:
if
meta_type
==
"RadioField"
:
result
=
{
result
.
update
({
"type"
:
meta_type
,
"key"
:
key
,
"editable"
:
field
.
get_value
(
"editable"
),
"css_class"
:
field
.
get_value
(
"css_class"
),
"hidden"
:
field
.
get_value
(
"hidden"
),
"description"
:
field
.
get_value
(
"description"
),
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"required"
:
field
.
get_value
(
"required"
),
"items"
:
field
.
get_value
(
"items"
),
"select_first_item"
:
field
.
get_value
(
"first_item"
),
"select_first_item"
:
field
.
get_value
(
"first_item"
),
"orientation"
:
field
.
get_value
(
"orientation"
),
"orientation"
:
field
.
get_value
(
"orientation"
),
}
})
result
[
"default"
]
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
if
meta_type
in
(
"ParallelListField"
,
"MultiListField"
):
elif
meta_type
in
(
"ParallelListField"
,
"MultiListField"
):
result
.
update
({
result
=
{
"sub_select_key"
:
traversed_document
.
Field_getSubFieldKeyDict
(
field
,
'default:list'
,
key
=
result
[
"key"
]),
"type"
:
meta_type
,
"sub_input_key"
:
"default_"
+
traversed_document
.
Field_getSubFieldKeyDict
(
field
,
'default:list:int'
,
key
=
result
[
"key"
])
"key"
:
key
,
})
"editable"
:
field
.
get_value
(
"editable"
),
return
result
"css_class"
:
field
.
get_value
(
"css_class"
),
"hidden"
:
field
.
get_value
(
"hidden"
),
if
meta_type
in
(
"StringField"
,
"FloatField"
,
"EmailField"
,
"TextAreaField"
,
"description"
:
field
.
get_value
(
"description"
),
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"required"
:
field
.
get_value
(
"required"
),
# XXX Message can not be converted to json as is
"items"
:
field
.
get_value
(
"items"
)
}
result
[
"default"
]
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
result
[
"sub_select_key"
]
=
traversed_document
.
Field_getSubFieldKeyDict
(
field
,
'default:list'
,
key
=
result
[
"key"
])
result
[
"sub_input_key"
]
=
"default_"
+
traversed_document
.
Field_getSubFieldKeyDict
(
field
,
'default:list:int'
,
key
=
result
[
"key"
])
elif
meta_type
in
(
"StringField"
,
"FloatField"
,
"EmailField"
,
"TextAreaField"
,
"LinesField"
,
"ImageField"
,
"FileField"
,
"IntegerField"
,
"LinesField"
,
"ImageField"
,
"FileField"
,
"IntegerField"
,
"PasswordField"
,
"EditorField"
):
"PasswordField"
,
"EditorField"
):
result
=
{
"type"
:
meta_type
,
"key"
:
key
,
"editable"
:
field
.
get_value
(
"editable"
),
"css_class"
:
field
.
get_value
(
"css_class"
),
"hidden"
:
field
.
get_value
(
"hidden"
),
"description"
:
field
.
get_value
(
"description"
),
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"required"
:
field
.
get_value
(
"required"
),
}
result
[
"default"
]
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
if
meta_type
==
"FloatField"
:
if
meta_type
==
"FloatField"
:
result
[
"precision"
]
=
field
.
get_value
(
"precision"
)
result
[
"precision"
]
=
field
.
get_value
(
"precision"
)
if
meta_type
==
"ImageField"
:
if
meta_type
==
"ImageField"
:
options
=
{}
options
=
{
options
[
'display'
]
=
field
.
get_value
(
'image_display'
)
'display'
:
field
.
get_value
(
'image_display'
),
options
[
'format'
]
=
field
.
get_value
(
'image_format'
)
'format'
:
field
.
get_value
(
'image_format'
),
options
[
'quality'
]
=
field
.
get_value
(
'image_quality'
)
'quality'
:
field
.
get_value
(
'image_quality'
),
pre_converted_only
=
field
.
get_value
(
'image_pre_converted_only'
)
'pre_converted_only'
:
field
.
get_value
(
'image_pre_converted_only'
)
if
pre_converted_only
:
}
options
[
'pre_converted_only'
]
=
pre_converted_only
parameters
=
'&'
.
join
([
'%s=%s'
%
(
k
,
v
)
for
k
,
v
in
options
.
items
()
\
if
not
options
[
'pre_converted_only'
]:
if
v
])
del
options
[
'pre_converted_only'
]
parameters
=
'&'
.
join
((
'%s=%s'
%
(
k
,
v
)
for
k
,
v
in
options
.
items
()
if
v
))
if
parameters
:
if
parameters
:
result
[
"default"
]
=
'%s?%s'
%
(
result
[
"default"
],
parameters
)
result
[
"default"
]
=
'%s?%s'
%
(
result
[
"default"
],
parameters
)
return
result
elif
meta_type
==
"DateTimeField"
:
if
meta_type
==
"DateTimeField"
:
result
=
{
result
.
update
({
"type"
:
meta_type
,
"key"
:
key
,
"editable"
:
field
.
get_value
(
"editable"
),
"css_class"
:
field
.
get_value
(
"css_class"
),
"hidden"
:
field
.
get_value
(
"hidden"
),
"description"
:
field
.
get_value
(
"description"
),
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"required"
:
field
.
get_value
(
"required"
),
"date_only"
:
field
.
get_value
(
"date_only"
),
"date_only"
:
field
.
get_value
(
"date_only"
),
"ampm_time_style"
:
field
.
get_value
(
"ampm_time_style"
),
"ampm_time_style"
:
field
.
get_value
(
"ampm_time_style"
),
"timezone_style"
:
field
.
get_value
(
"timezone_style"
),
"timezone_style"
:
field
.
get_value
(
"timezone_style"
),
"allow_empty_time"
:
field
.
get_value
(
'allow_empty_time'
),
"allow_empty_time"
:
field
.
get_value
(
'allow_empty_time'
),
"hide_day"
:
field
.
get_value
(
'hide_day'
),
"hide_day"
:
field
.
get_value
(
'hide_day'
),
"hidden_day_is_last_day"
:
field
.
get_value
(
'hidden_day_is_last_day'
),
"hidden_day_is_last_day"
:
field
.
get_value
(
'hidden_day_is_last_day'
),
}
}
)
date_value
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
date_value
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
if
not
date_value
and
field
.
get_value
(
'default_now'
):
if
not
date_value
and
field
.
get_value
(
'default_now'
):
date_value
=
DateTime
()
date_value
=
DateTime
()
...
@@ -204,8 +189,9 @@ def renderField(traversed_document, field, form_relative_url, value=None, meta_t
...
@@ -204,8 +189,9 @@ def renderField(traversed_document, field, form_relative_url, value=None, meta_t
result
[
"default"
]
=
date_value
result
[
"default"
]
=
date_value
for
subkey
in
(
"year"
,
"month"
,
"day"
,
"hour"
,
"minute"
,
"ampm"
,
"timezone"
):
for
subkey
in
(
"year"
,
"month"
,
"day"
,
"hour"
,
"minute"
,
"ampm"
,
"timezone"
):
result
[
"subfield_%s_key"
%
subkey
]
=
traversed_document
.
Field_getSubFieldKeyDict
(
field
,
subkey
,
key
=
result
[
"key"
])
result
[
"subfield_%s_key"
%
subkey
]
=
traversed_document
.
Field_getSubFieldKeyDict
(
field
,
subkey
,
key
=
result
[
"key"
])
return
result
el
if
meta_type
in
(
"RelationStringField"
,
"MultiRelationStringField"
):
if
meta_type
in
(
"RelationStringField"
,
"MultiRelationStringField"
):
portal_type_list
=
field
.
get_value
(
'portal_type'
)
portal_type_list
=
field
.
get_value
(
'portal_type'
)
translated_portal_type
=
[]
translated_portal_type
=
[]
jump_reference_list
=
[]
jump_reference_list
=
[]
...
@@ -239,35 +225,35 @@ def renderField(traversed_document, field, form_relative_url, value=None, meta_t
...
@@ -239,35 +225,35 @@ def renderField(traversed_document, field, form_relative_url, value=None, meta_t
listbox_ids
=
[(
'Base_viewRelatedObjectListBase/listbox'
,
'default'
)]
listbox_ids
=
[(
'Base_viewRelatedObjectListBase/listbox'
,
'default'
)]
listbox
=
{}
listbox
=
{}
for
grain
in
listbox_ids
:
for
(
listbox_path
,
listbox_name
)
in
listbox_ids
:
tmp
=
grain
[
0
].
split
(
'/'
)
(
listbox_form_name
,
listbox_field_name
)
=
listbox_path
.
split
(
'/'
,
2
)
form
=
getattr
(
context
,
tmp
[
0
]
)
form
=
getattr
(
context
,
listbox_form_name
)
for
listbox_field
in
form
.
get_fields
():
# find listbox field
if
listbox_field
.
getId
()
==
tmp
[
1
]:
listbox_form_field
=
filter
(
lambda
f
:
f
.
getId
()
==
listbox_field_name
,
form
.
get_fields
())[
0
]
#
get original definition
#
get original definition
result
=
renderField
(
context
,
listbox
_field
,
getFormRelativeUrl
(
form
))
subfield
=
renderField
(
context
,
listbox_form
_field
,
getFormRelativeUrl
(
form
))
#
overwrite, like Base_getRelatedObjectParameter does
#
overwrite, like Base_getRelatedObjectParameter does
if
result
[
"portal_type"
]
==
[]:
if
subfield
[
"portal_type"
]
==
[]:
result
[
"portal_type"
]
=
field
.
get_value
(
'portal_type'
)
subfield
[
"portal_type"
]
=
field
.
get_value
(
'portal_type'
)
result
[
"query"
]
=
url_template_dict
[
"jio_search_template"
]
%
{
subfield
[
"query"
]
=
url_template_dict
[
"jio_search_template"
]
%
{
"query"
:
make_query
({
"query"
:
sql_catalog
.
buildQuery
(
"query"
:
make_query
({
"query"
:
sql_catalog
.
buildQuery
(
dict
(
portal_type
=
[
x
[
-
1
]
for
x
in
result
[
"portal_type"
]],
dict
(
portal_type
=
[
x
[
-
1
]
for
x
in
subfield
[
"portal_type"
]],
**
result
[
"default_params"
]),
ignore_unknown_columns
=
True
**
subfield
[
"default_params"
]),
ignore_unknown_columns
=
True
).
asSearchTextExpression
(
sql_catalog
)})
).
asSearchTextExpression
(
sql_catalog
)})
}
}
result
.
pop
(
"list_method_template"
,
None
)
# Kato: why?
result
[
"list_method"
]
=
"portal_catalog"
if
"list_method_template"
in
subfield
:
result
[
"title"
]
=
Base_translateString
(
title
)
del
subfield
[
"list_method_template"
]
subfield
[
"list_method"
]
=
"portal_catalog"
subfield
[
"title"
]
=
Base_translateString
(
title
)
#set default listbox's column list to relation's column list
#set default listbox's column list to relation's column list
if
tmp
[
0
]
==
'Base_viewRelatedObjectListBase'
and
len
(
column_list
)
>
0
:
if
listbox_form_name
==
'Base_viewRelatedObjectListBase'
and
len
(
column_list
)
>
0
:
result
[
"column_list"
]
=
[]
subfield
[
"column_list"
]
=
[]
for
tmp_column
in
column_list
:
for
tmp_column
in
column_list
:
result
[
"column_list"
].
append
((
tmp_column
[
0
],
Base_translateString
(
tmp_column
[
1
])))
subfield
[
"column_list"
].
append
((
tmp_column
[
0
],
Base_translateString
(
tmp_column
[
1
])))
listbox
[
Base_translateString
(
grain
[
1
])]
=
result
listbox
[
Base_translateString
(
listbox_name
)]
=
subfield
break
result
=
{
result
.
update
(
{
"url"
:
relative_url
,
"url"
:
relative_url
,
"translated_portal_types"
:
translated_portal_type
,
"translated_portal_types"
:
translated_portal_type
,
"portal_types"
:
portal_type_list
,
"portal_types"
:
portal_type_list
,
...
@@ -275,73 +261,33 @@ def renderField(traversed_document, field, form_relative_url, value=None, meta_t
...
@@ -275,73 +261,33 @@ def renderField(traversed_document, field, form_relative_url, value=None, meta_t
"catalog_index"
:
field
.
get_value
(
'catalog_index'
),
"catalog_index"
:
field
.
get_value
(
'catalog_index'
),
"allow_jump"
:
field
.
get_value
(
'allow_jump'
),
"allow_jump"
:
field
.
get_value
(
'allow_jump'
),
"allow_creation"
:
field
.
get_value
(
'allow_creation'
),
"allow_creation"
:
field
.
get_value
(
'allow_creation'
),
"type"
:
meta_type
,
"key"
:
key
,
"editable"
:
field
.
get_value
(
"editable"
),
"css_class"
:
field
.
get_value
(
"css_class"
),
"hidden"
:
field
.
get_value
(
"hidden"
),
"description"
:
field
.
get_value
(
"description"
),
"title"
:
Base_translateString
(
title
),
"required"
:
field
.
get_value
(
"required"
),
"proxy_listbox_ids_len"
:
len
(
proxy_listbox_ids
),
"proxy_listbox_ids_len"
:
len
(
proxy_listbox_ids
),
"listbox"
:
listbox
"listbox"
:
listbox
,
}
})
tmp
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
if
isinstance
(
tmp
,
list
):
result
[
"default"
]
=
tmp
else
:
result
[
"default"
]
=
[
tmp
]
result
[
"relation_field_id"
]
=
traversed_document
.
Field_getSubFieldKeyDict
(
if
not
isinstance
(
result
[
"default"
],
list
):
field
,
result
[
"default"
]
=
[
result
[
"default"
],
]
"relation"
,
key
=
result
[
"key"
]
)
result
[
"relation_item_key"
]
=
traversed_document
.
Field_getSubFieldKeyDict
(
field
,
"item"
,
key
=
result
[
"key"
]
)
result
[
"relation_item_relative_url"
]
=
[
jump_reference
.
getRelativeUrl
()
for
jump_reference
in
jump_reference_list
]
elif
meta_type
==
"CheckBoxField"
:
result
.
update
({
result
=
{
"relation_field_id"
:
traversed_document
.
Field_getSubFieldKeyDict
(
field
,
"relation"
,
key
=
result
[
"key"
]),
"type"
:
meta_type
,
"relation_item_key"
:
traversed_document
.
Field_getSubFieldKeyDict
(
field
,
"item"
,
key
=
result
[
"key"
]),
"key"
:
key
,
"relation_item_relative_url"
:
[
jump_reference
.
getRelativeUrl
()
for
jump_reference
in
jump_reference_list
]
"editable"
:
field
.
get_value
(
"editable"
),
})
"css_class"
:
field
.
get_value
(
"css_class"
),
return
result
"hidden"
:
field
.
get_value
(
"hidden"
),
"description"
:
field
.
get_value
(
"description"
),
if
meta_type
in
(
"CheckBoxField"
,
"MultiCheckBoxField"
):
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
if
meta_type
==
"MultiCheckBoxField"
:
}
result
[
"items"
]
=
field
.
get_value
(
"items"
),
result
[
"default"
]
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
return
result
elif
meta_type
==
"MultiCheckBoxField"
:
result
=
{
if
meta_type
==
"GadgetField"
:
"type"
:
meta_type
,
result
.
update
({
"key"
:
key
,
"editable"
:
field
.
get_value
(
"editable"
),
"css_class"
:
field
.
get_value
(
"css_class"
),
"hidden"
:
field
.
get_value
(
"hidden"
),
"description"
:
field
.
get_value
(
"description"
),
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"required"
:
field
.
get_value
(
"required"
),
# XXX Message can not be converted to json as is
"items"
:
field
.
get_value
(
"items"
),
}
result
[
"default"
]
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
elif
meta_type
==
"GadgetField"
:
result
=
{
"type"
:
meta_type
,
"key"
:
key
,
"editable"
:
field
.
get_value
(
"editable"
),
"css_class"
:
field
.
get_value
(
"css_class"
),
"hidden"
:
field
.
get_value
(
"hidden"
),
"description"
:
field
.
get_value
(
"description"
),
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"url"
:
field
.
get_value
(
"gadget_url"
),
"url"
:
field
.
get_value
(
"gadget_url"
),
"sandbox"
:
field
.
get_value
(
"js_sandbox"
),
"sandbox"
:
field
.
get_value
(
"js_sandbox"
)
}
})
result
[
"default"
]
=
getFieldDefault
(
traversed_document
,
field
,
result
[
"key"
],
value
)
return
result
elif
meta_type
==
"ListBox"
:
if
meta_type
==
"ListBox"
:
"""Display list of objects with optional search/sort capabilities on columns from catalog."""
"""Display list of objects with optional search/sort capabilities on columns from catalog."""
_translate
=
Base_translateString
_translate
=
Base_translateString
...
@@ -424,39 +370,59 @@ def renderField(traversed_document, field, form_relative_url, value=None, meta_t
...
@@ -424,39 +370,59 @@ def renderField(traversed_document, field, form_relative_url, value=None, meta_t
# line["_relative_url"] = document.getRelativeUrl()
# line["_relative_url"] = document.getRelativeUrl()
# line_list.append(line)
# line_list.append(line)
result
=
{
result
.
update
({
"type"
:
meta_type
,
"editable"
:
field
.
get_value
(
"editable"
),
"column_list"
:
column_list
,
"column_list"
:
column_list
,
"search_column_list"
:
search_column_list
,
"search_column_list"
:
search_column_list
,
"sort"
:
field
.
get_value
(
'sort'
),
"sort"
:
field
.
get_value
(
'sort'
),
"sort_column_list"
:
sort_column_list
,
"sort_column_list"
:
sort_column_list
,
"editable_column_list"
:
editable_column_list
,
"editable_column_list"
:
editable_column_list
,
"show_anchor"
:
field
.
get_value
(
"anchor"
),
"show_anchor"
:
field
.
get_value
(
"anchor"
),
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"key"
:
key
,
"portal_type"
:
portal_types
,
"portal_type"
:
portal_types
,
"lines"
:
lines
,
"lines"
:
lines
,
"default_params"
:
default_params
,
"default_params"
:
default_params
,
"list_method"
:
list_method_name
,
"list_method"
:
list_method_name
,
}
"query"
:
url_template_dict
[
"jio_search_template"
]
%
{
"query"
:
make_query
({
"query"
:
sql_catalog
.
buildQuery
(
list_method_query_dict
,
ignore_unknown_columns
=
True
).
asSearchTextExpression
(
sql_catalog
)})}
})
if
(
list_method_custom
is
not
None
):
if
(
list_method_custom
is
not
None
):
result
[
"list_method_template"
]
=
list_method_custom
result
[
"list_method_template"
]
=
list_method_custom
return
result
result
[
"query"
]
=
url_template_dict
[
"jio_search_template"
]
%
{
if
meta_type
==
"FormBox"
:
"query"
:
make_query
({
"query"
:
sql_catalog
.
buildQuery
(
embedded_document
=
{
list_method_query_dict
,
ignore_unknown_columns
=
True
'_links'
:
{},
).
asSearchTextExpression
(
sql_catalog
)})
'_actions'
:
{},
}
}
else
:
# XXX Not implemented
# FormBox might have own context if 'context_method_id' is defined
result
=
{
formbox_context
=
traversed_document
if
field
.
get_value
(
'context_method_id'
):
# harness acquisition and call the method right away
formbox_context
=
getattr
(
traversed_document
,
field
.
get_value
(
'context_method_id'
))()
embedded_document
[
'_debug'
]
=
"Different context"
embeded_form
=
getattr
(
formbox_context
,
field
.
get_value
(
'formbox_target_id'
))
# renderForm mutates `embedded_document` therefor no return/assignment
renderForm
(
formbox_context
,
embeded_form
,
embedded_document
,
key_prefix
=
key
)
# fix editability which is hard-coded to 0 in `renderForm` implementation
embedded_document
[
'form_id'
][
'editable'
]
=
field
.
get_value
(
"editable"
)
# update result with rendered sub-form
result
[
'_embedded'
]
=
{
'_view'
:
embedded_document
}
return
result
# All other fields are not implemented and we'll return only basic info about them
return
{
"type"
:
meta_type
,
"type"
:
meta_type
,
"_debug"
:
"Unsupported field type"
,
"_debug"
:
"Unsupported field type"
,
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"title"
:
Base_translateString
(
field
.
get_value
(
"title"
)),
"key"
:
key
,
"key"
:
key
,
}
}
return
result
def
renderForm
(
traversed_document
,
form
,
response_dict
,
key_prefix
=
None
,
selection_params
=
None
):
def
renderForm
(
traversed_document
,
form
,
response_dict
,
key_prefix
=
None
,
selection_params
=
None
):
...
@@ -546,11 +512,6 @@ def renderForm(traversed_document, form, response_dict, key_prefix=None, selecti
...
@@ -546,11 +512,6 @@ def renderForm(traversed_document, form, response_dict, key_prefix=None, selecti
"required"
:
1
,
"required"
:
1
,
}
}
# response_dict["group_list"] = group_list
# rendered_response_dict["_embedded"] = {
# "form": raw_response_dict
# }
if
(
form
.
pt
==
'report_view'
):
if
(
form
.
pt
==
'report_view'
):
report_item_list
=
[]
report_item_list
=
[]
report_result_list
=
[]
report_result_list
=
[]
...
@@ -654,6 +615,7 @@ if relative_url:
...
@@ -654,6 +615,7 @@ if relative_url:
return
""
return
""
else
:
else
:
temp_traversed_document
=
context
temp_traversed_document
=
context
temp_is_site_root
=
(
temp_traversed_document
.
getPath
()
==
site_root
.
getPath
())
temp_is_site_root
=
(
temp_traversed_document
.
getPath
()
==
site_root
.
getPath
())
temp_is_portal
=
(
temp_traversed_document
.
getPath
()
==
portal
.
getPath
())
temp_is_portal
=
(
temp_traversed_document
.
getPath
()
==
portal
.
getPath
())
...
...
Boxiang Sun
@Daetalus
mentioned in commit
fbbf4c1e
·
Oct 06, 2017
mentioned in commit
fbbf4c1e
mentioned in commit fbbf4c1edcc502e43295fe7538bf4ac6aa44123e
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment