32 # import packages |
32 # import packages |
33 from persistent import Persistent |
33 from persistent import Persistent |
34 from pyams_i18n.content import I18nManagerMixin |
34 from pyams_i18n.content import I18nManagerMixin |
35 from pyams_security.property import RolePrincipalsFieldProperty |
35 from pyams_security.property import RolePrincipalsFieldProperty |
36 from pyams_security.security import ProtectedObject |
36 from pyams_security.security import ProtectedObject |
|
37 from pyams_security.utility import get_principal |
37 from pyams_utils.adapter import adapter_config, ContextAdapter |
38 from pyams_utils.adapter import adapter_config, ContextAdapter |
|
39 from pyams_utils.date import format_datetime |
38 from pyams_utils.registry import query_utility |
40 from pyams_utils.registry import query_utility |
39 from pyams_utils.request import query_request, check_request |
41 from pyams_utils.request import query_request, check_request |
|
42 from pyams_utils.timezone import tztime |
40 from pyams_utils.traversing import get_parent |
43 from pyams_utils.traversing import get_parent |
41 from pyams_utils.vocabulary import vocabulary_config |
44 from pyams_utils.vocabulary import vocabulary_config |
42 from pyramid.events import subscriber |
45 from pyramid.events import subscriber |
43 from pyramid.settings import asbool |
46 from pyramid.settings import asbool |
44 from pyramid.threadlocal import get_current_registry |
47 from pyramid.threadlocal import get_current_registry |
45 from zope.container.contained import Contained |
48 from zope.container.contained import Contained |
46 from zope.interface import implementer |
49 from zope.interface import implementer |
47 from zope.schema.fieldproperty import FieldProperty |
50 from zope.schema.fieldproperty import FieldProperty |
48 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm |
51 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm |
49 |
52 |
|
53 from pyams_content import _ |
|
54 |
50 |
55 |
51 # |
56 # |
52 # Content types management |
57 # Content types management |
53 # |
58 # |
54 |
59 |
111 |
116 |
112 @property |
117 @property |
113 def first_owner(self): |
118 def first_owner(self): |
114 versions = IWorkflowVersions(self) |
119 versions = IWorkflowVersions(self) |
115 return versions.get_version(1).creator |
120 return versions.get_version(1).creator |
|
121 |
|
122 @property |
|
123 def creation_label(self): |
|
124 request = check_request() |
|
125 translate = request.localizer.translate |
|
126 return translate(_('{date} by {principal}')).format( |
|
127 date=format_datetime(tztime(IBaseContentInfo(self).created_date)), |
|
128 principal=get_principal(request, self.creator).title) |
|
129 |
|
130 @property |
|
131 def last_update_label(self): |
|
132 request = check_request() |
|
133 translate = request.localizer.translate |
|
134 return translate(_('{date} by {principal}')).format( |
|
135 date=format_datetime(tztime(IBaseContentInfo(self).modified_date)), |
|
136 principal=get_principal(request, self.last_modifier).title) |
116 |
137 |
117 |
138 |
118 @subscriber(IObjectModifiedEvent, context_selector=IWfSharedContent) |
139 @subscriber(IObjectModifiedEvent, context_selector=IWfSharedContent) |
119 def handle_modified_shared_content(event): |
140 def handle_modified_shared_content(event): |
120 """Define content's modifiers when content is modified""" |
141 """Define content's modifiers when content is modified""" |