1 """A friendly criterion for ATTopic that matches the
2 SearchableTranslatedText index parameters.
3 """
4
5 from Products.CMFCore.permissions import View
6 from AccessControl import ClassSecurityInfo
7
8 from Products.Archetypes.atapi import Schema
9 from Products.Archetypes.atapi import StringField, StringWidget
10 from Products.Archetypes.atapi import LinesField, MultiSelectionWidget
11
12 from Products.ATContentTypes.criteria import registerCriterion
13 from Products.ATContentTypes.interfaces import IATTopicSearchCriterion
14 from Products.ATContentTypes.permission import ChangeTopics
15 from Products.ATContentTypes.criteria.base import ATBaseCriterion
16 from Products.ATContentTypes.criteria.schemata import ATBaseCriterionSchema
17
18 from Products.Archetypes.atapi import DisplayList
19
20 from platecom.ontocatalog import OntoCatalogMessageFactory as _
21
22
23 ATTranslationCriterionSchema = ATBaseCriterionSchema + Schema((
24 StringField('value',
25 required=1,
26 mode="rw",
27 write_permission=ChangeTopics,
28 accessor="Value",
29 mutator="setValue",
30 default="",
31 widget=StringWidget(
32 label=_(u'label_translation_criterion_value',
33 default=u'Value'),
34 description=_(u'help_translation_criterion_value',
35 default=u'A string value.'))
36 ),
37 LinesField('language',
38 required=1,
39 mode="rw",
40 write_permission=ChangeTopics,
41 accessor="Language",
42 mutator="setLanguage",
43 default=[],
44 vocabulary="getLanguages",
45 widget=MultiSelectionWidget(
46 label=_(u'label_translation_criterion_value',
47 default=u'Language'),
48 description=_(u'help_translation_criterion_value',
49 default=u'A list of languages.'))
50 ),
51
52 ))
53
54
56 """A translation text criterion"""
57
58 __implements__ = ATBaseCriterion.__implements__ + (IATTopicSearchCriterion,)
59
60 security = ClassSecurityInfo()
61 schema = ATTranslationCriterionSchema
62 meta_type = 'ATTranslationCriterion'
63 archetype_name = 'Friendly Translation Criterion'
64 shortDesc = 'Translation Criterion'
65
67 langs = self.portal_languages.getAvailableLanguages()
68
69 try:
70 display_list = DisplayList(zip(langs.keys(), \
71 [i['name'] for i in langs.values()]))
72 except:
73 display_list = DisplayList(zip(langs.keys(), \
74 [i for i in langs.values()]))
75
76 return display_list
77
78 security.declareProtected(View, 'getCriteriaItems')
80 result = []
81 value = self.Value()
82 language = self.Language()
83
84 if value is not '':
85 result.append((self.Field(), value))
86
87 if language is not '':
88 result.append((self.Field(),
89 {'query': value, 'language': language}))
90
91 return tuple(result)
92
93
94 registerCriterion(ATTranslationCriterion, ['TranslationIndex'])
95