Commit 4db6032a authored by Ivan Tyagov's avatar Ivan Tyagov

Clean up duplication with erp5_web form_view page templates.

Change API for Resource_addToShoppingCart.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@19556 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent bf143a0f
<type_roles>
<role id='Author'>
<property id='title'>Customer</property>
<property id='priority'>10</property>
<property id='priority'>10.0</property>
<property id='base_category_script'>ERP5Type_getSecurityCategoryFromAssignment</property>
<multi_property id='category'>function/customer</multi_property>
</role>
......
<type_roles>
<role id='Author'>
<property id='title'>Customer</property>
<property id='priority'>10</property>
<property id='priority'>10.0</property>
<property id='base_category_script'>ERP5Type_getSecurityCategoryFromAssignment</property>
<multi_property id='category'>function/customer</multi_property>
</role>
......
......@@ -73,35 +73,35 @@
"""\n
Add resource to shopping cart.\n
"""\n
from Products.Formulator.Errors import FormValidationError\n
request = container.REQUEST\n
form = getattr(context, form_id)\n
if resource is None:\n
resource = context\n
\n
# FIXME:\n
# this handling of validation errors should be automatically handled by the \n
# button itself\n
try:\n
params = form.validate_all_to_request(request)\n
except FormValidationError, validation_errors:\n
# Pack errors into the request\n
field_errors = form.ErrorFields(validation_errors)\n
request.set(\'field_errors\', field_errors)\n
# Make sure editors are pushed back as values into the REQUEST object\n
for f in form.get_fields():\n
field_id = f.id\n
if request.has_key(field_id):\n
value = request.get(field_id)\n
if callable(value):\n
value(request)\n
return form(request)\n
if form_id is not None:\n
from Products.Formulator.Errors import FormValidationError\n
form = getattr(context, form_id, None)\n
quantity = int(request.get(\'field_your_buy_quantity\'))\n
# FIXME:\n
# this handling of validation errors should be automatically handled by the \n
# button itself\n
try:\n
params = form.validate_all_to_request(request)\n
except FormValidationError, validation_errors:\n
# Pack errors into the request\n
field_errors = form.ErrorFields(validation_errors)\n
request.set(\'field_errors\', field_errors)\n
# Make sure editors are pushed back as values into the REQUEST object\n
for f in form.get_fields():\n
field_id = f.id\n
if request.has_key(field_id):\n
value = request.get(field_id)\n
if callable(value):\n
value(request)\n
return form(request)\n
\n
quantity = int(request.get(\'your_buy_quantity\'))\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
shopping_cart_items = context.SaleOrder_getShoppingCartItemList()\n
\n
if resource is None:\n
resource = context\n
\n
## check if we don\'t have already such a resource in cart\n
line_found=False\n
for order_line in shopping_cart_items:\n
......@@ -142,7 +142,7 @@ context.Base_redirect(\'view\', \\\n
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>form_id, resource=None</string> </value>
<value> <string>resource=None, quantity=1, form_id=None</string> </value>
</item>
<item>
<key> <string>errors</string> </key>
......@@ -162,22 +162,25 @@ context.Base_redirect(\'view\', \\\n
<dictionary>
<item>
<key> <string>co_argcount</string> </key>
<value> <int>2</int> </value>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>co_varnames</string> </key>
<value>
<tuple>
<string>form_id</string>
<string>resource</string>
<string>Products.Formulator.Errors</string>
<string>FormValidationError</string>
<string>quantity</string>
<string>form_id</string>
<string>_getattr_</string>
<string>container</string>
<string>request</string>
<string>getattr</string>
<string>None</string>
<string>context</string>
<string>Products.Formulator.Errors</string>
<string>FormValidationError</string>
<string>getattr</string>
<string>form</string>
<string>int</string>
<string>params</string>
<string>validation_errors</string>
<string>field_errors</string>
......@@ -186,11 +189,8 @@ context.Base_redirect(\'view\', \\\n
<string>field_id</string>
<string>value</string>
<string>callable</string>
<string>int</string>
<string>quantity</string>
<string>shopping_cart</string>
<string>shopping_cart_items</string>
<string>None</string>
<string>False</string>
<string>line_found</string>
<string>order_line</string>
......@@ -210,6 +210,8 @@ context.Base_redirect(\'view\', \\\n
<value>
<tuple>
<none/>
<int>1</int>
<none/>
</tuple>
</value>
</item>
......
......@@ -49,6 +49,10 @@
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
......@@ -119,7 +123,7 @@
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>web_form_view</string> </value>
<value> <string>form_view_editable</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
......
......@@ -126,7 +126,7 @@
</item>
<item>
<key> <string>css_class</string> </key>
<value> <string>hiddenLabel</string> </value>
<value> <string>hidden</string> </value>
</item>
<item>
<key> <string>default</string> </key>
......@@ -152,6 +152,10 @@
<key> <string>hidden</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>image</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>Resource_addToShoppingCart:method</string> </value>
......
......@@ -49,6 +49,10 @@
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
......@@ -117,7 +121,7 @@
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>web_form_view</string> </value>
<value> <string>form_view_editable</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
......
......@@ -49,6 +49,10 @@
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
......@@ -122,7 +126,7 @@
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>web_form_view</string> </value>
<value> <string>form_view_editable</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<tuple>
<string>Products.PageTemplates.ZopePageTemplate</string>
<string>ZopePageTemplate</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
<none/>
</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_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_owner</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[
<tal:block tal:replace="nothing"\n
xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal"\n
xmlns:i18n="http://xml.zope.org/namespaces/i18n">\n
<!--\n
Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.\n
Vincent Pelletier <vincent@nexedi.com>\n
Christophe Dumez <christophe@nexedi.com>\n
\n
This program is Free Software; you can redistribute it and/or\n
modify it under the terms of the GNU General Public License\n
as published by the Free Software Foundation; either version 2\n
of the License, or (at your option) any later version.\n
\n
This program is distributed in the hope that it will be useful,\n
but WITHOUT ANY WARRANTY; without even the implied warranty of\n
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n
GNU General Public License for more details.\n
\n
You should have received a copy of the GNU General Public License\n
along with this program; if not, write to the Free Software\n
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n
--></tal:block>\n
\n
<tal:block metal:define-macro="field_render">\n
<tal:block tal:condition="python: field.meta_type != \'HiddenStringField\'"\n
tal:define="field_id field/id;\n
dummy python: request.set(\'editable_mode\',1);\n
value python: request.get(field_id, None);\n
field_errors python: request.get(\'field_errors\', {});\n
field_has_error python: field_errors.has_key(field_id);\n
global form_id form_id | python: form.id;\n
field_description python: here.Base_getFieldDescription(form_id=form_id, field=field)">\n
<div tal:define="html_render python: field.render_htmlgrid(value, request)"\n
tal:attributes="title field_description;\n
class python: \' \'.join([x for x in [\'field\', field.is_required() and \'required\' or None, field_has_error and \'error\' or None, field.get_value(\'css_class\') or None] if x is not None])"\n
i18n:attributes="title" i18n:domain="ui">\n
<tal:block tal:repeat="html_tuple html_render">\n
<label>\n
<tal:block tal:content="structure python: html_tuple[0]"\n
i18n:translate="" i18n:domain="ui"/>\n
<tal:block tal:condition="preferred_html_style_developper_mode">\n
<tal:block metal:use-macro="developper_shortcut_render/macros/field_developper"/>\n
</tal:block>\n
<tal:block tal:condition="preferred_html_style_translator_mode">\n
<tal:block metal:use-macro="developper_shortcut_render/macros/field_translator"/>\n
</tal:block>\n
</label>\n
<div class="input" tal:content="structure python: html_tuple[1]"/>\n
<span tal:condition="python: field_has_error"\n
class="error"\n
tal:content="python: field_errors[field_id].error_text"\n
i18n:translate="" i18n:domain="ui"/>\n
<p class="clear" tal:condition="not:is_web_mode"></p>\n
</tal:block>\n
</div>\n
</tal:block>\n
</tal:block>
]]></string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>web_field_render</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<tuple>
<string>Products.PageTemplates.ZopePageTemplate</string>
<string>ZopePageTemplate</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
<none/>
</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_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_owner</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[
<tal:block tal:replace="nothing"\n
xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal"\n
xmlns:i18n="http://xml.zope.org/namespaces/i18n">\n
<!--\n
Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.\n
Vincent Pelletier <vincent@nexedi.com>\n
Christophe Dumez <christophe@nexedi.com>\n
\n
This program is Free Software; you can redistribute it and/or\n
modify it under the terms of the GNU General Public License\n
as published by the Free Software Foundation; either version 2\n
of the License, or (at your option) any later version.\n
\n
This program is distributed in the hope that it will be useful,\n
but WITHOUT ANY WARRANTY; without even the implied warranty of\n
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n
GNU General Public License for more details.\n
\n
You should have received a copy of the GNU General Public License\n
along with this program; if not, write to the Free Software\n
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n
\n
XXX: each case must be handled separatelly in this precise representation :\n
- both top fields must be in the same div, so they must be identified\n
strictly by their name.\n
- the middle field is rendered like the two top ones, but outside of the\n
top block.\n
- the bottom block is rendered in another way (without its group name) so it\n
must be rendered separatelly.\n
This leads to minor code duplication, but it\'s still code duplication.\n
\n
Breaks strict compatibility:\n
* Groups must be named one of "left", "right", "center", "bottom" otherwise they will not\n
be rendered.\n
* Group order doesn\'t matter. Case is sensitive.\n
* Groups names becomes "left_group", "right_group", "left1_group", "right1_group",\n
"bottom_group" for quad_form_view macro.\n
\n
It is possible to specify a group id and a group title by naming a group following the\n
"group id (Group Title)" pattern. In this case the group id will be used as fieldset css\n
class and as tag id. The group title will be used as a legend for the fieldset. If no group\n
title is found, we use group id as title.\n
-->\n
</tal:block>\n
\n
\n
<tal:block metal:define-macro="master">\n
<tal:block\n
tal:define="field_errors python: request.get(\'field_errors\', {});\n
dummy python: request.set(\'here\', here);\n
group_list python: form.Form_getGroupTitleAndId();\n
gid_list python: \' \'.join([x[\'gid\'] for x in group_list if x!=\'hidden\']);\n
field_render nocall: here/web_field_render/macros/field_render">\n
\n
<tal:block tal:condition="preferred_html_style_developper_mode">\n
<tal:block metal:use-macro="developper_shortcut_render/macros/form"/>\n
</tal:block>\n
\n
<tal:block tal:repeat="group group_list">\n
<tal:block tal:define="gid group/gid;">\n
<fieldset tal:condition="python: gid.find(\'hidden\') < 0"\n
tal:attributes="class gid;\n
id python: \'fieldset_%s\' % (gid.replace(\' \', \'_\'), );">\n
<legend tal:condition="group/gtitle" tal:content="group/gtitle" class="group_title"/>\n
<tal:block tal:repeat="field python: form.get_fields_in_group(group[\'goid\'])">\n
<tal:block metal:use-macro="field_render"/>\n
</tal:block>\n
</fieldset>\n
</tal:block>\n
</tal:block>\n
<p class="clear"></p>\n
</tal:block>\n
</tal:block>
]]></string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>web_form_render</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<tuple>
<tuple>
<string>Products.PageTemplates.ZopePageTemplate</string>
<string>ZopePageTemplate</string>
</tuple>
<none/>
</tuple>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__ac_local_roles__</string> </key>
<value>
<none/>
</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_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_text</string> </key>
<value> <string encoding="cdata"><![CDATA[
<tal:block tal:replace="nothing"\n
xmlns:tal="http://xml.zope.org/namespaces/tal"\n
xmlns:metal="http://xml.zope.org/namespaces/metal"\n
xmlns:i18n="http://xml.zope.org/namespaces/i18n">\n
<!--\n
Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.\n
Vincent Pelletier <vincent@nexedi.com>\n
Christophe Dumez <christophe@nexedi.com>\n
\n
This program is Free Software; you can redistribute it and/or\n
modify it under the terms of the GNU General Public License\n
as published by the Free Software Foundation; either version 2\n
of the License, or (at your option) any later version.\n
\n
This program is distributed in the hope that it will be useful,\n
but WITHOUT ANY WARRANTY; without even the implied warranty of\n
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n
GNU General Public License for more details.\n
\n
You should have received a copy of the GNU General Public License\n
along with this program; if not, write to the Free Software\n
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n
-->\n
</tal:block>\n
<tal:block metal:define-macro="master">\n
<tal:block metal:use-macro="here/view_main/macros/master">\n
<tal:block metal:fill-slot="main">\n
<tal:block metal:use-macro="here/web_form_render/macros/master" />\n
</tal:block>\n
</tal:block>\n
</tal:block>
]]></string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>web_form_view</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
92
\ No newline at end of file
103
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment