From 46da672b690561dc844a3eecf820e9bd2e1aa4b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Thu, 28 Mar 2013 17:42:54 +0100 Subject: [PATCH] various improvements to erp5_deferred_style * use translationContext instead of low level hacks * introduce a script ERP5Site_notifyReportComplete to do the actual notification * do not activate a useless getTitle * store strings encoded as zlib to prevent database growth --- .../Base_renderReportSection.xml | 42 +++++----- .../Base_renderSimpleView.xml | 40 +++++----- .../erp5_deferred_style_core/Base_report.xml | 58 +++++++------- .../ERP5Site_notifyReportComplete.xml | 77 +++++++++++++++++++ bt5/erp5_deferred_style/bt/revision | 3 +- 5 files changed, 140 insertions(+), 80 deletions(-) create mode 100644 bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/ERP5Site_notifyReportComplete.xml diff --git a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderReportSection.xml b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderReportSection.xml index e283cf6704..eb9f7421fb 100644 --- a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderReportSection.xml +++ b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderReportSection.xml @@ -50,39 +50,33 @@ </item> <item> <key> <string>_body</string> </key> - <value> <string># context.log(\'report_section %s: %s/%s\' % (\n -# report_section_idx, context.getPath(), report_section.getFormId(),))\n -request = container.REQUEST\n + <value> <string>request = container.REQUEST\n request.other.update(request_other)\n \n portal = context.getPortalObject()\n \n -# emulate Localizer\'s __before_publishing_traverse__\n -request.form[\'LOCALIZER_LANGUAGE\'] = localizer_language\n -request.get(\'PARENTS\', []).insert(0, portal)\n -portal.Localizer(context, request)\n +with portal.Localizer.translationContext(localizer_language):\n + portal.portal_skins.changeSkin(skin_name)\n \n -portal.portal_skins.changeSkin(skin_name)\n + # for unicode encoding\n + request.RESPONSE.setHeader("Content-Type", "application/xml; charset=utf-8")\n + render_prefix = \'x%s\' % report_section_idx\n + report_section.pushReport(portal, render_prefix=render_prefix)\n \n -# for unicode encoding\n -request.RESPONSE.setHeader("Content-Type", "application/xml; charset=utf-8")\n -render_prefix = \'x%s\' % report_section_idx\n -report_section.pushReport(portal, render_prefix=render_prefix)\n + if report_section.getFormId():\n + form = getattr(context, report_section.getFormId())\n + else:\n + form = None\n \n -if report_section.getFormId():\n - form = getattr(context, report_section.getFormId())\n -else:\n - form = None\n + selection_name = request.get(\'prefixed_selection_name\')\n + data = context.render_report_section.pt_render(\n + extra_context=dict(form=form,\n + report_section=report_section,\n + render_prefix=render_prefix))\n \n -selection_name = request.get(\'prefixed_selection_name\')\n -data = context.render_report_section.pt_render(\n - extra_context=dict(form=form,\n - report_section=report_section,\n - render_prefix=render_prefix))\n + report_section.popReport(portal, render_prefix=render_prefix)\n \n -report_section.popReport(portal, render_prefix=render_prefix)\n -\n -return report_section_idx, data\n +return report_section_idx, data.encode(\'utf8\').encode(\'zlib\')\n </string> </value> </item> <item> diff --git a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml index 1966730204..6f4cfd7c62 100644 --- a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml +++ b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml @@ -59,30 +59,26 @@ request.form.update(request_form)\n if skin_name and skin_name != \'None\': # make_query serializes None as \'None\'\n portal.portal_skins.changeSkin(skin_name)\n \n -report_data = getattr(context, deferred_style_dialog_method)(**params)\n +with portal.Localizer.translationContext(localizer_language):\n + report_data = getattr(context, deferred_style_dialog_method)(**params)\n \n -attachment_name = [x[len(\' filename=\'):] for x in (request.RESPONSE.getHeader(\n - \'content-disposition\') or \'\').split(\';\')\n - if x.startswith(\' filename=\')][0]\n -if attachment_name.startswith(\'"\'):\n - attachment_name = attachment_name[1:]\n -if attachment_name.endswith(\'"\'):\n - attachment_name = attachment_name[:-1]\n -attachment_list = (\n - {\'mime_type\': (request.RESPONSE.getHeader(\'content-type\') or \'application/octet-stream;\').split(\';\')[0],\n - \'content\': \'%s\' % report_data,\n - \'name\': attachment_name},)\n + attachment_name = [x[len(\' filename=\'):] for x in (request.RESPONSE.getHeader(\n + \'content-disposition\') or \'\').split(\';\')\n + if x.startswith(\' filename=\')][0]\n + if attachment_name.startswith(\'"\'):\n + attachment_name = attachment_name[1:]\n + if attachment_name.endswith(\'"\'):\n + attachment_name = attachment_name[:-1]\n + attachment_list = (\n + {\'mime_type\': (request.RESPONSE.getHeader(\'content-type\') or \'application/octet-stream;\').split(\';\')[0],\n + \'content\': \'%s\' % report_data,\n + \'name\': attachment_name},)\n \n -# XXX Use notification message to improve message content\n -portal.portal_notifications.sendMessage(\n - recipient=user_name,\n - subject=str(attachment_name.rsplit(\'.\', 1)[0]),\n - message=str(translateString(\'Your report is attached.\\n\')),\n - message_text_format=\'text/plain\',\n - notifier_list=(\'Mail Message\',),\n - store_as_event=False,\n - attachment_list=attachment_list,\n - )\n + portal.ERP5Site_notifyReportComplete(\n + user_name=user_name,\n + subject=str(translateString(attachment_name.rsplit(\'.\', 1)[0])),\n + message=\'\',\n + attachment_list=attachment_list)\n </string> </value> </item> <item> diff --git a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_report.xml b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_report.xml index e4644a5c01..570993fbc7 100644 --- a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_report.xml +++ b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_report.xml @@ -50,53 +50,47 @@ </item> <item> <key> <string>_body</string> </key> - <value> <string>request = container.REQUEST\n + <value> <string>from Products.ERP5Type.Message import translateString\n +\n +request = container.REQUEST\n request.other.update(request_other)\n +\n portal = context.getPortalObject()\n ap = portal.restrictedTraverse(active_process_url)\n -N_ = portal.Base_translateString\n \n -# emulate Localizer\'s __before_publishing_traverse__\n -request.form[\'LOCALIZER_LANGUAGE\'] = localizer_language\n -request.get(\'PARENTS\', []).insert(0, portal)\n -portal.Localizer(context, request)\n -# set the selected skin\n -portal.portal_skins.changeSkin(skin_name)\n +with portal.Localizer.translationContext(localizer_language):\n + # set the selected skin\n + portal.portal_skins.changeSkin(skin_name)\n \n -report_section_list = [r.getResult() for r in ap.getResultList()]\n -report_section_list.sort(lambda a, b:cmp(a[0], b[0]))\n + report_section_list = [r.getResult() for r in ap.getResultList()]\n + report_section_list.sort(lambda a, b:cmp(a[0], b[0]))\n \n -def dummyReportMethod():\n - return report_section_list\n + def dummyReportMethod():\n + return report_section_list\n \n -report_data = context.restrictedTraverse(form_path).report_view.pt_render(\n + report_data = context.restrictedTraverse(form_path).report_view.pt_render(\n extra_context=dict(options={\'format\': format},\n - rendered_report_item_list=[r[1] for r in report_section_list],\n + rendered_report_item_list=[r[1].decode(\'zlib\') for r in report_section_list],\n report_method=dummyReportMethod,\n form=portal.restrictedTraverse(form_path)))\n \n -attachment_name = [x[len(\' filename=\'):] for x in (request.RESPONSE.getHeader(\n + attachment_name = [x[len(\' filename=\'):] for x in (request.RESPONSE.getHeader(\n \'content-disposition\') or \'\').split(\';\')\n if x.startswith(\' filename=\')][0]\n -if attachment_name.startswith(\'"\'):\n - attachment_name = attachment_name[1:]\n -if attachment_name.endswith(\'"\'):\n - attachment_name = attachment_name[:-1]\n -attachment_list = (\n - {\'mime_type\': (request.RESPONSE.getHeader(\'content-type\') or \'application/octet-stream;\').split(\';\')[0],\n - \'content\': \'%s\' % report_data,\n - \'name\': attachment_name},)\n + if attachment_name.startswith(\'"\'):\n + attachment_name = attachment_name[1:]\n + if attachment_name.endswith(\'"\'):\n + attachment_name = attachment_name[:-1]\n + attachment_list = (\n + {\'mime_type\': (request.RESPONSE.getHeader(\'content-type\') or \'application/octet-stream;\').split(\';\')[0],\n + \'content\': \'%s\' % report_data,\n + \'name\': attachment_name},)\n \n -# XXX Use notification message to improve message content\n -portal.portal_notifications.sendMessage(\n - recipient=user_name,\n +portal.ERP5Site_notifyReportComplete(\n + user_name=user_name,\n subject=title,\n - message=N_(\'Your report is attached.\\n\'),\n - message_text_format=\'text/plain\',\n - notifier_list=(\'Mail Message\',),\n - store_as_event=False,\n - attachment_list=attachment_list,\n - )\n + message=\'\',\n + attachment_list=attachment_list)\n </string> </value> </item> <item> diff --git a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/ERP5Site_notifyReportComplete.xml b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/ERP5Site_notifyReportComplete.xml new file mode 100644 index 0000000000..b94d7279f1 --- /dev/null +++ b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/ERP5Site_notifyReportComplete.xml @@ -0,0 +1,77 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>Script_magic</string> </key> + <value> <int>3</int> </value> + </item> + <item> + <key> <string>_bind_names</string> </key> + <value> + <object> + <klass> + <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>_asgns</string> </key> + <value> + <dictionary> + <item> + <key> <string>name_container</string> </key> + <value> <string>container</string> </value> + </item> + <item> + <key> <string>name_context</string> </key> + <value> <string>context</string> </value> + </item> + <item> + <key> <string>name_m_self</string> </key> + <value> <string>script</string> </value> + </item> + <item> + <key> <string>name_subpath</string> </key> + <value> <string>traverse_subpath</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>_body</string> </key> + <value> <string>portal = context.getPortalObject()\n +\n +portal.portal_notifications.activate(queue=\'SQLQueue\').sendMessage(\n + recipient=user_name,\n + subject=subject,\n + message=message,\n + message_text_format=\'text/plain\',\n + notifier_list=(\'Site Message\',),\n + store_as_event=True,\n + attachment_list=attachment_list,\n +)\n +</string> </value> + </item> + <item> + <key> <string>_params</string> </key> + <value> <string>user_name, subject, message, attachment_list</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>ERP5Site_notifyReportComplete</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_deferred_style/bt/revision b/bt5/erp5_deferred_style/bt/revision index e55677ae8d..6d58c4e590 100644 --- a/bt5/erp5_deferred_style/bt/revision +++ b/bt5/erp5_deferred_style/bt/revision @@ -1,2 +1 @@ -108 - +109 \ No newline at end of file -- 2.30.9