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) |