15 import json |
15 import json |
16 |
16 |
17 from pyramid.location import lineage |
17 from pyramid.location import lineage |
18 from zope.interface import implementer |
18 from zope.interface import implementer |
19 from zope.intid.interfaces import IIntIds |
19 from zope.intid.interfaces import IIntIds |
|
20 from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary |
20 |
21 |
21 from pyams_content.shared.common.interfaces import ISharedContentFactory |
22 from pyams_content.shared.common.interfaces import ISharedContentFactory |
22 from pyams_content.shared.site import SiteTopic |
23 from pyams_content.shared.site import SiteTopic |
23 from pyams_content.shared.site.interfaces import ISiteContainer, ISiteElementNavigation, ISiteFolder |
24 from pyams_content.shared.site.interfaces import IBaseSiteItem, ISiteContainer, \ |
|
25 ISiteElementNavigation, \ |
|
26 ISiteFolder, ISiteManager |
24 from pyams_i18n.interfaces import II18n |
27 from pyams_i18n.interfaces import II18n |
25 from pyams_utils.adapter import adapter_config |
28 from pyams_utils.adapter import adapter_config |
26 from pyams_utils.registry import get_global_registry, get_utility |
29 from pyams_utils.container import find_objects_providing |
|
30 from pyams_utils.registry import get_local_registry, get_global_registry, get_utility |
27 from pyams_utils.request import check_request, query_request |
31 from pyams_utils.request import check_request, query_request |
|
32 from pyams_utils.traversing import get_parent |
|
33 from pyams_utils.vocabulary import vocabulary_config |
28 |
34 |
29 |
35 |
30 @implementer(ISiteContainer) |
36 @implementer(ISiteContainer) |
31 class SiteContainerMixin(object): |
37 class SiteContainerMixin: |
32 """Site container mixin class""" |
38 """Site container mixin class""" |
33 |
39 |
34 def get_visible_items(self, request=None): |
40 def get_visible_items(self, request=None): |
35 |
41 |
36 def check_item(item): |
42 def check_item(item): |
95 |
101 |
96 |
102 |
97 @adapter_config(context=ISiteContainer, provides=ISharedContentFactory) |
103 @adapter_config(context=ISiteContainer, provides=ISharedContentFactory) |
98 def site_container_topic_factory(context): |
104 def site_container_topic_factory(context): |
99 return SiteTopic |
105 return SiteTopic |
|
106 |
|
107 |
|
108 @vocabulary_config(name='PyAMS site contents') |
|
109 class SiteManagerContentsVocabulary(SimpleVocabulary): |
|
110 """Site manager folders vocabulary""" |
|
111 |
|
112 def __init__(self, context): |
|
113 terms = [] |
|
114 site = get_parent(context, ISiteManager) |
|
115 if site is not None: |
|
116 registry = get_local_registry() |
|
117 if registry is not None: |
|
118 request = query_request() |
|
119 intids = registry.getUtility(IIntIds) |
|
120 for folder, depth in find_objects_providing(site, IBaseSiteItem, with_depth=True): |
|
121 terms.append(SimpleTerm(value=intids.queryId(folder), |
|
122 title='{}{}'.format( |
|
123 '- ' * depth, |
|
124 II18n(folder).query_attribute('title', |
|
125 request=request)))) |
|
126 super(SiteManagerContentsVocabulary, self).__init__(terms) |