src/pyams_content/component/links/__init__.py
changeset 248 381f392c6edb
parent 186 dc1201385a36
child 384 d433c8c46ec9
equal deleted inserted replaced
247:4534b0edd1ad 248:381f392c6edb
    16 # import standard library
    16 # import standard library
    17 
    17 
    18 # import interfaces
    18 # import interfaces
    19 from pyams_content.component.association.interfaces import IAssociationInfo, IAssociationTarget, IAssociationContainer
    19 from pyams_content.component.association.interfaces import IAssociationInfo, IAssociationTarget, IAssociationContainer
    20 from pyams_content.component.links.interfaces import IBaseLink, IInternalLink, IExternalLink, IMailtoLink
    20 from pyams_content.component.links.interfaces import IBaseLink, IInternalLink, IExternalLink, IMailtoLink
       
    21 from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE
       
    22 from pyams_content.interfaces import IBaseContent
    21 from pyams_i18n.interfaces import II18n
    23 from pyams_i18n.interfaces import II18n
    22 from pyams_sequence.interfaces import ISequentialIdInfo
    24 from pyams_sequence.interfaces import ISequentialIdInfo
       
    25 from pyams_workflow.interfaces import IWorkflow
    23 
    26 
    24 # import packages
    27 # import packages
    25 from pyams_content.component.association import AssociationItem
    28 from pyams_content.component.association import AssociationItem
       
    29 from pyams_content.features.checker import BaseContentChecker
    26 from pyams_content.workflow import VISIBLE_STATES
    30 from pyams_content.workflow import VISIBLE_STATES
    27 from pyams_sequence.utility import get_reference_target
    31 from pyams_sequence.utility import get_reference_target
    28 from pyams_utils.adapter import adapter_config, ContextAdapter
    32 from pyams_utils.adapter import adapter_config, ContextAdapter
    29 from pyams_utils.request import check_request
    33 from pyams_utils.request import check_request
    30 from pyams_utils.traversing import get_parent
    34 from pyams_utils.traversing import get_parent
    72     @property
    76     @property
    73     def pictogram(self):
    77     def pictogram(self):
    74         return self.context.icon_class
    78         return self.context.icon_class
    75 
    79 
    76 
    80 
       
    81 class BaseLinkContentChecker(BaseContentChecker):
       
    82     """Base link content checker"""
       
    83 
       
    84     @property
       
    85     def label(self):
       
    86         request = check_request()
       
    87         translate = request.localizer.translate
       
    88         return II18n(self.context).query_attribute('title', request) or \
       
    89             '({0})'.format(translate(self.context.icon_hint).lower())
       
    90 
       
    91 
    77 #
    92 #
    78 # Internal links
    93 # Internal links
    79 #
    94 #
    80 
    95 
    81 @implementer(IInternalLink)
    96 @implementer(IInternalLink)
   129     @property
   144     @property
   130     def human_size(self):
   145     def human_size(self):
   131         return '--'
   146         return '--'
   132 
   147 
   133 
   148 
       
   149 @adapter_config(context=IInternalLink, provides=IContentChecker)
       
   150 class InternalLinkContentChecker(BaseLinkContentChecker):
       
   151     """Internal link content checker"""
       
   152 
       
   153     def inner_check(self, request):
       
   154         output = []
       
   155         translate = request.localizer.translate
       
   156         content = get_parent(self.context, IBaseContent)
       
   157         if content is not None:
       
   158             workflow = IWorkflow(content, None)
       
   159             if workflow is not None:
       
   160                 target = self.context.get_target(state=workflow.published_states)
       
   161                 if target is None:
       
   162                     output.append(translate(ERROR_VALUE).format(field=IInternalLink['reference'].title,
       
   163                                                                 message=translate(_("target is not published"))))
       
   164         return output
       
   165 
       
   166 
   134 #
   167 #
   135 # External links
   168 # External links
   136 #
   169 #
   137 
   170 
   138 @implementer(IExternalLink)
   171 @implementer(IExternalLink)
   170     @property
   203     @property
   171     def human_size(self):
   204     def human_size(self):
   172         return '--'
   205         return '--'
   173 
   206 
   174 
   207 
       
   208 @adapter_config(context=IExternalLink, provides=IContentChecker)
       
   209 class ExternalLinkContentChecker(BaseLinkContentChecker):
       
   210     """External link content checker"""
       
   211 
       
   212 
   175 #
   213 #
   176 # Mailto links
   214 # Mailto links
   177 #
   215 #
   178 
   216 
   179 @implementer(IMailtoLink)
   217 @implementer(IMailtoLink)
   209         return self.context.get_url()
   247         return self.context.get_url()
   210 
   248 
   211     @property
   249     @property
   212     def human_size(self):
   250     def human_size(self):
   213         return '--'
   251         return '--'
       
   252 
       
   253 
       
   254 @adapter_config(context=IMailtoLink, provides=IContentChecker)
       
   255 class MailtoLinkContentChecker(BaseLinkContentChecker):
       
   256     """Mailto link content checker"""