From 5ec6b2c9d752dce3c1cf6ba186e476718362322a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Wed, 9 Dec 2009 12:16:39 +0000 Subject: [PATCH] =?UTF-8?q?2009-09-12=20J=C3=A9rome=20*=20Allow=20renderin?= =?UTF-8?q?g=20of=20any=20form=20/=20printout=20in=20deferred=20mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@31182 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../Base_activateSimpleView.xml | 223 ++++++++++++++++++ .../Base_renderSimpleView.xml | 177 ++++++++++++++ bt5/erp5_deferred_style/bt/change_log | 2 + bt5/erp5_deferred_style/bt/revision | 2 +- 4 files changed, 403 insertions(+), 1 deletion(-) create mode 100644 bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style/Base_activateSimpleView.xml create mode 100644 bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml diff --git a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style/Base_activateSimpleView.xml b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style/Base_activateSimpleView.xml new file mode 100644 index 0000000000..1920cd575a --- /dev/null +++ b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style/Base_activateSimpleView.xml @@ -0,0 +1,223 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <tuple> + <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> + <tuple/> + </tuple> + </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>from Products.ERP5Type.Message import translateString\n +portal = context.getPortalObject()\n +request = portal.REQUEST\n +format = request.get(\'format\', \'\')\n +skin_name = request[\'deferred_portal_skin\']\n +\n +tag = \'active-report-wrapped-%s\' % random.randint(0, 1000)\n +priority = 3 # TODO: site preference\n +\n +person_value = portal.ERP5Site_getAuthenticatedMemberPersonValue()\n +if person_value is None:\n + portal.changeSkin(None)\n + return context.Base_redirect(\'view\', keep_items=dict(\n + portal_status_message=translateString(\n + "No person found for your user")))\n +\n +if person_value.getDefaultEmailText(\'\') in (\'\', None):\n + portal.changeSkin(None)\n + return context.Base_redirect(\'view\', keep_items=dict(\n + portal_status_message=translateString(\n + "You haven\'t defined your email address")))\n + \n +user_name = context.portal_membership.getAuthenticatedMember().getUserName()\n +\n +# save request parameters\n +# XXX we exclude some reserved names in a very ad hoc way\n +request_form = dict()\n +for k, v in request.form.items():\n + if k not in (\'TraversalRequestNameStack\', \'AUTHENTICATED_USER\', \'URL\',\n + \'SERVER_URL\', \'AUTHENTICATION_PATH\', \'USER_PREF_LANGUAGES\', \'PARENTS\',\n + \'PUBLISHED\', \'AcceptLanguage\', \'AcceptCharset\', \'RESPONSE\',\n + \'ACTUAL_URL\'):\n + # XXX proxy fields stores a cache in request.other that cannot be pickled\n + if k.startswith(\'field__proxyfield\'):\n + continue\n + # Remove FileUpload parameters\n + elif getattr(v, \'headers\', \'\'):\n + continue\n + request_form[k] = v\n +\n +localizer_language = portal.Localizer.get_selected_language()\n +\n +activity_context = context\n +if activity_context == portal:\n + # portal is not an active object\n + activity_context = portal.portal_simulation\n +\n +\n +params = dict()\n +form = getattr(context, deferred_style_dialog_method)\n +if hasattr(form, \'ZScriptHTML_tryParams\'):\n + # Some actions are wrapped by a script.\n + # In that case we look at script signature to pass them the sames\n + for param in form.ZScriptHTML_tryParams():\n + params[param] = request.get(param)\n +else:\n + params[\'format\'] = format\n +\n +activity_context.activate(\n + activity=\'SQLQueue\', tag=tag, priority=priority).Base_renderSimpleView(\n + localizer_language=localizer_language,\n + skin_name=skin_name,\n + request_form=request_form,\n + deferred_style_dialog_method=deferred_style_dialog_method,\n + user_name=user_name,\n + params=params,\n + )\n +\n +context.activate(activity=\'SQLQueue\', after_tag=tag).getTitle()\n +\n +portal.changeSkin(None)\n +return context.Base_redirect(\'view\', keep_items=dict(\n + portal_status_message=translateString("Report Started")))\n +</string> </value> + </item> + <item> + <key> <string>_code</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>_params</string> </key> + <value> <string>deferred_style_dialog_method, form_id, **kw</string> </value> + </item> + <item> + <key> <string>errors</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>func_code</string> </key> + <value> + <object> + <klass> + <global name="FuncCode" module="Shared.DC.Scripts.Signature"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>co_argcount</string> </key> + <value> <int>2</int> </value> + </item> + <item> + <key> <string>co_varnames</string> </key> + <value> + <tuple> + <string>deferred_style_dialog_method</string> + <string>form_id</string> + <string>kw</string> + <string>Products.ERP5Type.Message</string> + <string>translateString</string> + <string>_getattr_</string> + <string>context</string> + <string>portal</string> + <string>request</string> + <string>format</string> + <string>_getitem_</string> + <string>skin_name</string> + <string>random</string> + <string>tag</string> + <string>priority</string> + <string>person_value</string> + <string>None</string> + <string>dict</string> + <string>user_name</string> + <string>request_form</string> + <string>_getiter_</string> + <string>k</string> + <string>v</string> + <string>getattr</string> + <string>_write_</string> + <string>localizer_language</string> + <string>activity_context</string> + <string>params</string> + <string>form</string> + <string>hasattr</string> + <string>param</string> + </tuple> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>func_defaults</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>Base_activateSimpleView</string> </value> + </item> + <item> + <key> <string>warnings</string> </key> + <value> + <tuple/> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> 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 new file mode 100644 index 0000000000..dbd8e0d47c --- /dev/null +++ b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml @@ -0,0 +1,177 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <tuple> + <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> + <tuple/> + </tuple> + </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># Render a "normal" form or an OOo template in an activity and send it by email\n +from Products.ERP5Type.Message import translateString\n +portal = context.getPortalObject()\n +request = portal.REQUEST\n +request.form.update(request_form)\n +\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 +\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=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 +</string> </value> + </item> + <item> + <key> <string>_code</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>_params</string> </key> + <value> <string>localizer_language, skin_name, request_form, deferred_style_dialog_method, user_name, params</string> </value> + </item> + <item> + <key> <string>errors</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>func_code</string> </key> + <value> + <object> + <klass> + <global name="FuncCode" module="Shared.DC.Scripts.Signature"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>co_argcount</string> </key> + <value> <int>6</int> </value> + </item> + <item> + <key> <string>co_varnames</string> </key> + <value> + <tuple> + <string>localizer_language</string> + <string>skin_name</string> + <string>request_form</string> + <string>deferred_style_dialog_method</string> + <string>user_name</string> + <string>params</string> + <string>Products.ERP5Type.Message</string> + <string>translateString</string> + <string>_getattr_</string> + <string>context</string> + <string>portal</string> + <string>request</string> + <string>_apply_</string> + <string>getattr</string> + <string>report_data</string> + <string>_getitem_</string> + <string>append</string> + <string>$append0</string> + <string>_getiter_</string> + <string>x</string> + <string>len</string> + <string>attachment_name</string> + <string>attachment_list</string> + <string>str</string> + <string>False</string> + </tuple> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>func_defaults</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>Base_renderSimpleView</string> </value> + </item> + <item> + <key> <string>warnings</string> </key> + <value> + <tuple/> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_deferred_style/bt/change_log b/bt5/erp5_deferred_style/bt/change_log index e69de29bb2..4e6c03575f 100644 --- a/bt5/erp5_deferred_style/bt/change_log +++ b/bt5/erp5_deferred_style/bt/change_log @@ -0,0 +1,2 @@ +2009-09-12 Jérome +* Allow rendering of any form / printout in deferred mode \ No newline at end of file diff --git a/bt5/erp5_deferred_style/bt/revision b/bt5/erp5_deferred_style/bt/revision index 832332893a..0aeb548544 100644 --- a/bt5/erp5_deferred_style/bt/revision +++ b/bt5/erp5_deferred_style/bt/revision @@ -1 +1 @@ -67 \ No newline at end of file +74 \ No newline at end of file -- 2.30.9