Search screen now supports String fields with Selection instances as validators.
This commit is contained in:
parent
c37fa93858
commit
2ecd2d7ef1
|
@ -1,6 +1,6 @@
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
import re, os, os.path, Cookie
|
import re, os, os.path, Cookie
|
||||||
from appy.gen import Type, Search
|
from appy.gen import Type, Search, Selection
|
||||||
from appy.gen.utils import FieldDescr, SomeObjects, sequenceTypes
|
from appy.gen.utils import FieldDescr, SomeObjects, sequenceTypes
|
||||||
from appy.gen.plone25.mixins import AbstractMixin
|
from appy.gen.plone25.mixins import AbstractMixin
|
||||||
from appy.gen.plone25.mixins.FlavourMixin import FlavourMixin
|
from appy.gen.plone25.mixins.FlavourMixin import FlavourMixin
|
||||||
|
@ -683,4 +683,20 @@ class ToolMixin(AbstractMixin):
|
||||||
def getMonthName(self, monthNumber):
|
def getMonthName(self, monthNumber):
|
||||||
'''Gets the translated month name of month numbered p_monthNumber.'''
|
'''Gets the translated month name of month numbered p_monthNumber.'''
|
||||||
return self.translate(self.monthsIds[int(monthNumber)], domain='plone')
|
return self.translate(self.monthsIds[int(monthNumber)], domain='plone')
|
||||||
|
|
||||||
|
def getSelectValues(self, appyType):
|
||||||
|
'''Return the possible values (with their translation) of String type
|
||||||
|
p_appyType (dict version) which is a string whose validator limits
|
||||||
|
the possible values, either statically (validator is simply a list
|
||||||
|
of values) or dynamically (validator is a Selection instance).'''
|
||||||
|
validator = appyType['validator']
|
||||||
|
if isinstance(validator, Selection):
|
||||||
|
vocab = self._appy_getDynamicDisplayList(validator.methodName)
|
||||||
|
return vocab.items()
|
||||||
|
else:
|
||||||
|
res = []
|
||||||
|
for v in validator:
|
||||||
|
text = self.translate('%s_list_%s' % (appyType['label'], v))
|
||||||
|
res.append((v, self.truncate(text, 70)))
|
||||||
|
return res
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1014,10 +1014,16 @@ class AbstractMixin:
|
||||||
args = elems[1:]
|
args = elems[1:]
|
||||||
else:
|
else:
|
||||||
args = ()
|
args = ()
|
||||||
|
# On what object must be call the method that will produce the values?
|
||||||
|
obj = self
|
||||||
|
if methodName.startswith('tool:'):
|
||||||
|
obj = self.getTool()
|
||||||
|
methodName = methodName[5:]
|
||||||
|
# Do we need to call the method on the object or on the wrapper?
|
||||||
if methodName.startswith('_appy_'):
|
if methodName.startswith('_appy_'):
|
||||||
exec 'res = self.%s(*args)' % methodName
|
exec 'res = obj.%s(*args)' % methodName
|
||||||
else:
|
else:
|
||||||
exec 'res = self.appy().%s(*args)' % methodName
|
exec 'res = obj.appy().%s(*args)' % methodName
|
||||||
return self.getProductConfig().DisplayList(tuple(res))
|
return self.getProductConfig().DisplayList(tuple(res))
|
||||||
|
|
||||||
nullValues = (None, '', ' ')
|
nullValues = (None, '', ' ')
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
<tal:comment replace="nothing">Show a multi-selection box for fields whose validator defines a list of values.</tal:comment>
|
<tal:comment replace="nothing">Show a multi-selection box for fields whose validator defines a list of values.</tal:comment>
|
||||||
<tal:selectSearch condition="appyType/isSelect">
|
<tal:selectSearch condition="appyType/isSelect">
|
||||||
<select tal:attributes="name widgetName" multiple="multiple" size="5">
|
<select tal:attributes="name widgetName" multiple="multiple" size="5">
|
||||||
<option tal:repeat="v appyType/validator" tal:attributes="value v"
|
<option tal:repeat="v python:tool.getSelectValues(appyType)"
|
||||||
tal:content="python: tool.truncate(tool.translate('%s_list_%s' % (appyType['label'], v)), 70)">
|
tal:attributes="value python:v[0]" tal:content="python: v[1]">
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</tal:selectSearch><br/>
|
</tal:selectSearch><br/>
|
||||||
|
|
Loading…
Reference in a new issue