10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
13 __docformat__ = 'restructuredtext' |
14 |
14 |
|
15 from persistent import Persistent |
|
16 from zope.container.contained import Contained |
15 from zope.container.ordered import OrderedContainer |
17 from zope.container.ordered import OrderedContainer |
16 from zope.interface import implementer |
|
17 from zope.location import locate |
18 from zope.location import locate |
18 from zope.location.interfaces import ISublocations |
19 from zope.location.interfaces import ISublocations |
|
20 from zope.schema.fieldproperty import FieldProperty |
19 from zope.traversing.interfaces import ITraversable |
21 from zope.traversing.interfaces import ITraversable |
20 |
22 |
21 from pyams_catalog.utils import index_object |
23 from pyams_catalog.utils import index_object |
22 from pyams_content.features.share import ISocialShareItem |
24 from pyams_content.features.share import ISocialShareItem |
23 from pyams_content.features.share.interfaces import ISocialShareManager, ISocialShareManagerTarget, \ |
25 from pyams_content.features.share.interfaces import ISocialShareInfo, ISocialShareManager, ISocialShareManagerTarget, \ |
24 SOCIAL_SHARE_MANAGER_KEY |
26 SOCIAL_SHARE_INFO_KEY, SOCIAL_SHARE_MANAGER_KEY |
25 from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter |
27 from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter |
|
28 from pyams_utils.factory import factory_config |
26 |
29 |
27 |
30 |
28 @implementer(ISocialShareManager) |
31 @factory_config(ISocialShareInfo) |
|
32 class SocialShareInfo(Persistent, Contained): |
|
33 """Social network share general info""" |
|
34 |
|
35 twitter_account = FieldProperty(ISocialShareInfo['twitter_account']) |
|
36 twitter_creator_account = FieldProperty(ISocialShareInfo['twitter_creator_account']) |
|
37 |
|
38 |
|
39 @adapter_config(context=ISocialShareManagerTarget, provides=ISocialShareInfo) |
|
40 def social_share_info_factory(context): |
|
41 """Social network general info factory""" |
|
42 return get_annotation_adapter(context, SOCIAL_SHARE_INFO_KEY, ISocialShareInfo) |
|
43 |
|
44 |
|
45 @factory_config(ISocialShareManager) |
29 class SocialShareManager(OrderedContainer): |
46 class SocialShareManager(OrderedContainer): |
30 """Social network share manager""" |
47 """Social network share links manager""" |
31 |
48 |
32 last_id = 1 |
49 last_id = 1 |
33 |
50 |
34 def append(self, value, notify=True): |
51 def append(self, value, notify=True): |
35 key = str(self.last_id) |
52 key = str(self.last_id) |
47 |
64 |
48 |
65 |
49 @adapter_config(context=ISocialShareManagerTarget, provides=ISocialShareManager) |
66 @adapter_config(context=ISocialShareManagerTarget, provides=ISocialShareManager) |
50 def social_share_manager_factory(context): |
67 def social_share_manager_factory(context): |
51 """Social network share manager factory""" |
68 """Social network share manager factory""" |
52 return get_annotation_adapter(context, SOCIAL_SHARE_MANAGER_KEY, SocialShareManager, name='++social-share++') |
69 return get_annotation_adapter(context, SOCIAL_SHARE_MANAGER_KEY, ISocialShareManager, |
|
70 name='++social-share++') |
53 |
71 |
54 |
72 |
55 @adapter_config(name='social-share', context=ISocialShareManagerTarget, provides=ITraversable) |
73 @adapter_config(name='social-share', context=ISocialShareManagerTarget, provides=ITraversable) |
56 class SocialShareManagerNamespace(ContextAdapter): |
74 class SocialShareManagerNamespace(ContextAdapter): |
57 """Social network share manager ++social-share++ namespace""" |
75 """Social network share manager ++social-share++ namespace""" |