14 |
14 |
15 |
15 |
16 # import standard library |
16 # import standard library |
17 |
17 |
18 # import interfaces |
18 # import interfaces |
19 from pyams_content.component.theme.interfaces import IThemesManagerTarget, IThemesManager, THEMES_MANAGER_KEY, IThemesInfo, \ |
19 from pyams_content.component.theme.interfaces import IThemesManagerTarget, IThemesManager, THEMES_MANAGER_KEY, \ |
20 IThemesTarget, THEMES_INFO_KEY |
20 IThemesTarget, IThemesInfo, THEMES_INFO_KEY |
|
21 from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE |
21 from zope.annotation.interfaces import IAnnotations |
22 from zope.annotation.interfaces import IAnnotations |
22 |
23 |
23 # import packages |
24 # import packages |
24 from persistent import Persistent |
25 from persistent import Persistent |
|
26 from pyams_content.features.checker import BaseContentChecker |
25 from pyams_utils.adapter import adapter_config |
27 from pyams_utils.adapter import adapter_config |
26 from pyramid.threadlocal import get_current_registry |
28 from pyramid.threadlocal import get_current_registry |
27 from zope.container.contained import Contained |
29 from zope.container.contained import Contained |
28 from zope.interface import implementer |
30 from zope.interface import implementer |
29 from zope.lifecycleevent import ObjectCreatedEvent |
31 from zope.lifecycleevent import ObjectCreatedEvent |
30 from zope.location import locate |
32 from zope.location import locate |
31 from zope.schema.fieldproperty import FieldProperty |
33 from zope.schema.fieldproperty import FieldProperty |
|
34 |
|
35 from pyams_content import _ |
32 |
36 |
33 |
37 |
34 @implementer(IThemesManager) |
38 @implementer(IThemesManager) |
35 class ThemesManager(Persistent, Contained): |
39 class ThemesManager(Persistent, Contained): |
36 """Themes manager persistent class""" |
40 """Themes manager persistent class""" |
66 if info is None: |
70 if info is None: |
67 info = annotations[THEMES_INFO_KEY] = ThemesInfo() |
71 info = annotations[THEMES_INFO_KEY] = ThemesInfo() |
68 get_current_registry().notify(ObjectCreatedEvent(info)) |
72 get_current_registry().notify(ObjectCreatedEvent(info)) |
69 locate(info, target, '++themes++') |
73 locate(info, target, '++themes++') |
70 return info |
74 return info |
|
75 |
|
76 |
|
77 @adapter_config(name='themes', context=IThemesTarget, provides=IContentChecker) |
|
78 class ThemesContentChecker(BaseContentChecker): |
|
79 """Themes info content checker""" |
|
80 |
|
81 label = _("Themes") |
|
82 weight = 200 |
|
83 |
|
84 def inner_check(self, request): |
|
85 output = [] |
|
86 translate = request.localizer.translate |
|
87 themes = IThemesInfo(self.context) |
|
88 if not themes.themes: |
|
89 output.append(translate(ERROR_VALUE).format(field=translate(IThemesInfo['themes'].title), |
|
90 message=translate(_("no defined theme")))) |
|
91 return output |