# HG changeset patch # User Thierry Florac # Date 1521818511 -3600 # Node ID a5fcbde961b9a3ef8a53332433ab4cfc0e65b5b9 # Parent 32f7f9950df3da6534e6b1cd8455ed7323e3db5c Refactored blog post add form diff -r 32f7f9950df3 -r a5fcbde961b9 src/pyams_content/shared/blog/zmi/__init__.py --- a/src/pyams_content/shared/blog/zmi/__init__.py Fri Mar 23 16:21:19 2018 +0100 +++ b/src/pyams_content/shared/blog/zmi/__init__.py Fri Mar 23 16:21:51 2018 +0100 @@ -32,9 +32,12 @@ from pyams_skin.interfaces import IContentTitle from pyams_skin.viewlet.toolbar import ToolbarAction from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, ContextRequestAdapter +from pyams_utils.traversing import get_parent from pyams_utils.unicode import translate_string from pyams_utils.url import absolute_url from pyams_viewlet.viewlet import viewlet_config +from pyramid.decorator import reify +from pyramid.path import DottedNameResolver from pyramid.view import view_config from zope.interface import Interface from zope.lifecycleevent import ObjectCreatedEvent @@ -78,10 +81,28 @@ legend = _("Add blog post") content_url = None - def add(self, wf_content): - # create shared content - content = self.context.topic_content_factory() - self.request.registry.notify(ObjectCreatedEvent(content)) + @reify + def content_factory(self): + registry = self.request.registry + factory = registry.settings.get('pyams_content.config.blogpost_factory') + if factory: + factory = DottedNameResolver().resolve(factory) + else: + manager = get_parent(self.context, IBlogManager) + factory = manager.topic_content_factory + return factory + + def create(self, data): + return self.content_factory.content_class() + + def update_content(self, content, data): + data = data.get(self, data) + # initialize content fields + content.title = data['title'] + content.short_name = content.title.copy() + content.notepad = data.get('notepad') + content.creator = self.request.principal.id + content.owner = self.request.principal.id # check blog folders now = datetime.utcnow() year, month = now.strftime('%Y:%m').split(':') @@ -91,24 +112,25 @@ month_folder = year_folder.get(month) if month_folder is None: month_folder = year_folder[month] = self.context.folder_factory() - # check title language - added = False - i18n_manager = II18nManager(self.context) - for lang in i18n_manager.get_languages(): - title = translate_string(wf_content.title.get(lang)) - if title: - content_name = translate_string(title, force_lower=True, spaces='-') - month_folder[content_name] = content - added = True - break - # handle workflow - if added: - IWorkflowVersions(content).add_version(wf_content, None) - IWorkflowInfo(wf_content).fire_transition('init') - self.content_url = absolute_url(wf_content, self.request, 'admin') + # update languages + languages = II18nManager(self.context).languages + if languages: + II18nManager(content).languages = languages.copy() + # create content + wf_parent = self.content_factory() + self.request.registry.notify(ObjectCreatedEvent(wf_parent)) + # add content to blog folder + title = II18n(content).query_attribute('title', request=self.request) + month_folder[translate_string(title, spaces='-')] = wf_parent + IWorkflowVersions(wf_parent).add_version(content, None) + IWorkflowInfo(content).fire_transition('init', comment=content.notepad) + self.__target = content + + def add(self, content): + pass def nextURL(self): - return self.content_url + return absolute_url(self.__target, self.request, 'admin') @view_config(name='add-shared-content.json', context=IBlogManager, request_type=IPyAMSLayer,