src/pyams_content/shared/imagemap/paragraph.py
changeset 269 8af313b5b590
parent 147 298fd55f6554
child 356 9922023810d3
equal deleted inserted replaced
268:b8b918680c52 269:8af313b5b590
    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