# HG changeset patch # User Thierry Florac # Date 1453129900 -3600 # Node ID 20bb3019612a21897232b0ffbdf4524746a576c5 # Parent cd69b40debd7de1dd6ff0e1e2d0188473f40a64a Added publication fields diff -r cd69b40debd7 -r 20bb3019612a src/pyams_content/shared/common/__init__.py --- a/src/pyams_content/shared/common/__init__.py Mon Jan 18 16:10:52 2016 +0100 +++ b/src/pyams_content/shared/common/__init__.py Mon Jan 18 16:11:40 2016 +0100 @@ -9,7 +9,6 @@ # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # -from pyams_i18n.content import I18nManagerMixin __docformat__ = 'restructuredtext' @@ -20,28 +19,33 @@ from hypatia.interfaces import ICatalog from pyams_content.shared.common.interfaces import IWfSharedContent, IWfSharedContentRoles, ISharedContent, ISharedTool from pyams_content.interfaces import IBaseContentInfo -from pyams_i18n.interfaces import II18nManager -from pyams_security.interfaces import IDefaultProtectionPolicy +from pyams_security.interfaces import IDefaultProtectionPolicy, ISecurityManager from pyams_sequence.interfaces import ISequentialIdTarget, ISequentialIdInfo from pyams_utils.interfaces import VIEW_PERMISSION -from pyams_workflow.interfaces import IWorkflowPublicationSupport, IWorkflow, IObjectClonedEvent, IWorkflowVersions +from pyams_workflow.interfaces import IWorkflowPublicationSupport, IWorkflow, IObjectClonedEvent, IWorkflowVersions, \ + IWorkflowPublicationInfo from zope.dublincore.interfaces import IZopeDublinCore from zope.intid.interfaces import IIntIds from zope.lifecycleevent.interfaces import IObjectModifiedEvent # import packages from persistent import Persistent +from pyams_i18n.content import I18nManagerMixin from pyams_security.property import RolePrincipalsFieldProperty from pyams_security.security import ProtectedObject from pyams_utils.adapter import adapter_config, ContextAdapter -from pyams_utils.registry import query_utility -from pyams_utils.request import query_request +from pyams_utils.date import format_datetime +from pyams_utils.registry import query_utility, get_utility +from pyams_utils.request import query_request, check_request +from pyams_utils.timezone import tztime from pyams_utils.traversing import get_parent from pyramid.events import subscriber from zope.container.contained import Contained from zope.interface import implementer from zope.schema.fieldproperty import FieldProperty +from pyams_content import _ + # # Content types management @@ -78,6 +82,8 @@ short_name = FieldProperty(IWfSharedContent['short_name']) creator = FieldProperty(IWfSharedContent['creator']) modifiers = FieldProperty(IWfSharedContent['modifiers']) + last_modifier = FieldProperty(IWfSharedContent['last_modifier']) + publisher = FieldProperty(IWfSharedContent['publisher']) description = FieldProperty(IWfSharedContent['description']) keywords = FieldProperty(IWfSharedContent['keywords']) notepad = FieldProperty(IWfSharedContent['notepad']) @@ -87,6 +93,14 @@ versions = IWorkflowVersions(self) return versions.get_version(1).creator + @property + def publication(self): + request = check_request() + auth = get_utility(ISecurityManager) + return request.localizer.translate(_('{date} by {principal}')).format( + date=format_datetime(tztime(IWorkflowPublicationInfo(self).publication_date), request=request), + principal=auth.get_principal(self.publisher).title) + @subscriber(IObjectModifiedEvent, context_selector=IWfSharedContent) def handle_modified_shared_content(event): @@ -102,6 +116,7 @@ catalog = query_utility(ICatalog) intids = query_utility(IIntIds) catalog['modifiers'].reindex_doc(intids.register(content), content) + content.last_modifier = principal_id @subscriber(IObjectClonedEvent, context_selector=IWfSharedContent) diff -r cd69b40debd7 -r 20bb3019612a src/pyams_content/shared/common/interfaces/__init__.py --- a/src/pyams_content/shared/common/interfaces/__init__.py Mon Jan 18 16:10:52 2016 +0100 +++ b/src/pyams_content/shared/common/interfaces/__init__.py Mon Jan 18 16:11:40 2016 +0100 @@ -9,7 +9,6 @@ # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # -from pyams_utils.schema import TextLineListField __docformat__ = 'restructuredtext' @@ -25,9 +24,10 @@ # import packages from pyams_i18n.schema import I18nTextField from pyams_security.schema import Principal, PrincipalsSet +from pyams_utils.schema import TextLineListField from zope.container.constraints import containers, contains from zope.interface import Interface, Attribute -from zope.schema import Choice, Bool, Text, Datetime +from zope.schema import Choice, Bool, Text, TextLine from pyams_content import _ @@ -100,6 +100,19 @@ description=_("List of principals who modified this content"), required=False) + last_modifier = Principal(title=_("Last modifier"), + description=_("Last principal who modified this content"), + required=False) + + publisher = Principal(title=_("Publisher"), + description=_("Name of the manager who published the document"), + required=False) + + publication = TextLine(title=_("Publication"), + description=_("Last publication date and actor"), + required=False, + readonly=True) + description = I18nTextField(title=_("Description"), description=_("The content's description is 'hidden' into HTML's page headers; but it " "can be seen, for example, in some search engines results as content's "