15 |
15 |
16 # import standard library |
16 # import standard library |
17 |
17 |
18 # import interfaces |
18 # import interfaces |
19 from pyams_content.component.paragraph.interfaces import IParagraphFactory |
19 from pyams_content.component.paragraph.interfaces import IParagraphFactory |
|
20 from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE, MISSING_VALUE, MISSING_LANG_VALUE |
20 from pyams_content.shared.imagemap.interfaces import IImageMapParagraph |
21 from pyams_content.shared.imagemap.interfaces import IImageMapParagraph |
|
22 from pyams_i18n.interfaces import II18nManager, INegotiator, II18n |
|
23 from pyams_workflow.interfaces import IWorkflow |
21 |
24 |
22 # import packages |
25 # import packages |
23 from pyams_content.component.paragraph import BaseParagraph |
26 from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker |
24 from pyams_sequence.utility import get_reference_target |
27 from pyams_sequence.utility import get_reference_target |
25 from pyams_utils.registry import utility_config |
28 from pyams_utils.adapter import adapter_config |
|
29 from pyams_utils.registry import utility_config, get_utility |
|
30 from pyams_utils.traversing import get_parent |
26 from zope.interface import implementer |
31 from zope.interface import implementer |
27 from zope.schema.fieldproperty import FieldProperty |
32 from zope.schema.fieldproperty import FieldProperty |
28 |
33 |
29 from pyams_content import _ |
34 from pyams_content import _ |
30 |
35 |
46 class ImageMapParagraphFactory(object): |
51 class ImageMapParagraphFactory(object): |
47 """Image map paragraph factory""" |
52 """Image map paragraph factory""" |
48 |
53 |
49 name = _("Image map") |
54 name = _("Image map") |
50 content_type = ImageMapParagraph |
55 content_type = ImageMapParagraph |
|
56 |
|
57 |
|
58 @adapter_config(context=IImageMapParagraph, provides=IContentChecker) |
|
59 class ImageMapParagraphContentChecker(BaseParagraphContentChecker): |
|
60 """ImageMap paragraph content checker""" |
|
61 |
|
62 def inner_check(self, request): |
|
63 output = [] |
|
64 translate = request.localizer.translate |
|
65 manager = get_parent(self.context, II18nManager) |
|
66 if manager is not None: |
|
67 langs = manager.get_languages() |
|
68 else: |
|
69 negotiator = get_utility(INegotiator) |
|
70 langs = (negotiator.server_language, ) |
|
71 i18n = II18n(self.context) |
|
72 for lang in langs: |
|
73 value = i18n.get_attribute('title', lang, request) |
|
74 if not value: |
|
75 field_title = translate(IImageMapParagraph['title'].title) |
|
76 if len(langs) == 1: |
|
77 output.append(translate(MISSING_VALUE).format(field=field_title)) |
|
78 else: |
|
79 output.append(translate(MISSING_LANG_VALUE).format(field=field_title, lang=lang)) |
|
80 target = self.context.get_target() |
|
81 if target is not None: |
|
82 workflow = IWorkflow(target, None) |
|
83 if workflow is not None: |
|
84 output.append(translate(ERROR_VALUE).format(field=translate(IImageMapParagraph['reference'].title), |
|
85 message=translate(_("target is not published")))) |
|
86 return output |