21 from pyams_content.component.paragraph import IBaseParagraph |
21 from pyams_content.component.paragraph import IBaseParagraph |
22 from pyams_content.features.checker.interfaces import IContentChecker |
22 from pyams_content.features.checker.interfaces import IContentChecker |
23 from pyams_content.shared.common.interfaces import IWfSharedContent |
23 from pyams_content.shared.common.interfaces import IWfSharedContent |
24 from pyams_form.interfaces.form import IFormContextPermissionChecker |
24 from pyams_form.interfaces.form import IFormContextPermissionChecker |
25 from pyams_i18n.interfaces import II18n |
25 from pyams_i18n.interfaces import II18n |
26 from zope.annotation.interfaces import IAnnotations |
|
27 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent |
26 from zope.lifecycleevent.interfaces import IObjectAddedEvent, IObjectModifiedEvent, IObjectRemovedEvent |
28 from zope.location.interfaces import ISublocations |
27 from zope.location.interfaces import ISublocations |
29 from zope.traversing.interfaces import ITraversable |
28 from zope.traversing.interfaces import ITraversable |
30 |
29 |
31 # import packages |
30 # import packages |
32 from pyams_catalog.utils import index_object |
31 from pyams_catalog.utils import index_object |
33 from pyams_content.features.checker import BaseContentChecker |
32 from pyams_content.features.checker import BaseContentChecker |
34 from pyams_content.features.renderer import RenderedContentMixin, IContentRenderer |
33 from pyams_content.features.renderer import RenderedContentMixin, RenderersVocabulary |
35 from pyams_utils.adapter import adapter_config, ContextAdapter |
34 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter |
|
35 from pyams_utils.factory import factory_config |
36 from pyams_utils.container import BTreeOrderedContainer |
36 from pyams_utils.container import BTreeOrderedContainer |
37 from pyams_utils.request import check_request |
|
38 from pyams_utils.traversing import get_parent |
37 from pyams_utils.traversing import get_parent |
39 from pyams_utils.vocabulary import vocabulary_config |
38 from pyams_utils.vocabulary import vocabulary_config |
40 from pyramid.events import subscriber |
39 from pyramid.events import subscriber |
41 from pyramid.threadlocal import get_current_registry |
40 from pyramid.threadlocal import get_current_registry |
42 from zope.interface import implementer |
41 from zope.interface import implementer |
43 from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent |
42 from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent |
44 from zope.location import locate |
43 from zope.location import locate |
45 from zope.schema.fieldproperty import FieldProperty |
44 from zope.schema.fieldproperty import FieldProperty |
46 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm |
|
47 |
45 |
48 from pyams_content import _ |
46 from pyams_content import _ |
49 |
47 |
50 |
48 |
51 # |
49 # |
52 # Galleries container |
50 # Galleries container |
53 # |
51 # |
54 |
52 |
55 @implementer(IGallery) |
53 @implementer(IGallery) |
56 class Gallery(BTreeOrderedContainer, RenderedContentMixin): |
54 @factory_config(provided=IBaseGallery) |
|
55 class Gallery(RenderedContentMixin, BTreeOrderedContainer): |
57 """Gallery persistent class""" |
56 """Gallery persistent class""" |
58 |
57 |
59 title = FieldProperty(IGallery['title']) |
58 title = FieldProperty(IGallery['title']) |
60 description = FieldProperty(IGallery['description']) |
59 description = FieldProperty(IGallery['description']) |
61 renderer = FieldProperty(IGallery['renderer']) |
60 renderer = FieldProperty(IGallery['renderer']) |
78 |
77 |
79 |
78 |
80 @adapter_config(context=IGalleryTarget, provides=IGallery) |
79 @adapter_config(context=IGalleryTarget, provides=IGallery) |
81 def gallery_factory(target): |
80 def gallery_factory(target): |
82 """Galleries container factory""" |
81 """Galleries container factory""" |
83 annotations = IAnnotations(target) |
82 return get_annotation_adapter(target, GALLERY_CONTAINER_KEY, Gallery, name='++gallery++') |
84 gallery = annotations.get(GALLERY_CONTAINER_KEY) |
|
85 if gallery is None: |
|
86 gallery = annotations[GALLERY_CONTAINER_KEY] = Gallery() |
|
87 get_current_registry().notify(ObjectCreatedEvent(gallery)) |
|
88 locate(gallery, target, '++gallery++') |
|
89 return gallery |
|
90 |
83 |
91 |
84 |
92 @adapter_config(name='gallery', context=IGalleryTarget, provides=ITraversable) |
85 @adapter_config(name='gallery', context=IGalleryTarget, provides=ITraversable) |
93 class GalleryContainerNamespace(ContextAdapter): |
86 class GalleryContainerNamespace(ContextAdapter): |
94 """++gallery++ namespace traverser""" |
87 """++gallery++ namespace traverser""" |
181 gallery = IGallery(context) |
174 gallery = IGallery(context) |
182 return IContentChecker(gallery, None) |
175 return IContentChecker(gallery, None) |
183 |
176 |
184 |
177 |
185 @vocabulary_config(name=GALLERY_RENDERERS) |
178 @vocabulary_config(name=GALLERY_RENDERERS) |
186 class GalleryRendererVocabulary(SimpleVocabulary): |
179 class GalleryRendererVocabulary(RenderersVocabulary): |
187 """Gallery renderers vocabulary""" |
180 """Gallery renderers vocabulary""" |
188 |
181 |
189 def __init__(self, context=None): |
182 content_interface = IBaseGallery |
190 request = check_request() |
|
191 translate = request.localizer.translate |
|
192 registry = request.registry |
|
193 if not IBaseGallery.providedBy(context): |
|
194 context = Gallery() |
|
195 terms = [SimpleTerm(name, title=translate(adapter.label)) |
|
196 for name, adapter in sorted(registry.getAdapters((context, request), IContentRenderer), |
|
197 key=lambda x: x[1].weight)] |
|
198 super(GalleryRendererVocabulary, self).__init__(terms) |
|