# HG changeset patch # User Thierry Florac # Date 1532136873 -7200 # Node ID 47173c13e1185efe2f9e5bdc65bc9b9f2fa5a583 # Parent 6bc257d7f53ff0b0ad3d00210c6efe52a66da601 Added internal reference mixin class diff -r 6bc257d7f53f -r 47173c13e118 src/pyams_content/component/links/__init__.py --- a/src/pyams_content/component/links/__init__.py Sat Jul 21 02:36:35 2018 +0200 +++ b/src/pyams_content/component/links/__init__.py Sat Jul 21 03:34:33 2018 +0200 @@ -16,14 +16,16 @@ # import standard library # import interfaces -from pyams_content.component.association.interfaces import IAssociationInfo, IAssociationContainerTarget, IAssociationContainer +from pyams_content.component.association.interfaces import IAssociationInfo, IAssociationContainerTarget, \ + IAssociationContainer from pyams_content.component.links.interfaces import IBaseLink, IInternalLink, IExternalLink, IMailtoLink from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE from pyams_content.interfaces import IBaseContent, MANAGE_CONTENT_PERMISSION from pyams_content.reference.pictograms.interfaces import IPictogramTable from pyams_form.interfaces.form import IFormContextPermissionChecker from pyams_i18n.interfaces import II18n -from pyams_sequence.interfaces import ISequentialIdInfo +from pyams_sequence.interfaces import ISequentialIdInfo, IInternalReference +from pyams_skin.layer import IPyAMSUserLayer from pyams_workflow.interfaces import IWorkflow, IWorkflowPublicationInfo # import packages @@ -115,8 +117,27 @@ # Internal links # +@implementer(IInternalReference) +class InternalReferenceMixin(object): + """Internal reference mixin class""" + + reference = None + + @volatile_property + def target(self): + return get_reference_target(self.reference) + + def get_target(self, state=None, request=None): + if request is None: + request = check_request() + if (not state) and not IPyAMSUserLayer.providedBy(request): + return self.target + else: + return get_reference_target(self.reference, state, request) + + @implementer(IInternalLink) -class InternalLink(BaseLink): +class InternalLink(BaseLink, InternalReferenceMixin): """Internal link persistent class""" icon_class = 'fa-external-link-square fa-rotate-90' @@ -124,16 +145,6 @@ reference = FieldProperty(IInternalLink['reference']) - @volatile_property - def target(self): - return get_reference_target(self.reference) - - def get_target(self, state=None): - if not state: - return self.target - else: - return get_reference_target(self.reference, state) - def is_visible(self, request=None): target = self.get_target() if target is not None: diff -r 6bc257d7f53f -r 47173c13e118 src/pyams_content/features/alert/__init__.py --- a/src/pyams_content/features/alert/__init__.py Sat Jul 21 02:36:35 2018 +0200 +++ b/src/pyams_content/features/alert/__init__.py Sat Jul 21 03:34:33 2018 +0200 @@ -23,7 +23,7 @@ from pyams_form.interfaces.form import IFormContextPermissionChecker # import packages -from pyams_sequence.reference import get_reference_target +from pyams_content.component.links import InternalReferenceMixin from pyams_utils.adapter import adapter_config, ContextAdapter from pyams_utils.registry import query_utility from pyams_utils.zodb import volatile_property @@ -33,7 +33,7 @@ @implementer(IAlertItem) -class AlertItem(Persistent, Contained): +class AlertItem(Persistent, Contained, InternalReferenceMixin): """Alert item persistent class""" visible = FieldProperty(IAlertItem['visible']) @@ -61,16 +61,6 @@ table = query_utility(IPictogramTable) return table.get(self.pictogram_name) - @volatile_property - def target(self): - return get_reference_target(self.reference) - - def get_target(self, state=None): - if not state: - return self.target - else: - return get_reference_target(self.reference) - @adapter_config(context=IAlertItem, provides=IFormContextPermissionChecker) class AlertitemPermissionChecker(ContextAdapter): diff -r 6bc257d7f53f -r 47173c13e118 src/pyams_content/features/menu/__init__.py --- a/src/pyams_content/features/menu/__init__.py Sat Jul 21 02:36:35 2018 +0200 +++ b/src/pyams_content/features/menu/__init__.py Sat Jul 21 03:34:33 2018 +0200 @@ -20,8 +20,7 @@ # import packages from pyams_content.component.association.container import AssociationContainer -from pyams_sequence.reference import get_reference_target -from pyams_utils.zodb import volatile_property +from pyams_content.component.links import InternalReferenceMixin from zope.interface import implementer from zope.schema.fieldproperty import FieldProperty @@ -31,23 +30,13 @@ # @implementer(IMenu) -class Menu(AssociationContainer): +class Menu(AssociationContainer, InternalReferenceMixin): """Associations menu""" visible = FieldProperty(IMenu['visible']) title = FieldProperty(IMenu['title']) reference = FieldProperty(IMenu['reference']) - @volatile_property - def target(self): - return get_reference_target(self.reference) - - def get_target(self, state=None): - if not state: - return self.target - else: - return get_reference_target(self.reference) - @implementer(IMenusContainer) class MenusContainer(AssociationContainer): diff -r 6bc257d7f53f -r 47173c13e118 src/pyams_content/features/redirect/__init__.py --- a/src/pyams_content/features/redirect/__init__.py Sat Jul 21 02:36:35 2018 +0200 +++ b/src/pyams_content/features/redirect/__init__.py Sat Jul 21 03:34:33 2018 +0200 @@ -23,7 +23,7 @@ # import packages from persistent import Persistent -from pyams_sequence.reference import get_reference_target +from pyams_content.component.links import InternalReferenceMixin from pyams_utils.adapter import adapter_config, ContextAdapter from pyams_utils.url import canonical_url from pyams_utils.zodb import volatile_property @@ -33,7 +33,7 @@ @implementer(IRedirectionRule) -class RedirectionRule(Persistent, Contained): +class RedirectionRule(Persistent, Contained, InternalReferenceMixin): """Redirection rule persistent class""" active = FieldProperty(IRedirectionRule['active']) @@ -54,16 +54,6 @@ del self.pattern @volatile_property - def target(self): - return get_reference_target(self.reference) - - def get_target(self, state=None): - if not state: - return self.target - else: - return get_reference_target(self.reference, state) - - @volatile_property def pattern(self): return re.compile(self.url_pattern) diff -r 6bc257d7f53f -r 47173c13e118 src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po --- a/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po Sat Jul 21 02:36:35 2018 +0200 +++ b/src/pyams_content/locales/fr/LC_MESSAGES/pyams_content.po Sat Jul 21 03:34:33 2018 +0200 @@ -5200,21 +5200,22 @@ "passed as input URL to the \n" "next rule, until a matching rule is found.\n" msgstr "" -"Les règles de redirection sont utilisées pour transmettre des réponses de redirection " -"au lieu de la fameuse erreur « 404 - Page non trouvée ».\n" +"Les règles de redirection sont utilisées pour transmettre des réponses de " +"redirection au lieu de la fameuse erreur « 404 - Page non trouvée ».\n" "\n" -"La gestion des redirections est particulièrement importante en phase de migration d'un site web, " -"pour éviter les liens cassés, ne pas perdre votre référencement et faciliter la mise à jour " -"des moteurs de recherche.\n" +"La gestion des redirections est particulièrement importante en phase de " +"migration d'un site web, pour éviter les liens cassés, ne pas perdre votre " +"référencement et faciliter la mise à jour des moteurs de recherche.\n" "\n" -"Vous pouvez définir un ensemble de règles qui seront appliquées dès lors qu'une requête " -"adressée au serveur génère une erreur de page non trouvée ; les règles sont basées sur des " -"expressions rationnelles que l'on applique à l'URL de la requête reçue : si la règle correspond, " -"l'URL est réécrite et une réponse de redirection vers cette nouvelle URL est renvoyée.\n" +"Vous pouvez définir un ensemble de règles qui seront appliquées dès lors " +"qu'une requête adressée au serveur génère une erreur de page non trouvée ; " +"les règles sont basées sur des expressions rationnelles que l'on applique à " +"l'URL de la requête reçue : si la règle correspond, l'URL est réécrite et " +"une réponse de redirection vers cette nouvelle URL est renvoyée.\n" "\n" -"Vous pouvez également enchaîner les règles : lorsqu'une règle est \"chaînée\", la nouvelle URL " -"qu'elle génère est passée aux règles suivantes, jusqu'à ce qu'une règle s'applique à cette " -"nouvelle URL.\n" +"Vous pouvez également enchaîner les règles : lorsqu'une règle est \"chaînée" +"\", la nouvelle URL qu'elle génère est passée aux règles suivantes, jusqu'à " +"ce qu'une règle s'applique à cette nouvelle URL.\n" #: src/pyams_content/features/redirect/zmi/container.py:288 msgid "Test" diff -r 6bc257d7f53f -r 47173c13e118 src/pyams_content/shared/imagemap/paragraph.py --- a/src/pyams_content/shared/imagemap/paragraph.py Sat Jul 21 02:36:35 2018 +0200 +++ b/src/pyams_content/shared/imagemap/paragraph.py Sat Jul 21 03:34:33 2018 +0200 @@ -24,15 +24,14 @@ from pyams_workflow.interfaces import IWorkflow, IWorkflowState # import packages +from pyams_content.component.links import InternalReferenceMixin from pyams_content.component.paragraph import BaseParagraph, BaseParagraphContentChecker, BaseParagraphFactory from pyams_content.features.renderer import RenderersVocabulary -from pyams_sequence.reference import get_reference_target from pyams_utils.adapter import adapter_config from pyams_utils.factory import factory_config from pyams_utils.registry import utility_config, get_utility from pyams_utils.traversing import get_parent from pyams_utils.vocabulary import vocabulary_config -from pyams_utils.zodb import volatile_property from zope.interface import implementer from zope.schema.fieldproperty import FieldProperty @@ -41,7 +40,7 @@ @implementer(IImageMapParagraph) @factory_config(provided=IImageMapParagraph) -class ImageMapParagraph(BaseParagraph): +class ImageMapParagraph(BaseParagraph, InternalReferenceMixin): """Image map paragraph""" icon_class = 'fa-location-arrow' @@ -50,16 +49,6 @@ reference = FieldProperty(IImageMapParagraph['reference']) renderer = FieldProperty(IImageMapParagraph['renderer']) - @volatile_property - def target(self): - return get_reference_target(self.reference) - - def get_target(self, state=None): - if not state: - return self.target - else: - return get_reference_target(self.reference, state) - @utility_config(name=IMAGEMAP_PARAGRAPH_TYPE, provides=IParagraphFactory) class ImageMapParagraphFactory(BaseParagraphFactory):