Skip to content

Commit c3fc945

Browse files
authoredApr 25, 2024
Merge pull request #171 from syslabcom/scrum-2194-ddc-vocabularies
Allow customizing ddc vocabularies (and revert additions from daughters)
2 parents 914cbf5 + 58038c7 commit c3fc945

File tree

6 files changed

+48
-200
lines changed

6 files changed

+48
-200
lines changed
 

‎src/recensio/plone/adapter/indexer.py

+6-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from plone.indexer.decorator import indexer
2+
from recensio.plone.behaviors.base import DDCVocabulary
23
from recensio.plone.interfaces import IReview
3-
from zope.component import getUtility
4-
from zope.schema.interfaces import IVocabularyFactory
54

65

76
@indexer(IReview)
@@ -20,24 +19,22 @@ def authorsUID(obj):
2019
return uids
2120

2221

23-
def get_self_and_parents(value, vocab_name):
24-
vocab = getUtility(IVocabularyFactory, vocab_name)(None)
22+
def get_self_and_parents(obj, name):
23+
vocab = DDCVocabulary(name)(obj)
2524
values = set()
26-
for term in value:
25+
for term in getattr(obj, name):
2726
values.update(vocab.getTermPath(term))
2827
return list(values)
2928

3029

3130
@indexer(IReview)
3231
def ddcTime(obj):
33-
return get_self_and_parents(obj.ddcTime, "recensio.plone.vocabularies.epoch_values")
32+
return get_self_and_parents(obj, "ddcTime")
3433

3534

3635
@indexer(IReview)
3736
def ddcPlace(obj):
38-
return get_self_and_parents(
39-
obj.ddcPlace, "recensio.plone.vocabularies.region_values"
40-
)
37+
return get_self_and_parents(obj, "ddcPlace")
4138

4239

4340
@indexer(IReview)

‎src/recensio/plone/behaviors/base.py

+15-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
from zope.component import adapter
2121
from zope.i18n import translate
2222
from zope.i18nmessageid import Message
23+
from zope.interface import implementer
2324
from zope.interface import provider
25+
from zope.schema.interfaces import IContextSourceBinder
2426

2527

2628
# TODO, maybe:
@@ -37,6 +39,16 @@
3739
# this is still used in presentations. #3103
3840

3941

42+
@implementer(IContextSourceBinder)
43+
class DDCVocabulary:
44+
def __init__(self, name):
45+
self.name = name
46+
47+
def __call__(self, context):
48+
helper = api.content.get_view(context=context, name="vocabulary-helper")
49+
return getattr(helper, self.name)
50+
51+
4052
@provider(IFormFieldProvider)
4153
class IBase(model.Schema):
4254
directives.widget(
@@ -118,7 +130,7 @@ class IBase(model.Schema):
118130
# size=10,
119131
ddcSubject = schema.List(
120132
title=_("ddc subject"),
121-
value_type=schema.Choice(vocabulary="recensio.plone.vocabularies.topic_values"),
133+
value_type=schema.Choice(source=DDCVocabulary("ddcSubject")),
122134
required=False,
123135
defaultFactory=list,
124136
)
@@ -127,7 +139,7 @@ class IBase(model.Schema):
127139
# size=10,
128140
ddcTime = schema.List(
129141
title=_("ddc time"),
130-
value_type=schema.Choice(vocabulary="recensio.plone.vocabularies.epoch_values"),
142+
value_type=schema.Choice(source=DDCVocabulary("ddcTime")),
131143
required=False,
132144
defaultFactory=list,
133145
)
@@ -136,9 +148,7 @@ class IBase(model.Schema):
136148
# size=10,
137149
ddcPlace = schema.List(
138150
title=_("ddc place"),
139-
value_type=schema.Choice(
140-
vocabulary="recensio.plone.vocabularies.region_values",
141-
),
151+
value_type=schema.Choice(source=DDCVocabulary("ddcPlace")),
142152
required=False,
143153
defaultFactory=list,
144154
)

‎src/recensio/plone/browser/configure.zcml

+8
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,14 @@
5959
layer="recensio.plone.interfaces.IRecensioPloneLayer"
6060
/>
6161

62+
<browser:page
63+
name="vocabulary-helper"
64+
for="*"
65+
class=".helper.VocabularyHelper"
66+
permission="zope2.View"
67+
layer="recensio.plone.interfaces.IRecensioPloneLayer"
68+
/>
69+
6270
<browser:page
6371
name="homepage-view"
6472
for="plone.app.contenttypes.interfaces.IDocument"

‎src/recensio/plone/browser/helper.py

+19
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from zope.component.hooks import setSite
99
from zope.interface import implementer
1010
from zope.interface import Interface
11+
from zope.schema.interfaces import IVocabularyFactory
1112
from ZTUtils import make_query
1213

1314
import logging
@@ -179,3 +180,21 @@ def get_subtree(self, value):
179180
"""
180181
subtree = value[1][1] or {}
181182
return subtree.items()
183+
184+
185+
class VocabularyHelper(BrowserView):
186+
def get_named_vocabulary(self, name):
187+
factory = getUtility(IVocabularyFactory, name)
188+
return factory(self.context)
189+
190+
@property
191+
def ddcSubject(self):
192+
return self.get_named_vocabulary("recensio.plone.vocabularies.topic_values")
193+
194+
@property
195+
def ddcTime(self):
196+
return self.get_named_vocabulary("recensio.plone.vocabularies.epoch_values")
197+
198+
@property
199+
def ddcPlace(self):
200+
return self.get_named_vocabulary("recensio.plone.vocabularies.region_values")

‎src/recensio/plone/vocabularies/vdex/ddc_geo.vdex

-128
Original file line numberDiff line numberDiff line change
@@ -154,134 +154,6 @@
154154
<langstring language="en">Germany</langstring>
155155
<langstring language="fr">Allemagne</langstring>
156156
</caption>
157-
<term>
158-
<termIdentifier>42.5.0</termIdentifier>
159-
<caption>
160-
<langstring language="de">Berlin</langstring>
161-
<langstring language="en">Berlin</langstring>
162-
<langstring language="fr">Berlin</langstring>
163-
</caption>
164-
</term>
165-
<term>
166-
<termIdentifier>42.5.1</termIdentifier>
167-
<caption>
168-
<langstring language="de">Brandenburg</langstring>
169-
<langstring language="en">Brandenburg</langstring>
170-
<langstring language="fr">Brandenburg</langstring>
171-
</caption>
172-
</term>
173-
<term>
174-
<termIdentifier>42.5.2</termIdentifier>
175-
<caption>
176-
<langstring language="de">Baden-Württemberg</langstring>
177-
<langstring language="en">Baden-Württemberg</langstring>
178-
<langstring language="fr">Baden-Württemberg</langstring>
179-
</caption>
180-
</term>
181-
<term>
182-
<termIdentifier>42.5.3</termIdentifier>
183-
<caption>
184-
<langstring language="de">Bayern</langstring>
185-
<langstring language="en">Bavaria</langstring>
186-
<langstring language="fr">Bayern</langstring>
187-
</caption>
188-
</term>
189-
<term>
190-
<termIdentifier>42.5.4</termIdentifier>
191-
<caption>
192-
<langstring language="de">Bremen</langstring>
193-
<langstring language="en">Bremen</langstring>
194-
<langstring language="fr">Bremen</langstring>
195-
</caption>
196-
</term>
197-
<term>
198-
<termIdentifier>42.5.5</termIdentifier>
199-
<caption>
200-
<langstring language="de">Hessen</langstring>
201-
<langstring language="en">Hesse</langstring>
202-
<langstring language="fr">Hessen</langstring>
203-
</caption>
204-
</term>
205-
<term>
206-
<termIdentifier>42.5.6</termIdentifier>
207-
<caption>
208-
<langstring language="de">Hamburg</langstring>
209-
<langstring language="en">Hamburg</langstring>
210-
<langstring language="fr">Hamburg</langstring>
211-
</caption>
212-
</term>
213-
<term>
214-
<termIdentifier>42.5.7</termIdentifier>
215-
<caption>
216-
<langstring language="de">Mecklenburg-Vorpommern</langstring>
217-
<langstring language="en">Mecklenburg-West Pomerania</langstring>
218-
<langstring language="fr">Mecklenburg-Vorpommern</langstring>
219-
</caption>
220-
</term>
221-
<term>
222-
<termIdentifier>42.5.8</termIdentifier>
223-
<caption>
224-
<langstring language="de">Niedersachsen</langstring>
225-
<langstring language="en">Lower Saxony</langstring>
226-
<langstring language="fr">Niedersachsen</langstring>
227-
</caption>
228-
</term>
229-
<term>
230-
<termIdentifier>42.5.9</termIdentifier>
231-
<caption>
232-
<langstring language="de">Nordrhein-Westfalen</langstring>
233-
<langstring language="en">North Rhine-Westphalia</langstring>
234-
<langstring language="fr">Nordrhein-Westfalen</langstring>
235-
</caption>
236-
</term>
237-
<term>
238-
<termIdentifier>42.5.10</termIdentifier>
239-
<caption>
240-
<langstring language="de">Rheinland-Pfalz</langstring>
241-
<langstring language="en">Rhineland-Palatinate</langstring>
242-
<langstring language="fr">Rheinland-Pfalz</langstring>
243-
</caption>
244-
</term>
245-
<term>
246-
<termIdentifier>42.5.11</termIdentifier>
247-
<caption>
248-
<langstring language="de">Schleswig-Holstein</langstring>
249-
<langstring language="en">Schleswig-Holstein</langstring>
250-
<langstring language="fr">Schleswig-Holstein</langstring>
251-
</caption>
252-
</term>
253-
<term>
254-
<termIdentifier>42.5.12</termIdentifier>
255-
<caption>
256-
<langstring language="de">Saarland</langstring>
257-
<langstring language="en">Saarland</langstring>
258-
<langstring language="fr">Saarland</langstring>
259-
</caption>
260-
</term>
261-
<term>
262-
<termIdentifier>42.5.13</termIdentifier>
263-
<caption>
264-
<langstring language="de">Sachsen</langstring>
265-
<langstring language="en">Saxony</langstring>
266-
<langstring language="fr">Sachsen</langstring>
267-
</caption>
268-
</term>
269-
<term>
270-
<termIdentifier>42.5.14</termIdentifier>
271-
<caption>
272-
<langstring language="de">Sachsen-Anhalt</langstring>
273-
<langstring language="en">Saxony-Anhalt</langstring>
274-
<langstring language="fr">Sachsen-Anhalt</langstring>
275-
</caption>
276-
</term>
277-
<term>
278-
<termIdentifier>42.5.15</termIdentifier>
279-
<caption>
280-
<langstring language="de">Thüringen</langstring>
281-
<langstring language="en">Thuringia</langstring>
282-
<langstring language="fr">Thüringen</langstring>
283-
</caption>
284-
</term>
285157
</term>
286158
<term>
287159
<termIdentifier>42.6</termIdentifier>

‎src/recensio/plone/vocabularies/vdex/ddc_sach.vdex

-58
Original file line numberDiff line numberDiff line change
@@ -357,62 +357,4 @@
357357
</caption>
358358
</term>
359359

360-
<term>
361-
<termIdentifier>1001</termIdentifier>
362-
<caption>
363-
<langstring language="de">Ägyptologie</langstring>
364-
<langstring language="en">Egyptology</langstring>
365-
</caption>
366-
367-
</term>
368-
<term>
369-
<termIdentifier>1002</termIdentifier>
370-
<caption>
371-
<langstring language="de">Alte Geschichte</langstring>
372-
<langstring language="en">Ancient History</langstring>
373-
</caption>
374-
375-
</term>
376-
<term>
377-
<termIdentifier>1003</termIdentifier>
378-
<caption>
379-
<langstring language="de">Byzantinistik</langstring>
380-
<langstring language="en">Byzantine Studies</langstring>
381-
</caption>
382-
383-
</term>
384-
<term>
385-
<termIdentifier>1004</termIdentifier>
386-
<caption>
387-
<langstring language="de">Klassische Archäologie</langstring>
388-
<langstring language="en">Classical Archaeology</langstring>
389-
</caption>
390-
391-
</term>
392-
<term>
393-
<termIdentifier>1005</termIdentifier>
394-
<caption>
395-
<langstring language="de">Klassische Philologie</langstring>
396-
<langstring language="en">Classical Philology</langstring>
397-
</caption>
398-
399-
</term>
400-
<term>
401-
<termIdentifier>1006</termIdentifier>
402-
<caption>
403-
<langstring language="de">Mittel- und Neulateinische Philologie</langstring>
404-
<langstring language="en">Medieval and Neo-Latin Philology</langstring>
405-
</caption>
406-
407-
</term>
408-
<term>
409-
<termIdentifier>1007</termIdentifier>
410-
<caption>
411-
<langstring language="de">Vor- und Frühgeschichte</langstring>
412-
<langstring language="en">Pre- and Early History</langstring>
413-
</caption>
414-
415-
</term>
416-
417-
418360
</vdex>

0 commit comments

Comments
 (0)