From a8fb43f02e7ec6674ec7b82445f3e67d754f7429 Mon Sep 17 00:00:00 2001
From: Yoshinori Okuji <yo@nexedi.com>
Date: Mon, 21 Apr 2008 15:53:51 +0000
Subject: [PATCH] unused

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@20721 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5CPS/.cvsignore                    |   2 -
 product/ERP5CPS/CPSCorePatch.py               | 157 ------
 product/ERP5CPS/CPSDocumentPatch.py           | 259 ----------
 product/ERP5CPS/ERP5CPSBoxes.py               |  45 --
 product/ERP5CPS/ERP5CPSSite.py                | 158 ------
 .../ERP5CPS/Extensions/Site_resetDocids.py    |  55 --
 product/ERP5CPS/Extensions/install.py         | 230 --------
 product/ERP5CPS/SynchronizationToolPatch.py   |  37 --
 product/ERP5CPS/__init__.py                   |  52 --
 product/ERP5CPS/portal.gif                    | Bin 281 -> 0 bytes
 .../skins/erp5cps_default/boxes_erp5cps.pt    |  37 --
 .../skins/erp5cps_default/getBoxTypes.py      | 161 ------
 .../erp5cps_default/getCustomBoxTypes.py      |  19 -
 .../skins/erp5cps_default/header_lib.pt       |  37 --
 .../skins/erp5cps_images/logo_nexedi.png      | Bin 6140 -> 0 bytes
 .../skins/erp5cps_style/erp5cps.css.dtml      |  48 --
 .../zmi/manage_addERP5CPSSite_form.dtml       | 179 -------
 product/ERP5Compatibility/.cvsignore          |   2 -
 product/ERP5Compatibility/VERSION.txt         |   1 -
 product/ERP5Compatibility/__init__.py         |  53 --
 product/ERP5Compatibility/refresh.txt         |   0
 product/ERP5Shop/.cvsignore                   |   2 -
 product/ERP5Shop/Constraint/.cvsignore        |   2 -
 product/ERP5Shop/Constraint/__init__.py       |   0
 product/ERP5Shop/Document/.cvsignore          |   2 -
 product/ERP5Shop/Document/ShopOrder.py        | 489 ------------------
 product/ERP5Shop/Document/ShopProduct.py      | 223 --------
 product/ERP5Shop/Document/ShoppingCart.py     | 207 --------
 product/ERP5Shop/Document/__init__.py         |   0
 product/ERP5Shop/Interface/.cvsignore         |   2 -
 product/ERP5Shop/Interface/ShopOrder.py       |  67 ---
 product/ERP5Shop/Interface/ShopProduct.py     |  79 ---
 product/ERP5Shop/Interface/ShoppingCart.py    |  82 ---
 product/ERP5Shop/Interface/__init__.py        |   0
 product/ERP5Shop/Permissions.py               |   0
 product/ERP5Shop/PropertySheet/.cvsignore     |   2 -
 product/ERP5Shop/PropertySheet/ShopOrder.py   | 118 -----
 product/ERP5Shop/PropertySheet/ShopProduct.py |  67 ---
 product/ERP5Shop/PropertySheet/__init__.py    |   0
 product/ERP5Shop/ShopManager.py               |  53 --
 product/ERP5Shop/__init__.py                  |  55 --
 product/ERP5Shop/help/.cvsignore              |   2 -
 product/ERP5Shop/refresh.txt                  |   0
 product/ERP5Shop/skins/.cvsignore             |   2 -
 product/ERP5Shop/skins/erp5_shop/.cvsignore   |   2 -
 product/ERP5Shop/tool.png                     | Bin 286 -> 0 bytes
 product/MMMShop/.cvsignore                    |   1 -
 product/MMMShop/CREDITS.txt                   |   0
 product/MMMShop/ComputerProduct.py            | 340 ------------
 product/MMMShop/Extensions/CMMac.py           |  53 --
 product/MMMShop/GPL.txt                       | 340 ------------
 product/MMMShop/INSTALL.txt                   |   0
 product/MMMShop/README.txt                    |   0
 product/MMMShop/ServiceProduct.py             |  75 ---
 product/MMMShop/SimpleProduct.py              | 223 --------
 product/MMMShop/ZPL.txt                       |  59 ---
 product/MMMShop/__init__.py                   |  90 ----
 product/MMMShop/refresh.txt                   |   0
 product/MMMShop/skins/cm_storever/payme.dtml  |  36 --
 .../skins/cm_storever/payme_accepted.dtml     |   9 -
 .../skins/cm_storever/payme_rejected.dtml     |   9 -
 product/MMMShop/skins/storever/MdkRandom.py   |  20 -
 product/MMMShop/skins/storever/addToCart.py   |  23 -
 product/MMMShop/skins/storever/checkOut.dtml  | 106 ----
 .../MMMShop/skins/storever/checkoutPage.dtml  |  12 -
 .../storever/computerproduct_edit_form.dtml   | 206 --------
 .../storever/computerproduct_variant.dtml     |  31 --
 .../skins/storever/computerproduct_view.dtml  |  28 -
 .../skins/storever/create_order_page.dtml     |  19 -
 .../storever/custommer_registration.dtml      | 173 -------
 .../skins/storever/define_options.dtml        | 249 ---------
 product/MMMShop/skins/storever/favicon.ico    | Bin 281 -> 0 bytes
 .../MMMShop/skins/storever/folder18_view.dtml |  61 ---
 .../skins/storever/getCurrencyManager.py      |  11 -
 .../MMMShop/skins/storever/getShopManager.py  |  11 -
 .../MMMShop/skins/storever/getTotalPrice.py   |  40 --
 product/MMMShop/skins/storever/has_vat.py     |  11 -
 .../MMMShop/skins/storever/logged_out.dtml    |  10 -
 .../skins/storever/login_and_addToCart.dtml   |  75 ---
 .../MMMShop/skins/storever/login_form.dtml    |  68 ---
 product/MMMShop/skins/storever/logo.png       | Bin 10142 -> 0 bytes
 product/MMMShop/skins/storever/news_box.dtml  |  60 ---
 .../skins/storever/order_accept_form.dtml     |  49 --
 .../skins/storever/order_authorize_form.dtml  |  49 --
 .../skins/storever/order_build_form.dtml      |  49 --
 .../skins/storever/order_cancel_form.dtml     |  49 --
 .../skins/storever/order_confirm_form.dtml    |  75 ---
 .../skins/storever/order_inform_form.dtml     |  49 --
 .../skins/storever/order_invoice_form.dtml    |  49 --
 .../MMMShop/skins/storever/order_list.dtml    |  78 ---
 .../storever/order_partial_ship_form.dtml     |  49 --
 .../skins/storever/order_pay_form.dtml        |  49 --
 .../skins/storever/order_receive_form.dtml    |  49 --
 .../skins/storever/order_reject_form.dtml     |  49 --
 .../skins/storever/order_rejectrma_form.dtml  |  49 --
 .../skins/storever/order_repair_form.dtml     |  49 --
 .../skins/storever/order_rma_form.dtml        |  49 --
 .../skins/storever/order_ship_form.dtml       |  49 --
 .../skins/storever/order_status_modify.py     |  37 --
 .../skins/storever/register_and_addToCart.py  |  42 --
 .../storever/registered_before_addToCart.dtml |  56 --
 .../skins/storever/render_computer_variant    |  29 --
 product/MMMShop/skins/storever/search.dtml    |  78 ---
 .../storever/serviceproduct_edit_form.dtml    | 196 -------
 .../skins/storever/serviceproduct_view.dtml   |  28 -
 .../skins/storever/setCurrencyParams.py       |  18 -
 .../storever/setPersonalDetailsParams.py      |  16 -
 .../skins/storever/shoporder_print.dtml       | 191 -------
 .../skins/storever/shoporder_view.dtml        | 192 -------
 .../skins/storever/shoppingcart_view.dtml     | 196 -------
 .../skins/storever/shopproduct_edit_form.dtml | 206 --------
 .../skins/storever/special_top_menu.dtml      |  10 -
 .../skins/storever/standard_html_footer.dtml  |  19 -
 .../skins/storever/standard_html_header.dtml  | 132 -----
 product/MMMShop/skins/storever/update_cart.py |  23 -
 .../skins/storever/update_computer_product.py |  97 ----
 .../skins/storever/update_simple_product.py   |  69 ---
 .../zpt_storever/custommer_registration.pt    | 175 -------
 .../skins/zpt_storever/define_options.pt      |  60 ---
 .../skins/zpt_storever/shoppingcart_view.pt   | 140 -----
 .../zpt_storever/simpleproduct_edit_form.pt   | 130 -----
 product/Nexedi/.cvsignore                     |   3 -
 product/Nexedi/Constraint/.cvsignore          |   2 -
 product/Nexedi/Constraint/__init__.py         |   0
 product/Nexedi/Document/.cvsignore            |   2 -
 product/Nexedi/Document/NetworkProduct.py     | 134 -----
 .../Nexedi/Document/NexediServicePricing.py   | 122 -----
 product/Nexedi/Document/VPN.py                | 105 ----
 product/Nexedi/Document/WPNNode.py            | 103 ----
 product/Nexedi/Document/__init__.py           |   0
 product/Nexedi/Interface/.cvsignore           |   2 -
 product/Nexedi/Interface/__init__.py          |   0
 product/Nexedi/Permissions.py                 |   0
 product/Nexedi/PropertySheet/.cvsignore       |   2 -
 .../Nexedi/PropertySheet/NetworkProduct.py    |  37 --
 .../PropertySheet/NexediServicePricing.py     |  38 --
 product/Nexedi/PropertySheet/VPN.py           | 162 ------
 product/Nexedi/PropertySheet/WPNNode.py       |  41 --
 product/Nexedi/PropertySheet/__init__.py      |   0
 product/Nexedi/__init__.py                    |  53 --
 product/Nexedi/help/.cvsignore                |   3 -
 product/Nexedi/refresh.txt                    |   0
 product/Nexedi/skins/.cvsignore               |   3 -
 product/Nexedi/skins/nexedi_shop/.cvsignore   |   3 -
 product/Nexedi/skins/nexedi_shop/form_view.pt | 203 --------
 .../nexedi_shop/login_and_addToCart.dtml      |  58 ---
 .../skins/nexedi_shop/network_product_view.pt |  19 -
 .../skins/nexedi_shop/pricing_view.form       | 395 --------------
 148 files changed, 9906 deletions(-)
 delete mode 100755 product/ERP5CPS/.cvsignore
 delete mode 100755 product/ERP5CPS/CPSCorePatch.py
 delete mode 100755 product/ERP5CPS/CPSDocumentPatch.py
 delete mode 100755 product/ERP5CPS/ERP5CPSBoxes.py
 delete mode 100755 product/ERP5CPS/ERP5CPSSite.py
 delete mode 100755 product/ERP5CPS/Extensions/Site_resetDocids.py
 delete mode 100755 product/ERP5CPS/Extensions/install.py
 delete mode 100755 product/ERP5CPS/SynchronizationToolPatch.py
 delete mode 100755 product/ERP5CPS/__init__.py
 delete mode 100755 product/ERP5CPS/portal.gif
 delete mode 100755 product/ERP5CPS/skins/erp5cps_default/boxes_erp5cps.pt
 delete mode 100755 product/ERP5CPS/skins/erp5cps_default/getBoxTypes.py
 delete mode 100755 product/ERP5CPS/skins/erp5cps_default/getCustomBoxTypes.py
 delete mode 100755 product/ERP5CPS/skins/erp5cps_default/header_lib.pt
 delete mode 100755 product/ERP5CPS/skins/erp5cps_images/logo_nexedi.png
 delete mode 100755 product/ERP5CPS/skins/erp5cps_style/erp5cps.css.dtml
 delete mode 100755 product/ERP5CPS/zmi/manage_addERP5CPSSite_form.dtml
 delete mode 100755 product/ERP5Compatibility/.cvsignore
 delete mode 100755 product/ERP5Compatibility/VERSION.txt
 delete mode 100755 product/ERP5Compatibility/__init__.py
 delete mode 100755 product/ERP5Compatibility/refresh.txt
 delete mode 100755 product/ERP5Shop/.cvsignore
 delete mode 100755 product/ERP5Shop/Constraint/.cvsignore
 delete mode 100755 product/ERP5Shop/Constraint/__init__.py
 delete mode 100755 product/ERP5Shop/Document/.cvsignore
 delete mode 100755 product/ERP5Shop/Document/ShopOrder.py
 delete mode 100755 product/ERP5Shop/Document/ShopProduct.py
 delete mode 100755 product/ERP5Shop/Document/ShoppingCart.py
 delete mode 100755 product/ERP5Shop/Document/__init__.py
 delete mode 100755 product/ERP5Shop/Interface/.cvsignore
 delete mode 100755 product/ERP5Shop/Interface/ShopOrder.py
 delete mode 100755 product/ERP5Shop/Interface/ShopProduct.py
 delete mode 100755 product/ERP5Shop/Interface/ShoppingCart.py
 delete mode 100755 product/ERP5Shop/Interface/__init__.py
 delete mode 100755 product/ERP5Shop/Permissions.py
 delete mode 100755 product/ERP5Shop/PropertySheet/.cvsignore
 delete mode 100755 product/ERP5Shop/PropertySheet/ShopOrder.py
 delete mode 100755 product/ERP5Shop/PropertySheet/ShopProduct.py
 delete mode 100755 product/ERP5Shop/PropertySheet/__init__.py
 delete mode 100755 product/ERP5Shop/ShopManager.py
 delete mode 100755 product/ERP5Shop/__init__.py
 delete mode 100755 product/ERP5Shop/help/.cvsignore
 delete mode 100755 product/ERP5Shop/refresh.txt
 delete mode 100755 product/ERP5Shop/skins/.cvsignore
 delete mode 100755 product/ERP5Shop/skins/erp5_shop/.cvsignore
 delete mode 100755 product/ERP5Shop/tool.png
 delete mode 100755 product/MMMShop/.cvsignore
 delete mode 100755 product/MMMShop/CREDITS.txt
 delete mode 100755 product/MMMShop/ComputerProduct.py
 delete mode 100755 product/MMMShop/Extensions/CMMac.py
 delete mode 100755 product/MMMShop/GPL.txt
 delete mode 100755 product/MMMShop/INSTALL.txt
 delete mode 100755 product/MMMShop/README.txt
 delete mode 100755 product/MMMShop/ServiceProduct.py
 delete mode 100755 product/MMMShop/SimpleProduct.py
 delete mode 100755 product/MMMShop/ZPL.txt
 delete mode 100755 product/MMMShop/__init__.py
 delete mode 100755 product/MMMShop/refresh.txt
 delete mode 100755 product/MMMShop/skins/cm_storever/payme.dtml
 delete mode 100755 product/MMMShop/skins/cm_storever/payme_accepted.dtml
 delete mode 100755 product/MMMShop/skins/cm_storever/payme_rejected.dtml
 delete mode 100755 product/MMMShop/skins/storever/MdkRandom.py
 delete mode 100755 product/MMMShop/skins/storever/addToCart.py
 delete mode 100755 product/MMMShop/skins/storever/checkOut.dtml
 delete mode 100755 product/MMMShop/skins/storever/checkoutPage.dtml
 delete mode 100755 product/MMMShop/skins/storever/computerproduct_edit_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/computerproduct_variant.dtml
 delete mode 100755 product/MMMShop/skins/storever/computerproduct_view.dtml
 delete mode 100755 product/MMMShop/skins/storever/create_order_page.dtml
 delete mode 100755 product/MMMShop/skins/storever/custommer_registration.dtml
 delete mode 100755 product/MMMShop/skins/storever/define_options.dtml
 delete mode 100755 product/MMMShop/skins/storever/favicon.ico
 delete mode 100755 product/MMMShop/skins/storever/folder18_view.dtml
 delete mode 100755 product/MMMShop/skins/storever/getCurrencyManager.py
 delete mode 100755 product/MMMShop/skins/storever/getShopManager.py
 delete mode 100755 product/MMMShop/skins/storever/getTotalPrice.py
 delete mode 100755 product/MMMShop/skins/storever/has_vat.py
 delete mode 100755 product/MMMShop/skins/storever/logged_out.dtml
 delete mode 100755 product/MMMShop/skins/storever/login_and_addToCart.dtml
 delete mode 100755 product/MMMShop/skins/storever/login_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/logo.png
 delete mode 100755 product/MMMShop/skins/storever/news_box.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_accept_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_authorize_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_build_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_cancel_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_confirm_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_inform_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_invoice_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_list.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_partial_ship_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_pay_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_receive_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_reject_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_rejectrma_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_repair_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_rma_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_ship_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/order_status_modify.py
 delete mode 100755 product/MMMShop/skins/storever/register_and_addToCart.py
 delete mode 100755 product/MMMShop/skins/storever/registered_before_addToCart.dtml
 delete mode 100755 product/MMMShop/skins/storever/render_computer_variant
 delete mode 100755 product/MMMShop/skins/storever/search.dtml
 delete mode 100755 product/MMMShop/skins/storever/serviceproduct_edit_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/serviceproduct_view.dtml
 delete mode 100755 product/MMMShop/skins/storever/setCurrencyParams.py
 delete mode 100755 product/MMMShop/skins/storever/setPersonalDetailsParams.py
 delete mode 100755 product/MMMShop/skins/storever/shoporder_print.dtml
 delete mode 100755 product/MMMShop/skins/storever/shoporder_view.dtml
 delete mode 100755 product/MMMShop/skins/storever/shoppingcart_view.dtml
 delete mode 100755 product/MMMShop/skins/storever/shopproduct_edit_form.dtml
 delete mode 100755 product/MMMShop/skins/storever/special_top_menu.dtml
 delete mode 100755 product/MMMShop/skins/storever/standard_html_footer.dtml
 delete mode 100755 product/MMMShop/skins/storever/standard_html_header.dtml
 delete mode 100755 product/MMMShop/skins/storever/update_cart.py
 delete mode 100755 product/MMMShop/skins/storever/update_computer_product.py
 delete mode 100755 product/MMMShop/skins/storever/update_simple_product.py
 delete mode 100755 product/MMMShop/skins/zpt_storever/custommer_registration.pt
 delete mode 100755 product/MMMShop/skins/zpt_storever/define_options.pt
 delete mode 100755 product/MMMShop/skins/zpt_storever/shoppingcart_view.pt
 delete mode 100755 product/MMMShop/skins/zpt_storever/simpleproduct_edit_form.pt
 delete mode 100755 product/Nexedi/.cvsignore
 delete mode 100755 product/Nexedi/Constraint/.cvsignore
 delete mode 100755 product/Nexedi/Constraint/__init__.py
 delete mode 100755 product/Nexedi/Document/.cvsignore
 delete mode 100755 product/Nexedi/Document/NetworkProduct.py
 delete mode 100755 product/Nexedi/Document/NexediServicePricing.py
 delete mode 100755 product/Nexedi/Document/VPN.py
 delete mode 100755 product/Nexedi/Document/WPNNode.py
 delete mode 100755 product/Nexedi/Document/__init__.py
 delete mode 100755 product/Nexedi/Interface/.cvsignore
 delete mode 100755 product/Nexedi/Interface/__init__.py
 delete mode 100755 product/Nexedi/Permissions.py
 delete mode 100755 product/Nexedi/PropertySheet/.cvsignore
 delete mode 100755 product/Nexedi/PropertySheet/NetworkProduct.py
 delete mode 100755 product/Nexedi/PropertySheet/NexediServicePricing.py
 delete mode 100755 product/Nexedi/PropertySheet/VPN.py
 delete mode 100755 product/Nexedi/PropertySheet/WPNNode.py
 delete mode 100755 product/Nexedi/PropertySheet/__init__.py
 delete mode 100755 product/Nexedi/__init__.py
 delete mode 100755 product/Nexedi/help/.cvsignore
 delete mode 100755 product/Nexedi/refresh.txt
 delete mode 100755 product/Nexedi/skins/.cvsignore
 delete mode 100755 product/Nexedi/skins/nexedi_shop/.cvsignore
 delete mode 100755 product/Nexedi/skins/nexedi_shop/form_view.pt
 delete mode 100755 product/Nexedi/skins/nexedi_shop/login_and_addToCart.dtml
 delete mode 100755 product/Nexedi/skins/nexedi_shop/network_product_view.pt
 delete mode 100755 product/Nexedi/skins/nexedi_shop/pricing_view.form

diff --git a/product/ERP5CPS/.cvsignore b/product/ERP5CPS/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5CPS/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5CPS/CPSCorePatch.py b/product/ERP5CPS/CPSCorePatch.py
deleted file mode 100755
index f8d5c75892..0000000000
--- a/product/ERP5CPS/CPSCorePatch.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# (C) Copyright 2004 Nexedi SARL <http://nexedi.com>
-# Authors: Sebastien Robin <seb@nexedi.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as published
-# by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-#
-
-from Products.CPSCore.ProxyBase import ProxyBase, ProxyFolder
-from AccessControl import ClassSecurityInfo
-from Products.ERP5Type import Permissions
-from Globals import InitializeClass
-from Products.ERP5Type.Base import Base
-from Products.ERP5Type.Document.Folder import Folder
-from Products.CMFCore.CMFCorePermissions import View
-from Products.CMFCore.CMFCorePermissions import ModifyPortalContent
-from Products.CMFCore.CMFCorePermissions import ViewManagementScreens
-from Products.CMFCore.utils import getToolByName
-from zLOG import LOG
-
-# First we should make ProxyBase a subclass of Base
-# XXX doesn't works at all
-#ProxyBase.__bases__ += (ERP5Base,)
-#ProxyDocument.__bases__ += (ERP5Base,)
-
-class PatchedProxyBase(ProxyBase):
-
-    security = ClassSecurityInfo()
-
-
-    def manage_afterEdit(self):
-        """
-        We have to notify the proxy tool we have modified
-        this object
-        """
-        px_tool= getToolByName(self,'portal_proxies')
-        utool = getToolByName(self, 'portal_url')
-        rpath = utool.getRelativeUrl(self)
-        px_tool._modifyProxy(self,rpath)
-
-
-
-    def _propertyMap(self):
-        """
-        Returns fake property sheet
-        """
-        property_sheet = []
-
-        #property_sheet += self._properties
-
-        property_sheet += [
-            {
-              'id'    :   'docid',
-              'type'  :   'string'
-            },
-            {
-              'id'    :   'default_language',
-              'type'  :   'string'
-            },
-            {
-              'id'    :   'default_language',
-              'type'  :   'string'
-            },
-            {
-              'id'    :   'sync_language_revisions', # XXX we have to manage dict type
-              'type'  :   'dict'
-            }
-            ]
-        return tuple(property_sheet + list(getattr(self, '_local_properties', ())))
-
-    security.declareProtected(View, 'getSyncLanguageRevisions')
-    def getSyncLanguageRevisions(self):
-        """Get the mapping of language -> revision."""
-        return self._language_revs.copy()
-
-    security.declareProtected(View, 'setSyncLanguageRevisions')
-    def setSyncLanguageRevisions(self, dict):
-        """Set the mapping of language -> revision."""
-        for lang in dict.keys():
-            self.setLanguageRevision(lang,dict[lang])
-
-    security.declareProtected(View, 'getSyncRepoHistory')
-    def getSyncRepoHistory(self):
-        """Get the mapping of language -> revision."""
-        return self._language_revs.copy()
-
-    security.declareProtected(View, 'setSyncRepoHistory')
-    def setSyncRepoHistory(self, dict):
-        """Set the mapping of language -> revision."""
-        repotool = getToolByName(self, 'portal_repository')
-        #repotool.
-        for lang in dict.keys():
-            self.setLanguageRevision(lang,dict[lang])
-
-
-ProxyBase.getPath = Base.getPath
-ProxyBase.getProperty = Base.getProperty
-ProxyBase._setProperty = Base._setProperty
-ProxyBase._edit = Base._edit
-ProxyBase.asXML = Base.asXML
-ProxyBase._propertyMap = PatchedProxyBase._propertyMap
-ProxyBase.manage_afterEdit = PatchedProxyBase.manage_afterEdit
-ProxyBase.getSyncLanguageRevisions = PatchedProxyBase.getSyncLanguageRevisions
-ProxyBase.setSyncLanguageRevisions = PatchedProxyBase.setSyncLanguageRevisions
-ProxyBase.getSyncRepoHistory = PatchedProxyBase.getSyncRepoHistory
-ProxyBase.setSyncRepoHistory = PatchedProxyBase.setSyncRepoHistory
-
-ProxyFolder.asXML = Folder.asXML
-ProxyFolder.manage_setLocalPermissions = Folder.manage_setLocalPermissions
-ProxyFolder.get_local_permissions = Folder.get_local_permissions
-
-from Products.CPSCore.CPSBase import CPSBaseDocument
-
-class PatchedCPSBaseDocument(CPSBaseDocument):
-
-    security = ClassSecurityInfo()
-
-
-    def _propertyMap(self):
-        """
-        Returns fake property sheet
-        """
-        property_sheet = []
-
-        property_sheet += self._properties
-
-        property_sheet += [
-            {
-              'id'    :   'Title',
-              'type'  :   'string'
-            },
-            {
-              'id'    :   'description',
-              'type'  :   'string'
-            },
-            ]
-        return tuple(property_sheet + list(getattr(self, '_local_properties', ())))
-
-CPSBaseDocument.getPath = Base.getPath
-CPSBaseDocument.getProperty = Base.getProperty
-CPSBaseDocument._setProperty = Base._setProperty
-CPSBaseDocument._edit = Base._edit
-CPSBaseDocument.asXML = Base.asXML
-CPSBaseDocument.get_local_permissions = Base.get_local_permissions
-CPSBaseDocument.manage_setLocalPermissions = Base.manage_setLocalPermissions
-CPSBaseDocument._propertyMap = PatchedCPSBaseDocument._propertyMap
-
diff --git a/product/ERP5CPS/CPSDocumentPatch.py b/product/ERP5CPS/CPSDocumentPatch.py
deleted file mode 100755
index f7f95280c2..0000000000
--- a/product/ERP5CPS/CPSDocumentPatch.py
+++ /dev/null
@@ -1,259 +0,0 @@
-# (C) Copyright 2004 Nexedi SARL <http://nexedi.com>
-# Authors: Sebastien Robin <seb@nexedi.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as published
-# by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-#
-
-from Products.CPSDocument.CPSDocument import CPSDocument
-from Products.CPSSchemas.BasicFields import CPSImageField, CPSFileField, CPSDateTimeField
-from Products.CPSSchemas.BasicFields import CPSStringField, CPSIntField
-from Products.ERP5Type.Base import Base
-from Products.ERP5Type.Utils import UpperCase
-from Acquisition import aq_base, aq_inner
-from AccessControl import ClassSecurityInfo
-from Products.CMFCore.CMFCorePermissions import View
-from zLOG import LOG
-
-class PatchedCPSDocument(CPSDocument):
-
-    security = ClassSecurityInfo()
-
-    security.declareProtected( View, '_propertyMap' )
-    def _propertyMap(self):
-        """
-          Returns fake property sheet
-        """
-        property_sheet = []
-        property_sheet.append(
-            {
-              'id'    :   'layout_and_schema',
-              'type'  :   'object'
-            }
-            )
-        property_sheet.append(
-            {
-              'id'    :   'cps_frozen',
-              'type'  :   'int'
-            }
-            )
-        type_info = self.getTypeInfo()
-        field_list = []
-        if type_info is not None:
-            if hasattr(type_info,'getDataModel'):
-              data_model = type_info.getDataModel(self)
-              if data_model is not None:
-                    field_list = data_model._fields.items()
-        field_list.sort()
-        for (prop_id,field) in field_list:
-            f_type = None
-            if isinstance(field,CPSImageField):
-                f_type = 'object'
-            elif isinstance(field,CPSStringField):
-                f_type = 'string'
-            elif isinstance(field,CPSDateTimeField):
-                f_type = 'date'
-            elif isinstance(field,CPSFileField):
-                f_type = 'object'
-            elif isinstance(field,CPSIntField):
-                f_type = 'int'
-            elif isinstance(field,CPSDocument):
-                pass
-            if prop_id.find('attachedFile')==0:
-                f_type='object'  # In a flexible content, we do have some attachedFile_f1
-                                 # which are CPStringFiels with some binary data
-                                 # XXX This should NOT BE NEEDED!!
-            if f_type is not None:
-                property_sheet.append(
-                    {
-                        'id'    :   prop_id,
-                        'type'  :   f_type
-                    }
-                    )
-        return tuple(property_sheet + list(getattr(self, '_local_properties', ())))
-
-
-    security.declareProtected( View, 'getProperty' )
-    def getProperty(self, key, d=None):
-        """
-          Previous Name: getValue
-
-          Generic accessor. Calls the real accessor
-        """
-        accessor_name = 'get' + UpperCase(key)
-        base = aq_base(self)
-        data_model = None
-        if hasattr(self,'getTypeInfo'):
-          type_info =  self.getTypeInfo()
-          if hasattr(type_info,'getDataModel'):
-            data_model = self.getTypeInfo().getDataModel(self)
-        if data_model is not None and data_model.has_key(key):
-            return data_model.get(key)
-        elif hasattr(base,accessor_name):
-            method = getattr(base,accessor_name)
-            return method()
-        return None
-
-    security.declarePrivate('getLayoutAndSchema' )
-    def getLayoutAndSchema(self):
-        if hasattr(self,'.cps_layouts') and hasattr(self,'.cps_schemas'):
-            return (aq_base(self._getOb(".cps_layouts")),aq_base(self._getOb(".cps_schemas")))
-        return None
-
-    security.declarePrivate('setLayoutAndSchema' )
-    def setLayoutAndSchema(self, data):
-        """
-        data must be : (layout,schema)
-        """
-        if data is not None:
-            self._setOb(".cps_layouts",data[0])
-            self._setOb(".cps_schemas",data[1])
-
-    security.declarePrivate('_setProperty' )
-    def _setProperty(self, key, value, type='string'):
-        """
-          Set the property for cps objects
-        """
-        LOG('PatchCPSDoc._setProperty',0,'key: %s, value: %s' % (repr(key),repr(value)))
-        accessor_name = 'set' + UpperCase(key)
-        if hasattr(aq_base(self),accessor_name):
-            method = getattr(self, accessor_name)
-            return method(value)
-        else:
-            setattr(self,key,value)
-            # This solution below doesn't works well, it is better
-            # to just set the attribute.
-            #data_model = self.getTypeInfo().getDataModel(self)
-            #type_info = self.getTypeInfo()
-            #kw = {key:value}
-            #type_info.editObject(self,kw)
-
-    security.declarePrivate('edit' )
-    def edit(self, REQUEST=None, force_update = 0, reindex_object = 0, **kw):
-        return self._edit(REQUEST=REQUEST, force_update=force_update, reindex_object=reindex_object, **kw)
-
-
-    # Object attributes update method
-    security.declarePrivate( '_edit' )
-    def _edit(self, REQUEST=None, force_update = 0, reindex_object = 0, **kw):
-        """
-          Generic edit Method for all ERP5 object
-          The purpose of this method is to update attributed, eventually do
-          some kind of type checking according to the property sheet and index
-          the object.
-      
-          Each time attributes of an object are updated, they should
-          be updated through this generic edit method
-        """
-        LOG('PatchCPSDoc._edit, kw: ',0,kw)
-        try:
-            categoryIds = self._getCategoryTool().getBaseCategoryIds()
-        except:
-            categoryIds = []
-        #if kw.has_key('layout_and_schema'):
-        #  self.setLayoutAndSchema(kw['layout_and_schema'])
-        for key in kw.keys():
-            accessor = 'get' + UpperCase(key)
-            #if key in categoryIds:
-            #  self._setCategoryMembership(key, kw[key])
-            #if key != 'id' and key!= 'layout_and_schema':
-            if key != 'id' :
-                # We only change if the value is different
-                # This may be very long.... 
-                self._setProperty(key, kw[key])
-
-def getCoverage(self):
-    """
-    """
-    if hasattr(self,'coverage'):
-        return self.coverage
-    return None
-
-def getCreator(self):
-    """
-    """
-    #if hasattr(self,'coverage'):
-    #  return self.coverage
-    return None
-
-def getRelation(self):
-    """
-    """
-    if hasattr(self,'relation'):
-        return self.relation
-    return None
-
-def setRelation(self,value):
-    """
-    """
-    setattr(self,'relation',value)
-
-def getSource(self):
-    """
-    """
-    if hasattr(self,'source'):
-        return self.source
-    return None
-
-def getPreview(self):
-    """
-    """
-    if hasattr(self,'preview'):
-        return self.preview
-    return None
-
-def setCreator(self,value):
-    """
-    """
-    setattr(self,'creator',value)
-
-def setCreationDate(self,value):
-    """
-    """
-    setattr(self,'creation_date',value)
-
-def setCpsFrozen(self, data):
-    """
-    setter for cps frozen property in order to now
-    if an object is frozen or not
-    """
-    setattr(self,'_cps_frozen',data)
-
-def getCpsFrozen(self):
-    """
-    getter for cps frozen property in order to now
-    if an object is frozen or not
-    """
-    return getattr(self,'_cps_frozen',0)
-
-CPSDocument.getCoverage = getCoverage
-CPSDocument.getCreator = getCreator
-CPSDocument.getRelation = getRelation
-CPSDocument.setCreator = setCreator
-CPSDocument.setRelation = setRelation
-CPSDocument.getSource = getSource
-CPSDocument.getCpsFrozen = getCpsFrozen
-CPSDocument.setCpsFrozen = setCpsFrozen
-CPSDocument.getPreview = getPreview
-CPSDocument.setCreationDate = setCreationDate
-CPSDocument.getProperty = PatchedCPSDocument.getProperty
-CPSDocument.getLayoutAndSchema = PatchedCPSDocument.getLayoutAndSchema
-CPSDocument.setLayoutAndSchema = PatchedCPSDocument.setLayoutAndSchema
-CPSDocument._propertyMap = PatchedCPSDocument._propertyMap
-CPSDocument.setProperty = Base.setProperty
-CPSDocument._setProperty = PatchedCPSDocument._setProperty
-CPSDocument.get_local_permissions = Base.get_local_permissions
-CPSDocument.asXML = Base.asXML
-CPSDocument.manage_setLocalPermissions = Base.manage_setLocalPermissions
-CPSDocument._edit = PatchedCPSDocument._edit
diff --git a/product/ERP5CPS/ERP5CPSBoxes.py b/product/ERP5CPS/ERP5CPSBoxes.py
deleted file mode 100755
index 1020c411ad..0000000000
--- a/product/ERP5CPS/ERP5CPSBoxes.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/python
-# Authors : Tarek Ziade tziade@nuxeo.com
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as published
-# # by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-#
-
-boxes = {
-
-            'erp5cps_header': {'type':'Base Box',
-                                'title': 'En-tête page ERP5',
-                                'btype': 'header',
-                                'provider': 'erp5cps',
-                                'slot': 'top',
-                                'order': 1,
-                                  },
-
-            }
-
-
-guard_boxes = {'erp5cps_header': {'guard_permissions' : '',
-                                  'guard_roles' : 'Authenticated',
-                                  'guard_expr' : '',
-                                 },
-             }
-
-
-def getBoxes():
-    return boxes
-
-
-def getGuardBoxes():
-    return guard_boxes
-
-
diff --git a/product/ERP5CPS/ERP5CPSSite.py b/product/ERP5CPS/ERP5CPSSite.py
deleted file mode 100755
index 47fd1d8322..0000000000
--- a/product/ERP5CPS/ERP5CPSSite.py
+++ /dev/null
@@ -1,158 +0,0 @@
-#
-# Authors : Tarek Ziade tziade@nuxeo.com
-#           Robin Sebastien seb@nexedi.com
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as published
-# by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-#
-""" CPS ERP5 Portal
-"""
-
-import Globals
-from Globals import InitializeClass
-from zLOG import LOG, INFO, DEBUG
-from Products.ExternalMethod.ExternalMethod import ExternalMethod
-
-from Products.CMFDefault.Portal import PortalGenerator
-from Products.ERP5.ERP5Site import ERP5Generator
-from Products.CPSDefault.Portal import CPSDefaultSite
-from Products.CMFCore.utils import getToolByName
-
-from Products.ERP5.ERP5Site import ERP5Site
-
-from os import path
-
-
-
-
-manage_addERP5CPSSiteForm = Globals.HTMLFile(
-    'zmi/manage_addERP5CPSSite_form',
-    globals())
-
-def manage_addERP5CPSSite(dispatcher, id,
-                               title='ERP5 CPS Site',
-                               description='',
-                               langs_list=None,
-                               root_id='root',
-                               root_sn='CPS',
-                               root_givenName='Root',
-                               root_email='root@localhost',
-                               root_password1='',
-                               root_password2='',
-                               enable_portal_joining=1,
-                               sql_connection_type='Z MySQL Database Connection',
-                               sql_connection_string='test test',
-                               REQUEST=None):
-    """Add a Intranet SN Default Site."""
-
-    _log = []
-    def pr(bla, zlog=1, _log=_log):
-        if bla == 'flush':
-            return '\n'.join(_log)
-        _log.append(bla)
-        if (bla and zlog):
-            LOG('addERP5CPSSite:', INFO, bla)
-
-    if not root_password1:
-        raise ValueError, 'You have to fill CPS Administrator password!'
-
-    if root_password1 != root_password2:
-        raise ValueError, 'Password confirmation does not match password'
-
-    id = id.strip()
-    title = title.strip()
-    description = description.strip()
-    root_givenName = root_givenName.strip()
-    root_sn = root_sn.strip()
-    email_from_name = '%s %s' % (root_givenName, root_sn)
-    root_email = root_email.strip()
-
-    pr('Adding a ERP5CPS Site')
-    gen = ERP5CPSGenerator()
-    #portal = gen.create(dispatcher, id, 0,sql_connection_type,sql_connection_string)
-    portal = gen.create(dispatcher, id, 0)
-    gen.setupDefaultProperties(portal, title, description,
-                               email_from_address=root_email,
-                               email_from_name=email_from_name,
-                               validate_email=0)
-    portal.sql_connection_type = sql_connection_type
-    portal.sql_connection_string = sql_connection_string
-
-    pr('Creating cpsupdate External Method in CPS Site')
-    cpsupdate = ExternalMethod('cpsupdate',
-                               'CPSDefault Updater',
-                               'CPSDefault.cpsinstall',
-                               'cpsupdate')
-    portal._setObject('cpsupdate', cpsupdate)
-
-    pr('Creating benchmark External Method')
-    benchmarktimer = ExternalMethod('BenchmarkTimer',
-                                    'BenchmarkTimer',
-                                    'CPSDefault.benchmarktimer',
-                                    'BenchmarkTimerInstance')
-    portal._setObject('Benchmarktimer', benchmarktimer)
-
-    pr('Creating i18n Updater Support')
-    i18n_updater = ExternalMethod('i18n Updater',
-                                  'i18n Updater',
-                                  'CPSDefault.cpsinstall',
-                                  'cps_i18n_update')
-    portal._setObject('i18n Updater', i18n_updater)
-
-    pr('Executing CPSDefault Installer')
-    pr(portal.cpsupdate(langs_list=langs_list, is_creation=1 ), 0)
-
-    pr('Configuring CPSDefault Site')
-    # editProperties do not work with ZTC due to usage of REQUEST
-    # to send properties :/
-    # herve: REQUEST is a mapping. Have you checked using
-    #            REQUEST={'smtp_host': 'localhost'}
-    #        as an argument?
-    portal.MailHost.smtp_host = 'localhost'
-    portal.manage_changeProperties(smtp_server='localhost', REQUEST=None)
-
-    # Launching specific Intranet SN stuffs
-    pr('Launching CPS ERP5 Specifics')
-    ERP5CPS_installer = ExternalMethod('CPS ERP5 UPDATE',
-                                          'CPS ERP5 UPDATE',
-                                          'ERP5CPS.install',
-                                          'install')
-    portal._setObject('ERP5CPS_installer', ERP5CPS_installer)
-
-    pr(portal.ERP5CPS_installer(), 0)
-
-    pr('Done')
-    if REQUEST is not None:
-        REQUEST.RESPONSE.setHeader('Content-Type', 'text/plain')
-
-    return pr('flush')
-
-class ERP5CPSSite(CPSDefaultSite,ERP5Site):
-    """CPS ERP5 Site  variant of a CPS Default Site.
-    """
-    constructors = (manage_addERP5CPSSiteForm, manage_addERP5CPSSite, )
-    meta_type = 'ERP5 CPS Site'
-
-    icon = 'portal.gif'
-
-    enable_portal_joining = 0
-
-    _properties = CPSDefaultSite._properties
-
-InitializeClass(ERP5CPSSite)
-
-class ERP5CPSGenerator(PortalGenerator):
-    """Set up a CPS Site."""
-    klass = ERP5CPSSite
-
diff --git a/product/ERP5CPS/Extensions/Site_resetDocids.py b/product/ERP5CPS/Extensions/Site_resetDocids.py
deleted file mode 100755
index 3c4f574284..0000000000
--- a/product/ERP5CPS/Extensions/Site_resetDocids.py
+++ /dev/null
@@ -1,55 +0,0 @@
-from Products.ERP5SyncML.Conduit.ERP5Conduit import ERP5Conduit
-
-def main(self):
-  xml_workspace = """<erp5><object id="1320758020__0001" portal_type="Workspace">
-    <layout_and_schema type="object">None</layout_and_schema>
-    <Coverage type="string"></Coverage>
-    <CreationDate type="date">2004-06-01 12:57:21</CreationDate>
-    <Creator type="string">seb</Creator>
-    <Description type="string"></Description>
-    <EffectiveDate type="date">None</EffectiveDate>
-    <ExpirationDate type="date">None</ExpirationDate>
-    <Format type="string">text/html</Format>
-    <Language type="string">en</Language>
-    <ModificationDate type="date">2004-06-01 12:57:21</ModificationDate>
-    <Relation type="string"></Relation>
-    <Rights type="string"></Rights>
-    <Source type="string"></Source>
-    <Title type="string">Root of Workspaces</Title>
-    <allow_discussion type="int">0</allow_discussion>
-    <hidden_folder type="int">0</hidden_folder>
-    <preview type="object">None</preview>
-    <local_role id="seb" type="tokens">permission:Modify_portal_content</local_role>
-  </object>
-  </erp5>"""
-
-  xml_section = """<erp5><object id="628256376__0001" portal_type="Section">
-    <layout_and_schema type="object">None</layout_and_schema>
-    <Coverage type="string"></Coverage>
-    <CreationDate type="date">2004-06-01 12:57:21</CreationDate>
-    <Creator type="string">seb</Creator>
-    <Description type="string"></Description>
-    <EffectiveDate type="date">None</EffectiveDate>
-    <ExpirationDate type="date">None</ExpirationDate>
-    <Format type="string">text/html</Format>
-    <Language type="string">en</Language>
-    <ModificationDate type="date">2004-06-01 12:57:21</ModificationDate>
-    <Relation type="string"></Relation>
-    <Rights type="string"></Rights>
-    <Source type="string"></Source>
-    <Title type="string">Root of Sections</Title>
-    <allow_discussion type="int">0</allow_discussion>
-    <hidden_folder type="int">0</hidden_folder>
-    <preview type="object">None</preview>
-  </object>
-  </erp5>"""
-
-  portal_repository = self.portal_repository
-
-  conduit = ERP5Conduit()
-  conduit.addNode(xml=xml_workspace,object=portal_repository)
-  conduit.addNode(xml=xml_section,object=portal_repository)
-  
-  self.workspaces.setDocid(1320758020)
-  self.sections.setDocid(628256376)
-  return "ok"
diff --git a/product/ERP5CPS/Extensions/install.py b/product/ERP5CPS/Extensions/install.py
deleted file mode 100755
index 1fc51e9812..0000000000
--- a/product/ERP5CPS/Extensions/install.py
+++ /dev/null
@@ -1,230 +0,0 @@
-#!/usr/bin/python
-#
-# Authors : Tarek Ziade tziade@nuxeo.com
-#           Robin Sebastien seb@nexedi.com
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as published
-# # by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-#
-
-"""
-ERP5CPS Installer
-
-HOWTO USE THAT ?
-
- - Log into the ZMI as manager
- - Go to your CPS root directory
- - Create an External Method with the following parameters:
-
-     id    : ERP5CPS INSTALLER (or whatever)
-     title : ERP5CPS INSTALLER (or whatever)
-     Module Name   :  ERP5CPS.install
-     Function Name : install
- - save it
- - click now the test tab of this external method.
-"""
-
-import sys, os
-from zLOG import  LOG,INFO,DEBUG,TRACE
-from OFS.ObjectManager import BadRequestException, BadRequest
-from Products.ExternalMethod.ExternalMethod import ExternalMethod
-from Products.CMFCore.CMFCorePermissions import View, ModifyPortalContent
-from Products.DCWorkflow.Transitions import TRIGGER_USER_ACTION
-
-from Products.CPSCore.CPSWorkflow import TRANSITION_BEHAVIOR_PUBLISHING
-from Products.CPSInstaller.CPSInstaller import CPSInstaller
-from Products.ERP5.ERP5Site import ERP5Site
-from Products.ERP5.ERP5Site import ERP5Generator
-from Products.ERP5CPS.ERP5CPSSite import ERP5CPSGenerator
-from Products.ERP5CPS import ERP5CPSBoxes
-from Products.CMFCore.utils import getToolByName
-from os import path
-
-
-SECTIONS_ID = 'sections'
-WORKSPACES_ID = 'workspaces'
-
-
-
-SKINS = { 'erp5cps_default': 'Products/ERP5CPS/skins/erp5cps_default',
-          'erp5cps_style': 'Products/ERP5CPS/skins/erp5cps_style',
-          'erp5cps_images': 'Products/ERP5CPS/skins/erp5cps_images',
-          'pro': 'Products/ERP5/skins/pro',
-          'erp5': 'Products/ERP5/skins/erp5',
-          'activity': 'Products/CMFActivity/skins/activity',
-          }
-
-
-class ERP5CPSInstaller(CPSInstaller,ERP5Generator):
-    """ERP5 CPS installer class definition
-    """
-    product_name = 'ERP5CPS'
-
-    def log(self,message):
-        CPSInstaller.log(self,message)
-        LOG('ERP5CPSInstaller',INFO,message)
-
-    def install(self):
-        """Main call
-        """
-        self.log("Starting ERP5CPS specific install")
-        self.updateCPS()
-        self.verifySkins(SKINS)
-        self.defineSkins()
-        self.setupTranslations()
-        self.installMandatoryProducts()
-        self.installTreeLoader()
-        self.setupBoxes()
-        self.finalize()
-        #self.reindexCatalog()
-        self.installERP5()
-
-        self.log("End of specific ERP5CPS install")
-
-    def updateCPS(self):
-        """Update CPS
-        """
-        self.portal.cpsupdate()
-
-    def defineSkins(self):
-        """check skin order for ERP5/CPS compatibility
-        """
-        portal_skin = getattr(self.portal,'portal_skins')
-        layers = portal_skin.selections
-
-
-        for key in layers.keys():
-            selection = layers[key]
-            position = selection.find('pro')
-            if position >= 0:
-                splitted = selection.split(', ')
-                try:
-                    index_pos = splitted.index('pro')
-                except:
-                    raise str(splitted)
-                del(splitted[index_pos])
-                splitted.append('pro')
-                selection = ', '.join(splitted)
-                layers[key] = selection
-
-
-    def installERP5(self):
-        """
-        Install ERP5
-        """
-        gen = ERP5Generator()
-        gen.setupTools(self.portal)
-        gen.setupBusinessTemplate(self.portal)
-
-    def installProduct(self,ModuleName,
-        InstallModuleName='install',MethodName='install'):
-        """ creates an external method for a
-            product install and launches it
-        """
-        objectName ="cpserp5_"+ModuleName+"_installer"
-
-        objectName = objectName.lower()
-
-
-        # Install the product
-        self.log(ModuleName+" INSTALL [ START ]")
-        installer = ExternalMethod(objectName,
-                                   "",
-                                   ModuleName+"."+InstallModuleName,
-                                   MethodName)
-        try:
-            self.portal._setObject(objectName,installer)
-
-        except BadRequestException:
-            self.log("External Method for "+ModuleName+" already installed")
-
-        method_link = getattr(self.portal,objectName)
-
-        method_link()
-
-        self.log(ModuleName+" INSTALL [ STOP ]")
-
-
-    def installMandatoryProducts(self):
-        """Installs the mandatory products for ERP5CPS
-        """
-        pass
-        # Installing required products
-
-
-
-    def installTreeLoader(self):
-        """Install tree loader
-        """
-        if 'loadTree' not in self.portal.objectIds():
-            self.log("  Adding loadTree")
-            loadTree = ExternalMethod('loadTree',
-                                      'loadTree',
-                                      'CPSDefault.loadTree',
-                                          'loadTree')
-            self.portal._setObject('loadTree', loadTree)
-            self.log("  Protecting loadTree")
-            self.portal.loadTree.manage_permission(
-                'View', roles=['Manager'], acquire=0
-                )
-            self.portal.loadTree.manage_permission(
-                'Access contents information', roles=['Manager'], acquire=0
-                )
-
-    def setupBoxes(self):
-        """Setup Boxes
-        """
-
-        self.log("Adding ERP5CPS default boxes")
-        idbc = self.portal.portal_boxes.getBoxContainerId(self.portal)
-
-        self.log("Checking /%s" % idbc )
-
-        if idbc not in self.portal.objectIds():
-            self.log("   Creating")
-            self.portal.manage_addProduct['CPSDefault'].addBoxContainer()
-
-        # importing boxes
-        boxes = ERP5CPSBoxes.getBoxes()
-        guard_boxes = ERP5CPSBoxes.getGuardBoxes()
-
-        ttool = self.portal.portal_types
-
-        box_container = self.portal[idbc]
-
-        existing_boxes = box_container.objectIds()
-
-        for box in boxes.keys():
-            if box not in existing_boxes:
-                self.log("Creation of box: %s" % box)
-                apply(ttool.constructContent,
-                    (boxes[box]['type'], box_container,
-                    box, None), {})
-                ob = getattr(box_container, box)
-                ob.manage_changeProperties(**boxes[box])
-            else:
-                ob = getattr(box_container, box)
-
-            # defining guards
-            if guard_boxes.has_key(box):
-                guard_box = guard_boxes[box]
-                self.log("Setting up guards for box: %s" % box)
-                ob.setGuardProperties(guard_box)
-
-
-
-def install(self):
-    installer = ERP5CPSInstaller(self)
-    installer.install()
-    return installer.logResult()
diff --git a/product/ERP5CPS/SynchronizationToolPatch.py b/product/ERP5CPS/SynchronizationToolPatch.py
deleted file mode 100755
index 2ce270a96e..0000000000
--- a/product/ERP5CPS/SynchronizationToolPatch.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# (C) Copyright 2004 Nexedi SARL <http://nexedi.com>
-# Authors: Sebastien Robin <seb@nexedi.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as published
-# by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-#
-
-from Products.ERP5SyncML.Conduit.ERP5Conduit import ERP5Conduit
-from Products.CMFCore.utils import getToolByName
-
-def editDocument(self, object=None, **kw):
-  """
-  This is the default editDocument method. This method
-  can easily be overwritten.
-  """
-  object._edit(**kw)
-  portal_trees = getToolByName(object,'portal_trees')
-  for o in portal_trees.objectValues():
-    try:
-      o.rebuild()
-    except (AttributeError,KeyError):
-      pass
-
-
-
-ERP5Conduit.editDocument = editDocument
diff --git a/product/ERP5CPS/__init__.py b/product/ERP5CPS/__init__.py
deleted file mode 100755
index 28d37aeaf3..0000000000
--- a/product/ERP5CPS/__init__.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# (C) Copyright 2004 Nexedi SARL <http://nexedi.com>
-# Authors: Sebastien Robin <seb@nexedi.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as published
-# by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-#
-
-import CPSCorePatch, CPSDocumentPatch, SynchronizationToolPatch
-
-import CPSCorePatch, CPSDocumentPatch, SynchronizationToolPatch
-
-# Update ERP5 Globals
-from Products.ERP5Type.Utils import initializeProduct, updateGlobals
-from Products.ERP5Type import Permissions
-import sys
-
-this_module = sys.modules[ __name__ ]
-document_classes = updateGlobals( this_module, globals(), permissions_module =
-Permissions)
-
-# Define object classes and tools
-import ERP5CPSSite
-
-object_classes = ( ERP5CPSSite.ERP5CPSSite,)
-portal_tools = ( )
-content_classes = ()
-content_constructors = ()
-
-# Finish installation
-def initialize( context ):
-  import Document
-  from zLOG import LOG
-  LOG('In ERP5CPS initialize', 0, '')
-  initializeProduct(context, this_module, globals(),
-                         document_module = Document,
-                         document_classes = document_classes,
-                         object_classes = object_classes,
-                         portal_tools = portal_tools,
-                         content_constructors = content_constructors,
-                         content_classes = content_classes)
-
diff --git a/product/ERP5CPS/portal.gif b/product/ERP5CPS/portal.gif
deleted file mode 100755
index 05a5a14d61c6459950f1c5e355cc7ca629f8771a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 281
zcmV+!0p|WkNk%w1VGsZi0E7SltgO8=Gh7T1K>z?V2M0MjJ7U(>-WfAyDN=<qW|=}l
zXy4!E6DL|PUXdwQix7UX0KNDUbEyE#|4&bH|NsB8vcVV_MgW7_0HEmyhROzW!xc@E
z0A|d+y~+q!umAu5A^8LW6aXIpEC2ui01yBW000G+;3s}SAPfUh0OM#B#DOFUauCYm
z22A5T5J<$)U<7oZLhm7IIv>ReiO_gZD3Yr)(hyV%2Zs~ult3H@1pyHWy5B;CWstaF
z?)ZErL7;0cfPsP<2?GKM8yt#@j2j373So?s9B2v^0t$(g92*J*9Ul`tn~hN-20T6+
f9v&M+3^^kUYBDr70ux9r6$%0b1QrvaBOw4gkqKOD

diff --git a/product/ERP5CPS/skins/erp5cps_default/boxes_erp5cps.pt b/product/ERP5CPS/skins/erp5cps_default/boxes_erp5cps.pt
deleted file mode 100755
index 006c093394..0000000000
--- a/product/ERP5CPS/skins/erp5cps_default/boxes_erp5cps.pt
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- mci boxes macros -->
-<!-- $Id$ -->
-
-<!-- ============================================================ -->
-<metal:block define-macro="basebox_header">
-
-    <div metal:use-macro="here/global_definition/macros/global_definition" />
-
-
-    <table cellpadding="0" cellspacing="0" width="100%">
-      <tr>
-        <td nowrap>
-            <!-- Navigation Box Goes Here -->
-            <form tal:attributes="action here/absolute_url" method="POST">
-                <div class="NavigationBox">
-                    <div metal:use-macro="here/navigation_box/macros/navigation_box">
-                        Navigation Box
-                    </div>
-                </div>
-            </form>
-
-        </td>
-      </tr>
-      <tr>
-        <td>
-          <!-- Empty Menu For Design Consistency -->
-          <div class="MenuBox">
-          </div>
-        </td>
-      </tr>
-
-
-    </table>
-
-</metal:block>
-
-
diff --git a/product/ERP5CPS/skins/erp5cps_default/getBoxTypes.py b/product/ERP5CPS/skins/erp5cps_default/getBoxTypes.py
deleted file mode 100755
index f99aaac7b6..0000000000
--- a/product/ERP5CPS/skins/erp5cps_default/getBoxTypes.py
+++ /dev/null
@@ -1,161 +0,0 @@
-##parameters=category=None
-# $Id$
-"""Return  available box types."""
-
-"""
-    {'category': 'basebox',
-     'title': 'portal_type_BaseBox_title',
-     'desc': 'portal_type_BaseBox_description',
-     'types': [
-               {'provider': 'nuxeo',
-                'id': 'hr_separator',
-                'desc': 'description_nuxeo_basebox_hr_separator',
-                'config': {'title': 'hr_sep'},
-                } ,
-               {'provider': 'nuxeo',
-                'id': 'br_separator',
-                'desc': 'description_nuxeo_basebox_br_separator',
-                'config': {'title': 'br_sep'},
-                } ,
-               {'provider': 'nuxeo',
-                'id': 'search',
-                'desc': 'description_nuxeo_basebox_search'},
-               {'provider': 'nuxeo',
-                'id': 'menu',
-                'desc': 'Onglets affichant la racine des espaces de travails,
-celle des sections et les sections de premier niveau.'},
-               {'provider': 'nuxeo',
-                'id': 'l10n_select',
-                'desc': 'description_nuxeo_basebox_l10n_select'},
-               {'provider': 'nuxeo',
-                'id': 'folder_header',
-                'desc': 'description_nuxeo_basebox_folder_header'},
-               ]
-     },
- """
-
-items = [
-
-    {'category': 'textbox',
-     'title': 'portal_type_TextBox_title',
-     'desc': 'portal_type_TextBox_description',
-     'types': [{'provider': 'nuxeo',
-                'id': 'default',
-                'desc': 'description_nuxeo_textbox_default'},
-               ]
-     },
-    {'category': 'treebox',
-     'title': 'portal_type_TreeBox_title',
-     'desc': 'portal_type_TreeBox_description',
-     'types': [{'provider': 'nuxeo',
-                'id': 'default',
-                'desc': 'description_nuxeo_treebox_default'},
-               {'provider': 'nuxeo',
-                'id': 'center',
-                'desc': 'description_nuxeo_treebox_center',
-                'config': {'contextual': 1,
-                           'children_only': 1,
-                           'depth': 2,
-                           'root': '',
-                           'authorized_only': 1,
-                           'display_managers': 0,
-                           'show_root': 1}
-                },
-               {'provider': 'nuxeo',
-                'id': 'sitemap',
-                'desc': 'description_nuxeo_treebox_sitemap',
-                'config': {'authorized_only': 1,
-                           },
-                },
-               {'provider': 'nuxeo',
-                'id': 'sitemap_adv',
-                'desc': 'description_nuxeo_treebox_sitemap_adv',
-                }
-               ]
-     },
-    {'category': 'contentbox',
-     'title': 'portal_type_ContentBox_title',
-     'desc': 'portal_type_ContentBox_description',
-     'types': [{'provider': 'nuxeo',
-                'id': 'default',
-                'desc': 'description_nuxeo_contentbox_default'},
-               {'provider': 'nuxeo',
-                'id': 'simple',
-                'desc': 'description_nuxeo_contentbox_simple'},
-               {'provider': 'nuxeo',
-                'id': 'last_modified',
-                'desc': 'description_nuxeo_contentbox_last_modified',
-                'config': {'sort_by': 'date',
-                           'direction': 'desc',
-                           'query_status': 'published'}
-                },
-               {'provider': 'nuxeo',
-                'id': 'pending',
-                'desc': 'description_nuxeo_contentbox_pending',
-                'config': {'sort_by': 'date',
-                           'direction': 'asc',
-                           'query_status': 'pending'}
-                },
-               ]
-     },
-    {'category': 'actionbox',
-     'title': 'portal_type_ActionBox_title',
-     'desc': 'portal_type_ActionBox_description',
-     'types': [{'provider': 'nuxeo',
-                'id': 'default',
-                'desc': 'description_nuxeo_actionbox_default'},
-               {'provider': 'nuxeo',
-                'id': 'user',
-                'desc': 'description_nuxeo_actionbox_user'},
-               {'provider': 'nuxeo',
-                'id': 'menu',
-                'desc': 'description_nuxeo_actionbox_menu'},
-               {'provider': 'nuxeo',
-                'id': 'header',
-                'desc': 'description_nuxeo_actionbox_header'},
-               ]
-     },
-    {'category': 'imagebox',
-     'title': 'portal_type_ImageBox_title',
-     'desc': 'portal_type_ImageBox_description',
-     'types': [{'provider': 'nuxeo',
-                'id': 'default',
-                'desc': 'description_nuxeo_imagebox_default'},
-               ]
-     },
-    {'category': 'flashbox',
-     'title': 'portal_type_FlashBox_title',
-     'desc': 'portal_type_FlashBox_description',
-     'types': [{'provider': 'nuxeo',
-                'id': 'default',
-                'desc': 'description_nuxeo_flashbox_default'},
-               ]
-     },
-    {'category': 'eventcalendarbox',
-     'title': 'portal_type_EventCalendarBox_title',
-     'desc': 'portal_type_EventCalendarBox_description',
-     'types': [{'provider': 'nuxeo',
-                'id': 'default',
-                'desc': 'description_nuxeo_basebox_calendar'},
-               ]
-     },
-    ]
-
-citems = context.getCustomBoxTypes()
-
-for citem in citems:
-    found = 0
-    for item in items:
-        if item['category'] == citem['category']:
-            item['types'].extend(citem['types'])
-            found = 1
-            break
-    if not found:
-        items.append(citem)
-
-if category:
-    for item in items:
-        if item['category'] == category:
-            return item
-
-return items
diff --git a/product/ERP5CPS/skins/erp5cps_default/getCustomBoxTypes.py b/product/ERP5CPS/skins/erp5cps_default/getCustomBoxTypes.py
deleted file mode 100755
index 92941e59b0..0000000000
--- a/product/ERP5CPS/skins/erp5cps_default/getCustomBoxTypes.py
+++ /dev/null
@@ -1,19 +0,0 @@
-## Script (Python) "getCustomBoxTypes"
-##parameters=
-# $Id$
-"""Return custom  box types."""
-
-items = [
-    {'category': 'basebox',
-     'title': 'portal_type_BaseBox_title',
-     'desc': 'portal_type_BaseBox_description',
-     'types': [{'provider': 'erp5cps',
-                'id': 'header',
-                'desc': 'Entête ERP5'},
-                ,
-               ]
-     },
-
-    ]
-
-return items
diff --git a/product/ERP5CPS/skins/erp5cps_default/header_lib.pt b/product/ERP5CPS/skins/erp5cps_default/header_lib.pt
deleted file mode 100755
index b849df6ba4..0000000000
--- a/product/ERP5CPS/skins/erp5cps_default/header_lib.pt
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- html head macro  -->
-<!-- $Id$ -->
-
-<!-- ============================================================ -->
-<metal:block define-macro="header" tal:define="charset string:ISO-8859-15">
-  <tal:block define="dummy python:request.RESPONSE.setHeader('Content-Type',
-    'text/html;; charset=%s' % charset)" />
-  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" />
-  <meta name="generator" content="Nuxeo CPS" />
-  <title tal:content="expanded_title|here/expanded_title">CPS Default</title>
-  <metal:block define-slot="base"></metal:block>
-  <link rel="Stylesheet" type="text/css" href=""
-    tal:attributes="href string:${base_url}nuxeo_css1.css" />
-  <link rel="Stylesheet" type="text/css" href=""
-    tal:attributes="href string:${base_url}erp5cps.css" />
-
-  <style type="text/css" media="all"
-    tal:content="string:@import url(${base_url}nuxeo_css2.css);"></style>
-  <link rel="stylesheet" type="text/css" media="print"
-    tal:attributes="href string:${base_url}nuxeo_print_css.css" />
-
-  <link rel="icon" href="" type="image/png" tal:attributes="href
-    string:${base_url}favicon.png" />
-  <meta http-equiv="imagetoolbar" content="no" />
-  <metal:block define-slot="head_slot"></metal:block>
-  <metal:block define-slot="css_slot"></metal:block>
-  <style type="text/css" media="all"
-    tal:condition="exists: here/custom.css"
-    tal:content="string:@import url(${base_url}custom.css);"></style>
-  <style type="text/css" media="all"
-    tal:define="custom_css here/getCPSCustomCSS|nothing"
-    tal:condition="custom_css"
-    tal:content="string:@import url(${base_url}${custom_css});"></style>
-  <metal:block define-slot="javascript_head_slot"></metal:block>
-  <script type="text/javascript"
-    tal:attributes="src string:${base_url}functions.js"></script>
-</metal:block>
diff --git a/product/ERP5CPS/skins/erp5cps_images/logo_nexedi.png b/product/ERP5CPS/skins/erp5cps_images/logo_nexedi.png
deleted file mode 100755
index 4c1c81e0b526fea36d3baa3279c9550ec1fbf88c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6140
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
IDOg7Q50+Qh1^@s6

diff --git a/product/ERP5CPS/skins/erp5cps_style/erp5cps.css.dtml b/product/ERP5CPS/skins/erp5cps_style/erp5cps.css.dtml
deleted file mode 100755
index 2fceabbd0d..0000000000
--- a/product/ERP5CPS/skins/erp5cps_style/erp5cps.css.dtml
+++ /dev/null
@@ -1,48 +0,0 @@
-<dtml-with erp5_stylesheet_properties>
-
-/*______________           CSS ERP5-CORAMY          _________________ */
-
-
-/*   _________________ Navigation Box _________________ */
-
-.NavigationBox{
- color:  &dtml-alternate_font_color;;
- background-color: &dtml-navigation_background_color;;
- vertical-align: middle;
-
-}
-
-.NavigationBox select{
- color:  &dtml-alternate_font_color;;
- vertical-align: middle;
- font-family:  &dtml-default_font_family;;
-}
-
-.input_image{
-border:none;
-background-color:transparent;
-color:transparent;
-}
-
-/*   _________________ Menu Box _________________ */
-
-.MenuBox{
- color:  &dtml-alternate_font_color;;
- background-color: &dtml-menu_background_color;;
- border-color: &dtml-alternate_border_color;;
- border-style: solid;
- border-bottom-width: 1px;
- border-left-width: 0px;
- border-top-width: 0px;
- border-right-width: 0px;
- vertical-align: middle;
-
- padding-top: 2px;
- padding-right: 0px;
- padding-bottom: 2px;
- padding-left: 0px;
- }
-
-
-</dtml-with>
-
diff --git a/product/ERP5CPS/zmi/manage_addERP5CPSSite_form.dtml b/product/ERP5CPS/zmi/manage_addERP5CPSSite_form.dtml
deleted file mode 100755
index 2c12b0f7ec..0000000000
--- a/product/ERP5CPS/zmi/manage_addERP5CPSSite_form.dtml
+++ /dev/null
@@ -1,179 +0,0 @@
-<dtml-let form_title="'Add ERP5 CPS Site'">
-<dtml-if manage_page_header>
-  <dtml-var manage_page_header>
-  <dtml-var manage_form_title>
-<dtml-else>
-  <html><head><title>&dtml-form_title;</title></head>
-  <body>
-  <h2>&dtml-form_title;</h2>
-</dtml-if>
-</dtml-let>
-
-<form action="manage_addERP5CPSSite" method="POST">
-<table cellspacing="0" cellpadding="2" border="0">
-  <tr>
-    <td align="left" valign="top" colspan="2">
-    <div class="form-help">
-      Fill this form to create a Intranet SN Portal.
-    </div>
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      Id
-    </div>
-    </td>
-    <td align="left" valign="top">
-    <input type="text" name="id" size="40" value="cps">
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      Title
-    </div>
-    </td>
-    <td align="left" valign="top">
-    <input type="text" name="title" size="40" value="CPS Portal">
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      Description
-    </div>
-    </td>
-    <td align="left" valign="top">
-    <textarea name="description" cols="60" rows="10"
-     style="width: 100%"></textarea>
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      CPS Administrator login
-    </div>
-    </td>
-    <td align="left" valign="top">
-      <input type="text" name="root_id" size="40" value="root">
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      CPS Administrator Name
-    </div>
-    </td>
-    <td align="left" valign="top">
-      <input type="text" name="root_sn" size="40" value="CPS">
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      CPS Administrator Given Name
-    </div>
-    </td>
-    <td align="left" valign="top">
-      <input type="text" name="root_givenName" size="40" value="Root">
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      CPS Administrator E-mail
-    </div>
-    </td>
-    <td align="left" valign="top">
-      <input type="text" name="root_email" size="40" value="root@cps">
-    </td>
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      CPS Administrator Password
-    </div>
-    </td>
-    <td align="left" valign="top">
-      <input type="password" name="root_password1" size="40" value="">
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      CPS Administrator Password Confirmation
-    </div>
-    </td>
-    <td align="left" valign="top">
-      <input type="password" name="root_password2" size="40" value="">
-    </td>
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      SQL Connection Type
-    </div>
-    </td>
-    <td align="left" valign="top">
-      <input type="text" name="sql_connection_type" size="40" value="Z MySQL Database Connection">
-    </td>
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      SQL Connection String
-    </div>
-    </td>
-    <td align="left" valign="top">
-      <input type="text" name="sql_connection_string" size="40" value="test test">
-    </td>
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    <div class="form-label">
-      Languages
-    </div>
-    </td>
-    <td align="left" valign="top">
-      <dtml-in "[('fr', 'French'),('en','English')]">
-        <input type="checkbox" name="langs_list:list"
-               value="<dtml-var sequence-key>"> <dtml-var sequence-item>
-      </dtml-in>
-    </td>
-  </tr>
-
-  <tr>
-    <td align="left" valign="top">
-    </td>
-    <td align="left" valign="top">
-    <div class="form-element">
-    <input class="form-element" type="submit" name="submit"
-     value=" Add " />
-    </div>
-    </td>
-  </tr>
-</table>
-</form>
-
-<dtml-if manage_page_footer>
-  <dtml-var manage_page_footer>
-<dtml-else>
-  </body></html>
-</dtml-if>
diff --git a/product/ERP5Compatibility/.cvsignore b/product/ERP5Compatibility/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5Compatibility/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5Compatibility/VERSION.txt b/product/ERP5Compatibility/VERSION.txt
deleted file mode 100755
index 258a167f2b..0000000000
--- a/product/ERP5Compatibility/VERSION.txt
+++ /dev/null
@@ -1 +0,0 @@
-ERP5Compatibility 0.1
diff --git a/product/ERP5Compatibility/__init__.py b/product/ERP5Compatibility/__init__.py
deleted file mode 100755
index 7a44a6d5a6..0000000000
--- a/product/ERP5Compatibility/__init__.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import Products.ERP5Type
-import Products.ERP5
-import Products.ERP5.XML
-import Products.ERP5.UI
-import Products.ERP5.Document
-import Products.ERP5.Document.SaleOpportunity
-import Products.ERP5Catalog
-import Products.ERP5Form
-import Products.ERP5SyncML
-
-# Aliases dictionnary for future upgrade
-__module_aliases__ = ( ( 'Products.ERP5.ERP5', Products.ERP5.ERP5Site )
-                     , ( 'Products.ERP5.XML.SynchronizationTool',
-                                                   Products.ERP5SyncML.SynchronizationTool )
-                     , ( 'Products.ERP5.XML.CatalogTool', Products.ERP5Catalog.CatalogTool )
-                     , ( 'Products.ERP5.XML.Base', Products.ERP5Type.Base )
-                     , ( 'Products.ERP5.XML.XMLObject', Products.ERP5Type.XMLObject )
-                     , ( 'Products.ERP5.XML.XMLMatrix', Products.ERP5Type.XMLMatrix )
-                     , ( 'Products.ERP5.XML.CatalogTool', Products.ERP5Catalog.CatalogTool )
-                     , ( 'Products.ERP5.UI.CategoryTool', Products.ERP5.Tool.CategoryTool )
-                     , ( 'Products.ERP5.UI.Category', Products.ERP5.Tool.Category )
-                     , ( 'Products.ERP5.UI.Form', Products.ERP5Form.Form )
-                     , ( 'Products.ERP5.UI.ListBox', Products.ERP5Form.ListBox )
-                     , ( 'Products.ERP5.UI.MatrixBox', Products.ERP5Form.MatrixBox )
-                     , ( 'Products.ERP5.UI.RelationField', Products.ERP5Form.RelationField )
-                     , ( 'Products.ERP5.UI.MultiRelationField', Products.ERP5Form.MultiRelationField )
-                     , ( 'Products.ERP5.UI.ImageField', Products.ERP5Form.ImageField )
-                     , ( 'Products.ERP5.UI.SelectionTool', Products.ERP5Form.SelectionTool )
-                     , ( 'Products.ERP5.Document.Folder', Products.ERP5Type.Document.Folder )
-                     , ( 'Products.ERP5.Document.SalesOpportunity', Products.ERP5.Document.SaleOpportunity )
-                     , ( 'Products.ERP5.Document.SalesOpportunity.SalesOpportunity', Products.ERP5.Document.SaleOpportunity.SaleOpportunity )
-                     )
-
-# Hard wired aliases
-Products.ERP5.ERP5 = Products.ERP5.ERP5Site
-Products.ERP5.XML.SynchronizationTool = Products.ERP5SyncML.SynchronizationTool
-Products.ERP5.Document.Folder = Products.ERP5Type.Document.Folder
-Products.ERP5.XML.CatalogTool = Products.ERP5Catalog.CatalogTool
-Products.ERP5.XML.Base = Products.ERP5Type.Base
-Products.ERP5.XML.XMLObject = Products.ERP5Type.XMLObject
-Products.ERP5.XML.XMLMatrix = Products.ERP5Type.XMLMatrix
-Products.ERP5.UI.CategoryTool = Products.ERP5.Tool.CategoryTool
-Products.ERP5.UI.Category = Products.ERP5.Tool.Category
-Products.ERP5.UI.Form = Products.ERP5Form.Form
-Products.ERP5.UI.ListBox = Products.ERP5Form.ListBox
-Products.ERP5.UI.MatrixBox = Products.ERP5Form.MatrixBox
-Products.ERP5.UI.RelationField = Products.ERP5Form.RelationField
-Products.ERP5.UI.MultiRelationField = Products.ERP5Form.MultiRelationField
-Products.ERP5.UI.ImageField = Products.ERP5Form.ImageField
-Products.ERP5.UI.SelectionTool = Products.ERP5Form.SelectionTool
-Products.ERP5.Document.SalesOpportunity = Products.ERP5.Document.SaleOpportunity
-Products.ERP5.Document.SalesOpportunity.SalesOpportunity = Products.ERP5.Document.SaleOpportunity.SaleOpportunity
-
diff --git a/product/ERP5Compatibility/refresh.txt b/product/ERP5Compatibility/refresh.txt
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/ERP5Shop/.cvsignore b/product/ERP5Shop/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5Shop/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5Shop/Constraint/.cvsignore b/product/ERP5Shop/Constraint/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5Shop/Constraint/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5Shop/Constraint/__init__.py b/product/ERP5Shop/Constraint/__init__.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/ERP5Shop/Document/.cvsignore b/product/ERP5Shop/Document/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5Shop/Document/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5Shop/Document/ShopOrder.py b/product/ERP5Shop/Document/ShopOrder.py
deleted file mode 100755
index e7ce51ac2c..0000000000
--- a/product/ERP5Shop/Document/ShopOrder.py
+++ /dev/null
@@ -1,489 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-import string, re
-from AccessControl import ClassSecurityInfo
-from Acquisition import aq_base
-
-from Products.CMFCore.utils import getToolByName
-
-from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
-from Products.ERP5Type.Base import Base
-from Products.ERP5Type.XMLExportImport import Base_asXML
-from Products.ERP5.VariationValue import VariationValue
-from Products.ERP5.Document.Order import Order
-from Products.ERP5.Document.Delivery import Delivery
-from Products.ERP5.Document.OrderLine import OrderLine as ERP5OrderLine
-from Products.ERP5.Document.Amount import Amount
-
-from Products.MMMShop.ShopOrder import ShopOrder as MMMShopOrder
-from Products.MMMShop.ShopOrder import OrderLine as MMMOrderLine
-from Products.MMMShop.utils import getUniqueID
-
-from Products.ERP5Type.Base import WorkflowMethod
-
-from cStringIO import StringIO
-
-from xml.dom.ext import PrettyPrint
-from xml.dom.ext.reader import PyExpat
-
-from email import Encoders
-from email.MIMEBase import MIMEBase
-import pickle
-import sys
-
-from zLOG import LOG
-
-
-match_path = re.compile('http.*//[^/]*/(.*)')
-
-
-class OrderLine(MMMOrderLine, ERP5OrderLine):
-    """
-      An orderline describes 1 line of an order
-    """
-    meta_type = 'ERP5 Shop Order Line'
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.View)
-
-    # Declarative interfaces
-    __implements__ = ( Interface.Variated, )
-
-    security.declarePublic('getProduct')
-    def getProduct(self):
-        """
-        Return the product object
-        """
-        try:
-            portal = getToolByName(self, 'portal_url').getPortalObject()
-            product_path = match_path.match(self.getProductUrl()).groups()[0]
-            return portal.restrictedTraverse(product_path)
-        except:
-            LOG('getProduct:', 100, 'I will return None', error=sys.exc_info())
-            return None
-
-    security.declarePublic('getProductTitle')
-    def getProductTitle(self):
-        """
-        Return the product object title
-        """
-        try:
-            product = self.getProduct()
-            return product.getTitle()
-        except:
-            return 'Unknown Product'
-
-    security.declarePublic('getVariationValue')
-    def getVariationValue(self):
-        product = self.getProduct()
-        return product.newVariationValue(context=self)
-
-    security.declareProtected(Permissions.AccessContentsInformation, 'asXML')
-    def asXML(self, ident=0):
-        """
-        Generate an standard xml text corresponding to the content of an OrderLine and
-        add some special properties
-        """
-        # Get the source XML
-        source_xml_str = Base_asXML(self, ident=ident)
-        # Create the PyExpat reader
-        reader = PyExpat.Reader()
-        # Create thr DOM tree from the xml string
-        source_xml = reader.fromString(source_xml_str)
-        # Get the XML root
-        xml_root = source_xml.documentElement
-        # Get the XML document
-        xml_doc = xml_root.parentNode
-        # Add product-related informations
-        product = self.getProduct()
-        LOG("PRODUCT >>>>>>>>>>",0,repr(product))
-        LOG("PRODUCT_url >>>>>>>>>>",0,repr(self.getProductUrl()))
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_id", "string", product.getId())
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_title", "string", self.getProductTitle())
-        description = product.getDescription()
-        try:
-          xml_unicode = unicode(description,encoding='UTF-8')
-        except UnicodeDecodeError:
-          xml_unicode = unicode(description,encoding='ISO-8859-1')
-        description = xml_unicode.encode('UTF-8')
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_description", "string", description)
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_processor_price", "object", self.toObjString(getattr(product,'processor_price',None)))
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_disk_price", "object", self.toObjString(getattr(product,'disk_price',None)))
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_memory_price", "object", self.toObjString(getattr(product,'memory_price',None)))
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_option_price", "object", self.toObjString(getattr(product,'option_price',None)))
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_price", "float", str(product.getPrice()))
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_expiration_date", "date", str(product.getExpirationDate()))
-        self.addSimpleNode(xml_doc, xml_root
-                          , "product_delivery_days", "int", str(product.getDeliveryDays()))
-        return self.dom2str(xml_root)
-
-    security.declarePrivate('addSimpleNode')
-    def addSimpleNode(self, xml_doc=None, xml_root=None, name=None, type=None, content=None):
-        """
-        This function add a simple Node in the XML description of the order line
-        """
-        if name == None or xml_doc == None or xml_root == None:
-            return
-        new_child = xml_doc.createElement(name)
-        new_text = xml_doc.createTextNode(content)
-        new_child.appendChild(new_text)
-        if type != None:
-            new_child.setAttribute("type", type)
-        xml_root.appendChild(new_child)
-
-    security.declarePrivate('toObjString')
-    def toObjString(self, object):
-        """
-        Convert an object to a safe string for XML Export
-        """
-        value = aq_base(object)
-        value = pickle.dumps(value)
-        msg = MIMEBase('application','octet-stream')
-        msg.set_payload(value)
-        Encoders.encode_base64(msg)
-        ascii_data = msg.get_payload()
-        ascii_data = ascii_data.replace('\n','@@@\n')
-        return ascii_data
-
-    security.declarePrivate('dom2str')
-    def dom2str(self, xml_root=None):
-        """
-        This function transform a DOM tree to string.
-        This function is only usefull for debugging.
-        """
-        xml_str = StringIO()
-        PrettyPrint(xml_root, xml_str)
-        xml_string = xml_str.getvalue()
-        return xml_string
-
-
-class ShopOrder(MMMShopOrder, Order):
-    """
-      Shop Order
-    """
-    meta_type = 'ERP5 Shop Order'
-    portal_type = 'Shop Order'
-    add_permission = Permissions.AddPortalContent
-    isPortalContent = 1
-    isRADContent = 1
-
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.View)
-
-    # Declarative properties
-    property_sheets = ( PropertySheet.Base
-                      , PropertySheet.XMLObject
-                      , PropertySheet.CategoryCore
-                      , PropertySheet.DublinCore
-                      , PropertySheet.Price
-                      , PropertySheet.Task
-                      , PropertySheet.ShopOrder
-                      )
-
-    # Default values
-    _vat = 0.0
-
-    # Factory Type Information
-    factory_type_information = \
-      {    'id'             : portal_type
-         , 'meta_type'      : meta_type
-         , 'description'    : """\
-Un tissu est une resource variantable en couleur."""
-         , 'icon'           : 'shop_product_icon.gif'
-         , 'product'        : 'ERP5Shop'
-         , 'factory'        : 'addShopOrder'
-         , 'immediate_view' : 'shop_order_view'
-         , 'allow_discussion'     : 1
-         , 'allowed_content_types': ('File', 'Document', 'Image',
-                                      )
-         , 'filter_content_types' : 1
-         , 'global_allow'   : 1
-         , 'actions'        :
-        ( { 'id'            : 'view'
-          , 'name'          : 'View'
-          , 'category'      : 'object_view'
-          , 'action'        : 'shop_order_view'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'list'
-          , 'name'          : 'Object Contents'
-          , 'category'      : 'object_action'
-          , 'action'        : 'folder_contents'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'print'
-          , 'name'          : 'Print'
-          , 'category'      : 'object_print'
-          , 'action'        : 'order_print'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'metadata'
-          , 'name'          : 'Metadata'
-          , 'category'      : 'object_view'
-          , 'action'        : 'metadata_edit_form'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'translate'
-          , 'name'          : 'Translate'
-          , 'category'      : 'object_action'
-          , 'action'        : 'translation_template_view'
-          , 'permissions'   : (
-              Permissions.TranslateContent, )
-          }
-        )
-      }
-
-    # Catalog related
-    security.declareProtected( Permissions.View, 'Title')
-    def Title(self):
-        """
-          Return a title
-        """
-        return 'Order %s' % self.id
-
-    security.declareProtected( Permissions.View, 'getStartDate')
-    def getTargetStartDate(self):
-        """
-	the start date is not defined, so we have to
-	override it here
-	"""
-	return self.CreationDate()
-
-    security.declareProtected(Permissions.View, 'Description')
-    def Description(self):
-        """
-          Return a short description
-        """
-        return "%s\n%s" % (string.join(map(lambda x:str(x.getProductTitle()),
-                                                self.listOrderLines()),'\n') ,
-          string.join((self._name,
-              self._organisation ,
-              self._address ,
-              self._zipcode ,
-              self._city,
-              self._country ,
-              self._eu_vat )))
-
-    security.declareProtected(Permissions.View, 'TranslatedTitle')
-    def TranslatedTitle(self):
-        """
-          Return a translated title
-        """
-        return "%s %s" % (self.gettext('Order'), self.id)
-
-    # Multiple Inheritance Resolving
-    security.declareProtected(Permissions.ModifyPortalContent, 'edit')
-    def edit(self, REQUEST=None, datadict=None, **kw):
-      Delivery._edit(self, **kw)
-      MMMShopOrder.edit(self, REQUEST=REQUEST, datadict=datadict)
-
-    def _createOrderRule(self):
-      # Do nothing
-      return
-
-    security.declareProtected(Permissions.ManageProperties, 'addLineToOrder')
-    def addLineToOrder(self, title, description, price, quantity, producturl=None,
-                                                                  variation_value=None):
-      """
-      Assigns a product and a quantity to the order
-      """
-      lineid = getUniqueID()
-      line = OrderLine(lineid)
-      self._setObject(lineid, line)
-      lineobj = getattr(self, lineid)
-      datadict = {      'title': title
-                      , 'description': description
-                      , 'price': price
-                      , 'quantity': quantity
-                      , 'product_url': producturl}
-      lineobj.edit(datadict=datadict)
-      if variation_value is not None: lineobj.setVariationValue(variation_value)
-      return lineobj
-
-    def getProperty(self, key, d=None):
-      return Base.getProperty(self, key, d=None)
-
-    security.declarePublic('getOldTotalPrice')
-    def getOldTotalPrice(self):
-      """
-      Get the total price for this order exc. VAT
-      """
-      all_price = self.send_fee
-      for item in self.products:
-        all_price = all_price + float(item.quantity) * item.price
-      return all_price
-
-    def hasEUTax(self):
-      if self._country == 'France':
-        return 1
-      elif self.getEUVat() != '':
-        return self._country != 'France'
-      elif self._country in self.duty_free_countries:
-        return 0
-      return 1
-
-    security.declarePublic('getTotalPriceVAT')
-    def getTotalPriceVAT(self):
-      """
-      Get the total price for this order exc. VAT
-      """
-      return self.getTotalPrice() + self.getTax()
-
-    security.declarePublic('getEuVat')
-    def getEuVat(self):
-      """
-      Get the EU VAT code
-      """
-      return self.getEUVat()
-
-    def _online_payment(self):
-      """
-      This method is called by the bank
-      to update order workflow
-      """
-      return 'toto'
-
-    #security.declareProtected( Permissions.ModifyPortalContent, 'online_payment' )
-    security.declarePublic( 'online_payment' )
-    online_payment = WorkflowMethod(_online_payment,id='online_payment')
-
-    # Overrriden methods
-    security.declarePublic('listOrderLines')
-    def listOrderLines(self):
-        """
-        List all products in this order
-        """
-        if hasattr(aq_base(self), 'products'):
-          # Instance of previous MMMShop version
-          products = self.listProducts()
-          # Recreate order lines
-          total_price = 0.0
-          for item in products:
-            product_url = item.getProduct()
-            product = self.restrictedTraverse(product_url)
-            variation_value=ComputerVariantValue(item.variant)
-            total_price += product.getPrice(variation_value) * item.getQuantity()
-            self.addLineToOrder('%s (%s)' % (product.getTitle() , variation_value.asString()),
-                                product.getDescription(),
-                                product.getPrice(variation_value),
-                                item.getQuantity(),
-                                producturl=product_url,
-                                variation_value=variation_value)
-          self._send_fee = self.send_fee
-          total_price += self._send_fee
-          self._total_price = self.total_price = total_price
-          self._country = getattr(self, 'country', '')
-          self._zipcode = getattr(self, 'zipcode', '')
-          self._city = getattr(self, 'city', '')
-          self._email = getattr(self, 'email', '')
-          self._phone = getattr(self, 'phone', '')
-          self._name = getattr(self, 'name', '')
-          self._organisation = getattr(self, 'organisation', '')
-          self._address = getattr(self, 'address', '')
-          self._eu_vat = getattr(self, 'euvat', '')
-          if self.hasEUTax():
-            self._tax = self._total_price * 0.196
-          del self.products
-          LOG("Warning ERP5 Shop Order: old order converted",0,"Order %s" % str(self.id))
-        # VariationValue(variant=item.variant)
-        return self.objectValues(('MMM Shop Order Line', 'ERP5 Shop Order Line'))
-
-    security.declareProtected(Permissions.View, 'getOwnerAccountId')
-    def getOwnerAccountId(self):
-      """
-      This method get automaticaly the id of the member account that is the owner of the ShopOrder.
-      TODO : use local roles (getOwnerId | getOwner | getOwnerInfo) to reduce the code below
-      """
-      # Construct the path of the Members folder
-      portal_types = getToolByName(self, 'portal_types')
-      root_site = portal_types.getPortalObject()
-      root_site_path = root_site.absolute_url(relative=1)
-      members_folder_path = root_site_path + "/Members"
-      members_folder = root_site.restrictedTraverse(members_folder_path)
-      # Search if the self object is in the member folder
-      object_path = self.absolute_url(relative=1)
-      splitted_path = object_path.split("/")
-      for i in range(len(splitted_path)):
-        if i != 0 :
-          test_path = "/".join(splitted_path[:-i])
-          test_object = root_site.restrictedTraverse(test_path)
-          # Member folder found !
-          if members_folder == test_object:
-            return splitted_path[i-1]
-      return None
-
-    security.declareProtected(Permissions.View, 'getOrderId')
-    def getOrderId(self):
-      """
-      This method get the id of the order.
-      """
-      return self.getId()
-
-# Compatibility dynamic patch
-MMMShopOrder.hasEUTax = ShopOrder.hasEUTax
-MMMShopOrder.listOrderLines = ShopOrder.listOrderLines
-MMMShopOrder.addLineToOrder = ShopOrder.addLineToOrder
-
-class ComputerVariantValue(VariationValue):
-  def __init__(self, variant):
-    self.variant = variant
-
-  def setVariationValue(self, context):
-    context.variant = self.variant
-
-  def __cmp__(self, other):
-    if not hasattr(other, 'variant'): return 1
-    return cmp(list(self.variant), list(other.variant))
-
-  def asString(self):
-    result = ""
-    for i in self.variant[0:4]:
-      if i != '':
-        result += "%s / " % i
-    for i in self.variant[4]:
-      if i != '':
-        result += "%s / " % i
-    for i in self.variant[5:]:
-      if i != '':
-        result += "%s / " % i
-    return result
diff --git a/product/ERP5Shop/Document/ShopProduct.py b/product/ERP5Shop/Document/ShopProduct.py
deleted file mode 100755
index 354044fa8a..0000000000
--- a/product/ERP5Shop/Document/ShopProduct.py
+++ /dev/null
@@ -1,223 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-from AccessControl import ClassSecurityInfo
-
-from Products.CMFCore.utils import getToolByName
-from Products.ERP5.Document.Resource import Resource
-from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
-from Products.ERP5Type.XMLMatrix import XMLMatrix
-from Products.MMMShop.ShopProduct import ShopProduct as MMMShopProduct
-
-from zLOG import LOG
-
-class ShopProduct(MMMShopProduct, Resource, XMLMatrix):
-    """
-      ERP5 Shop Product.
-
-      An ERP5 Shop product
-    """
-
-    meta_type = 'ERP5 Shop Product'
-    portal_type = 'Shop Product'
-    add_permission = Permissions.AddPortalContent
-    isPortalContent = 1
-    isRADContent = 1
-
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.View)
-
-    # Declarative interfaces
-    __implements__ = ( Interface.Variated, )
-
-    # Declarative properties
-    property_sheets = ( PropertySheet.Base
-                      , PropertySheet.XMLObject
-                      , PropertySheet.CategoryCore
-                      , PropertySheet.DublinCore
-                      , PropertySheet.Document
-                      , PropertySheet.Price
-                      , PropertySheet.Resource
-                      , PropertySheet.ShopProduct
-                      )
-
-    # Hard Wired Variation List
-    # XXX - may be incompatible with future versions of ERP5
-    variation_base_category_list = ()
-
-    # Factory Type Information
-    factory_type_information = \
-      {    'id'             : portal_type
-         , 'meta_type'      : meta_type
-         , 'description'    : """\
-Un tissu est une resource variantable en couleur."""
-         , 'icon'           : 'shop_product_icon.gif'
-         , 'product'        : 'ERP5Shop'
-         , 'factory'        : 'addShopProduct'
-         , 'immediate_view' : 'shop_product_view'
-         , 'allow_discussion'     : 1
-         , 'allowed_content_types': ('File', 'Document', 'Image',
-                                      )
-         , 'filter_content_types' : 1
-         , 'global_allow'   : 1
-         , 'actions'        :
-        ( { 'id'            : 'view'
-          , 'name'          : 'View'
-          , 'category'      : 'object_view'
-          , 'action'        : 'shop_product_view'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'list'
-          , 'name'          : 'Object Contents'
-          , 'category'      : 'object_action'
-          , 'action'        : 'folder_contents'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'print'
-          , 'name'          : 'Print'
-          , 'category'      : 'object_print'
-          , 'action'        : 'tissu_print'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'metadata'
-          , 'name'          : 'Metadata'
-          , 'category'      : 'object_view'
-          , 'action'        : 'metadata_edit_form'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'translate'
-          , 'name'          : 'Translate'
-          , 'category'      : 'object_action'
-          , 'action'        : 'translation_template_view'
-          , 'permissions'   : (
-              Permissions.TranslateContent, )
-          }
-        )
-      }
-
-    # Multiple Inheritance Resolving
-    security.declareProtected(Permissions.ModifyPortalContent, 'edit')
-    def edit(self, REQUEST=None, **kw):
-      kw['force_update'] = 1
-      Resource._edit(self, **kw)
-      #LOG("Show kw",0,str(kw))
-      MMMShopProduct.edit(self, REQUEST)
-
-    _setProperty = Resource._setProperty
-    setProperty = Resource.setProperty
-    getProperty = Resource.getProperty   
-    
-    security.declareProtected(Permissions.ModifyPortalContent, '_setProductType')
-    _setProductType = MMMShopProduct.setProductType
-
-    def computePrice(self, REQUEST=None):
-        return self.price
-
-    def renderVariation(self, REQUEST=None):
-        return ''
-
-    def shortVariation(self, REQUEST=None):
-        result = ''
-        for c in REQUEST.categories:
-          try:
-            o = self.portal_categories.restrictedTraverse(c)
-            result += '%s, ' % o.getTitle()
-          except:
-            pass
-        if len(result) > 0:
-          return result[0:-2]
-        return result
-
-    def _getPrice(self, context):
-        """
-          Private price depending in the context
-        """
-        return self._price
-
-    def getPrice(self, context=None, REQUEST=None, **kw):
-        """
-          Public Generic Price Getter based on the context
-
-          This Getter can be called
-
-          - from the Web: parameters will be provided
-            by the REQUEST object (context is None)
-
-          - from a Python Script: parameters can
-            are provided individually (kw is not None).
-            Optional context object / REQUEST can be
-            provided
-
-          - from another Method: the context is passed
-            (REQUEST is None and kw is None)
-
-          Context instance is created
-
-          This s
-
-
-          The REQUEST can either hold a REQUEST object
-          (resulting from an HTTP access) or a context
-          object (ie. any object in the ZODB). The context
-          can
-
-
-        """
-        return self._getPrice(self.asContext(context=context, REQUEST=REQUEST, **kw))
-
-    def _getExchangedPrice(self, context):
-        curmanager = getToolByName(self, 'portal_currency_manager')
-        exchange_rate = curmanager.getMemberExchangeRate()
-        price = float(self._getPrice(context)) / float(exchange_rate)
-        return price
-
-    def getExchangedPrice(self, context=None, REQUEST=None, **kw):
-        context = self.asContext(context=context, REQUEST=REQUEST, **kw)
-        return self._getExchangedPrice(context)
-
-    security.declareProtected(Permissions.View, 'shortVariant')
-    def shortVariant(self, variation_value, REQUEST=None):
-        result = ''
-        for c in variation_value.categories:
-          result += '%s/' % c
-        if len(result) > 0:  del result[-1]
-        return result
-
-    # Compatibility methods with early versions of StoreverShop
-    security.declareProtected(Permissions.View, 'getProductPath')
-    def getProductPath(self, REQUEST=None):
-        return self.getRelativeUrl()
-
-    security.declareProtected(Permissions.View, 'getOptionValues')
-    def getOptionValues(self, REQUEST=None):
-        return ()
diff --git a/product/ERP5Shop/Document/ShoppingCart.py b/product/ERP5Shop/Document/ShoppingCart.py
deleted file mode 100755
index d88c497ab0..0000000000
--- a/product/ERP5Shop/Document/ShoppingCart.py
+++ /dev/null
@@ -1,207 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-import string
-from AccessControl import ClassSecurityInfo
-from Products.CMFCore.utils import getToolByName, _getAuthenticatedUser
-
-from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
-from Products.ERP5.Document.OrderLine import OrderLine as ERP5OrderLine
-from Products.ERP5.Document.Amount import Amount
-
-from Products.MMMShop.ShoppingCart import ShoppingCart as MMMShoppingCart
-from Products.MMMShop.ShoppingCart import CartObject as MMMCartObject
-from Products.MMMShop import ShopPermissions
-from Products.MMMShop.utils import getUniqueID
-
-from Products.Base18.Base18 import Base18
-
-import zLOG
-
-class CartObject(MMMCartObject, ERP5OrderLine):
-
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.View)
-
-    def getVariationValue(self):
-        product = self.getProduct()
-        return product.newVariationValue(context=self)
-
-    security.declareProtected(Permissions.View, 'getExchangedPrice')
-    def getExchangedPrice(self):
-        product = self.getProduct()
-        price = product.getExchangedPrice(context=self)
-        return price
-
-    _setVariationCategoryList = Amount._setVariationCategoryList
-
-
-class ShoppingCart(MMMShoppingCart, Base18):
-
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.View)
-
-    title = "Shopping Cart"
-
-    security.declareProtected(Permissions.View, 'getTitle')
-    def getTitle():
-      return self.title
-
-    security.declareProtected(ShopPermissions.CheckoutShoppingCart, 'addProductToCart')
-    def addProductToCart( self, prod_path, prod_title, quantity, delivery_days,
-                                mail_receive=None, variation_value=None):
-        """
-        Assigns a Product and a Quantity to the ShoppingCart
-        """
-        zLOG.LOG('Shopping Cart', zLOG.INFO, 'Called add to cart')
-        for item in self.listProducts():
-            zLOG.LOG('Item', zLOG.INFO, str(( item.getProductPath(),prod_path,
-                                             variation_value.__dict__,
-                                             item.getVariationValue().__dict__)))
-            if item.getProductPath() == prod_path:
-              zLOG.LOG('Item', 0, 'same path')
-              if variation_value is None or item.getVariationValue() is None:
-                item.edit(datadict = {'quantity': item.getQuantity() + int(quantity),})
-                return
-              elif variation_value == item.getVariationValue():
-                item.edit(datadict = {'quantity': item.getQuantity() + int(quantity),})
-                return
-
-        prod_id = getUniqueID()
-        prod = CartObject(prod_id)
-        self._setObject(prod_id, prod)
-        cartobj = getattr(self, prod_id)
-        zLOG.LOG('Shopping Cart', zLOG.INFO, 'Receive by mail? %s' % str(mail_receive))
-        datadict = {      'product_path': prod_path
-                        , 'title': prod_title
-                        , 'quantity': quantity
-                        , 'delivery_days': delivery_days
-                        , 'mail_receive': mail_receive}
-        cartobj.edit(datadict=datadict)
-        cartobj.setResource(prod_path)
-        if variation_value is not None: cartobj.setVariationValue(variation_value)
-
-    security.declareProtected(ShopPermissions.CheckoutShoppingCart, 'clearCart')
-    def clearCart(self, REQUEST=None):
-        """
-        Empty the cart for all cart objects
-        """
-        for item in self.listProducts():
-            itemid = item.id
-            self.manage_delObjects(itemid)
-        if REQUEST is not None:
-            msg = 'Cart is empty'
-            REQUEST.RESPONSE.redirect('%s/view?portal_status_message=%s' % (self.secure_absolute_url(),
-                 msg.replace(' ', '+')))
-
-    security.declareProtected(Permissions.ManageProperties, 'edit')
-    def edit(self, REQUEST):
-        """
-        Edit the items in the cart (quantity)
-        """
-        req = REQUEST
-        items = self.listProducts()
-        for item in items:
-            reqvar = "%s_quantity" % item.id
-            if req.has_key(reqvar):
-                data = {'quantity': req.get(reqvar)}
-                item.edit(datadict=data)
-        msg = 'Updated cart'
-        req.RESPONSE.redirect("%s/view?portal_status_message=%s" % (self.secure_absolute_url(),
-                      msg.replace(' ', '+')))
-
-    security.declareProtected(ShopPermissions.CheckoutShoppingCart,'setPaymentData')
-    def setPaymentData(self, REQUEST):
-        """
-        Save the entered personal data for the payment method
-        """
-        zLOG.LOG('Shopping cart - set payment', zLOG.INFO, 'setPaymentData called')
-        req = REQUEST
-        shopmanager = getToolByName(self, 'portal_shop_manager')
-        paymentdata = self._paymentdata
-        paymentid = req.get('paymentmethod_id', None)
-        savedata = {}
-        msg = 'Saved payment data'
-        returnview = 'checkout'
-
-        if paymentid is None:
-            msg = 'No payment method selected'
-            returnview = 'prepareOrder'
-            zLOG.LOG('Shopping cart - set payment', zLOG.INFO, 'paymentid is None')
-        else:
-            zLOG.LOG('Shopping cart - set payment', zLOG.INFO, 'paymentid is NOT None')
-            payment = shopmanager.getPaymentMethod(paymentid)
-            paymentstructure = payment.getPaymentStructure()
-            zLOG.LOG('Shopping cart - set payment', zLOG.INFO, 'Payment structure is:\n%s' %
-                                  str(paymentstructure))
-            propmsg = ''
-            properror = 0
-            for property in paymentstructure:
-                propid = property['id']
-                userdef = property['user_defined']
-                validationinfo = property['validation_info']
-                isRequired = property['isRequired']
-                if isRequired and userdef and not validationinfo:
-                    if not req.has_key(propid) or req[propid] == '':
-                        if not propmsg:
-                            propmsg = 'Missing input for %s' % property['title']
-                        else:
-                            propmsg = "%s, %s" % (propmsg, property['title'])
-                        properror = 1
-                if req.has_key(propid) and userdef and not validationinfo:
-                    savedata[propid] = req.get(propid)
-            if propmsg:
-                msg = propmsg
-            zLOG.LOG('Shopping cart - set payment', zLOG.INFO, 'Msg is: %s' % msg)
-            if properror:
-                returnview = 'prepareOrder'
-            if shopmanager.isDeliveryNeeded():
-                if req.has_key('delivery_fee'):
-                    savedata['delivery_fee'] = req.get('delivery_fee')
-                    delivery_error = 0
-                else:
-                    delivery_error = 1
-                    msg = "%s. You have not selected any delivery method'" % msg
-                if delivery_error:
-                    returnview = 'prepareOrder'
-            paymentdata[paymentid] = savedata
-            self._paymentdata = paymentdata
-            self._p_changed = 1
-            self._last_used_payment = paymentid
-        zLOG.LOG('Shopping cart - set payment', zLOG.INFO, 'Return view is %s and msg is %s' %
-                  (returnview, msg))
-        req.RESPONSE.redirect("%s/%s?payment_method=%s&portal_status_message=%s" %
-              (self.secure_absolute_url(), returnview, paymentid, msg.replace(' ', '+')))
-
-MMMShoppingCart.addProductToCart = ShoppingCart.addProductToCart
-MMMShoppingCart.clearCart = ShoppingCart.clearCart
-MMMShoppingCart.edit = ShoppingCart.edit
-MMMShoppingCart.setPaymentData = ShoppingCart.setPaymentData
-MMMShoppingCart.getTitle = ShoppingCart.getTitle
diff --git a/product/ERP5Shop/Document/__init__.py b/product/ERP5Shop/Document/__init__.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/ERP5Shop/Interface/.cvsignore b/product/ERP5Shop/Interface/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5Shop/Interface/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5Shop/Interface/ShopOrder.py b/product/ERP5Shop/Interface/ShopOrder.py
deleted file mode 100755
index 340c7566c8..0000000000
--- a/product/ERP5Shop/Interface/ShopOrder.py
+++ /dev/null
@@ -1,67 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-try:
-    from Interface import Interface
-except ImportError:
-    # for Zope versions before 2.6.0
-    from Interface import Base as Interface
-
-class ShopOrder(Interface):
-    """
-        Common Interface for all ERP5 ShopProduct objects
-        This is where we define the common interface between MMMShop and ERP5
-    """
-
-    def edit(self):
-        """
-            Change the product parameters (price, options, etc.)
-        """
-        pass
-
-    def addLineToOrder(self, title, description, price, quantity, producturl=None):
-        """
-        Assigns a product and a quantity to the order
-        """
-        pass
-
-    def delOrderLine(self, id):
-        """
-        Delete a product from the order
-        """
-        pass
-
-
-    def listOrderLines(self):
-        """
-        List all products in this order
-        """
-        pass
-
-
-
diff --git a/product/ERP5Shop/Interface/ShopProduct.py b/product/ERP5Shop/Interface/ShopProduct.py
deleted file mode 100755
index 805a3aab39..0000000000
--- a/product/ERP5Shop/Interface/ShopProduct.py
+++ /dev/null
@@ -1,79 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-try:
-    from Interface import Interface
-except ImportError:
-    # for Zope versions before 2.6.0
-    from Interface import Base as Interface
-
-class ShopProduct(Interface):
-    """
-        Common Interface for all ERP5 ShopProduct objects
-        This is where we define the common interface between MMMShop and ERP5
-    """
-
-    def edit(self):
-        """
-            Change the product parameters (price, options, etc.)
-        """
-        pass
-
-    def getPrice(self, REQUEST=None):
-        """
-             Provides a context dependent price
-             The context can be a REQUEST object or
-             an ERP5 XMLObject or a dictionary (??) or
-             an instance with attributes
-
-             The price is provided
-             in the member preferred currency
-        """
-        pass
-
-    def getCalculatedSendFee(self, REQUEST=None):
-        """
-        Return the calculated send fee
-        depending on the context.
-
-        The price is provided
-        in the member preferred currency
-        """
-        pass
-
-    def setProductType(self, ptype):
-        """
-        Type management. Must be related to ERP5 category system
-        """
-        pass
-
-    def getProductType(self):
-        """
-        Type management. Must be related to ERP5 category system
-        """
-        pass
diff --git a/product/ERP5Shop/Interface/ShoppingCart.py b/product/ERP5Shop/Interface/ShoppingCart.py
deleted file mode 100755
index f72a029e90..0000000000
--- a/product/ERP5Shop/Interface/ShoppingCart.py
+++ /dev/null
@@ -1,82 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-try:
-    from Interface import Interface
-except ImportError:
-    # for Zope versions before 2.6.0
-    from Interface import Base as Interface
-
-class ShoppingCart(Interface):
-    """
-        Common Interface for all ERP5 ShopProduct objects
-        This is where we define the common interface between MMMShop and ERP5
-    """
-
-    def edit(self):
-        """
-            Change the product parameters (price, options, etc.)
-        """
-        pass
-
-    def listProducts(self):
-        """
-            List all products available
-        """
-        pass
-
-    def delProduct(self, id):
-        """
-        Delete a product from the shopping cart
-        """
-        pass
-
-    def addProductToCart( self, prod_path, prod_title, quantity, delivery_days, mail_receive=None):
-        """
-        Assigns a Product and a Quantity to the ShoppingCart
-        """
-        pass
-
-    def createShopOrder(self):
-        """
-            List all products available
-        """
-        pass
-
-    def clearCart(self):
-        """
-            List all products available
-        """
-        pass
-
-    def getCartTotal(self, REQUEST=None):
-        """
-            List all products available
-        """
-        pass
-
diff --git a/product/ERP5Shop/Interface/__init__.py b/product/ERP5Shop/Interface/__init__.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/ERP5Shop/Permissions.py b/product/ERP5Shop/Permissions.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/ERP5Shop/PropertySheet/.cvsignore b/product/ERP5Shop/PropertySheet/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5Shop/PropertySheet/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5Shop/PropertySheet/ShopOrder.py b/product/ERP5Shop/PropertySheet/ShopOrder.py
deleted file mode 100755
index 16332d2b39..0000000000
--- a/product/ERP5Shop/PropertySheet/ShopOrder.py
+++ /dev/null
@@ -1,118 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-class ShopOrder:
-  """
-    ShopOrder properties and categories
-  """
-
-  _properties = (
-    { 'id'          : 'address',
-      'description' : 'Address',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'city',
-      'description' : 'City',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'country',
-      'description' : 'Country',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'email',
-      'description' : 'Email',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'exchange_fee',
-      'description' : 'Exchange Fee',
-      'type'        : 'float',
-      'mode'        : 'w' },
-    { 'id'          : 'extra_fee',
-      'description' : 'Extra Fee',
-      'type'        : 'float',
-      'mode'        : 'w' },
-    { 'id'          : 'name',
-      'description' : 'Name',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'organisation',
-      'description' : 'Organisation',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'order_id',
-      'description' : 'Order Id',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'phone',
-      'description' : 'Phone',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'send_fee',
-      'description' : 'Send Fee',
-      'type'        : 'float',
-      'mode'        : 'w' },
-    { 'id'          : 'send_fee_title',
-      'description' : 'Send Fee Title',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'price',
-      'description' : 'Price',
-      'type'        : 'float',
-      'mode'        : 'w' },
-    { 'id'          : 'total_price',
-      'description' : 'Total Price',
-      'type'        : 'float',
-      'mode'        : 'w' },
-    { 'id'          : 'vat',
-      'description' : 'Vat',
-      'type'        : 'float',
-      'mode'        : 'w' },
-    { 'id'          : 'euvat',
-      'description' : 'Euvat',
-      'type'        : 'float',
-      'mode'        : 'w' },
-    { 'id'          : 'eu_vat',
-      'description' : 'The eu vat code',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'zipcode',
-      'description' : 'Zip Code',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'billing_address',
-      'description' : 'Billing Address',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'owner_account_id',
-      'description' : 'The id of the member account that own the Shop Order. This property is only used for the synchronisation process with ERP5 Sales Order.',
-      'type'        : 'string',
-      'mode'        : 'w' },
-
-  )
-
-  _categories = ( )
\ No newline at end of file
diff --git a/product/ERP5Shop/PropertySheet/ShopProduct.py b/product/ERP5Shop/PropertySheet/ShopProduct.py
deleted file mode 100755
index baf3a8c848..0000000000
--- a/product/ERP5Shop/PropertySheet/ShopProduct.py
+++ /dev/null
@@ -1,67 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#          Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-class ShopProduct:
-  """
-    ERP5 Shop Product properties and categories
-
-    This propertysheet mimics the MMM Shop implementation
-    of a Shop Product attributes
-
-    Catagories are not implemented yet.
-  """
-
-  _properties = (
-    { 'id'          : 'price',
-      'description' : 'Price',
-      'type'        : 'float',
-      'mode'        : 'w' },
-    { 'id'          : 'delivery_days',
-      'description' : 'Delivery Days',
-      'type'        : 'int',
-      'mode'        : 'w' },
-    { 'id'          : 'send_fee',
-      'description' : 'Sending Fee',
-      'type'        : 'float',
-      'mode'        : 'w' },
-    { 'id'          : 'send_fee_count',
-      'description' : 'Sending Fee Count',
-      'type'        : 'int',
-      'mode'        : 'w' },
-    { 'id'          : 'product_type',
-      'description' : 'Product Type',
-      'type'        : 'string',
-      'mode'        : 'w' },
-    { 'id'          : 'image',
-      'description' : 'Product Default Image',
-      'portal_type' : ('Image'),
-      'type'        : 'content',
-      'mode'        : 'w' },
-  )
-
-  _categories = ( )
diff --git a/product/ERP5Shop/PropertySheet/__init__.py b/product/ERP5Shop/PropertySheet/__init__.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/ERP5Shop/ShopManager.py b/product/ERP5Shop/ShopManager.py
deleted file mode 100755
index 426f46d15e..0000000000
--- a/product/ERP5Shop/ShopManager.py
+++ /dev/null
@@ -1,53 +0,0 @@
-##############################################################################
-#    Copyright (C) 2001  MMmanager.org
-#
-#    This program is free software; you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-##############################################################################
-"""
-"""
-
-ADD_CONTENT_PERMISSION = 'Add portal content'
-
-from AccessControl import ClassSecurityInfo
-from Globals import InitializeClass, package_home
-
-from Products.MMMShop.ShopManager import ShopManager as MMMShopManager
-from Products.MMMShop import ShopPermissions
-from Products.MMMShop.MMMShopGlobals import order_meta_types
-
-class ShopManager(MMMShopManager):
-
-    """
-        A ShopManager tool
-    """
-
-    id = 'portal_shop_manager'
-    meta_type='ERP5 Shop Manager'
-    security = ClassSecurityInfo()
-
-    security.declarePublic('getMemberOrders')
-    def getMemberOrders(self):
-        """
-        Returns a list containing all the logged-in members orders
-        """
-        orders = []
-        cart = self.getMemberCart()
-        if cart:
-            orders = cart.objectValues(order_meta_types)
-            orders += cart.aq_parent.objectValues(order_meta_types)
-        return orders
-
-InitializeClass(ShopManager)
diff --git a/product/ERP5Shop/__init__.py b/product/ERP5Shop/__init__.py
deleted file mode 100755
index 79a430b73e..0000000000
--- a/product/ERP5Shop/__init__.py
+++ /dev/null
@@ -1,55 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-"""
-    ERP5Shop Free ERP + eCommerce
-"""
-
-# Update ERP5 Globals
-from Products.ERP5Type.Utils import initializeProduct, updateGlobals
-import sys, Permissions
-this_module = sys.modules[ __name__ ]
-document_classes = updateGlobals( this_module, globals(), permissions_module = Permissions)
-
-# Define object classes and tools
-import ShopManager
-object_classes = ()
-portal_tools = ( ShopManager.ShopManager,
-                )
-content_classes = ()
-content_constructors = ()
-
-# Finish installation
-def initialize( context ):
-  import Document
-  initializeProduct(context, this_module, globals(),
-                         document_module = Document,
-                         document_classes = document_classes,
-                         object_classes = object_classes,
-                         portal_tools = portal_tools,
-                         content_constructors = content_constructors,
-                         content_classes = content_classes)
diff --git a/product/ERP5Shop/help/.cvsignore b/product/ERP5Shop/help/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5Shop/help/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5Shop/refresh.txt b/product/ERP5Shop/refresh.txt
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/ERP5Shop/skins/.cvsignore b/product/ERP5Shop/skins/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5Shop/skins/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5Shop/skins/erp5_shop/.cvsignore b/product/ERP5Shop/skins/erp5_shop/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/ERP5Shop/skins/erp5_shop/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/ERP5Shop/tool.png b/product/ERP5Shop/tool.png
deleted file mode 100755
index ab2c1f5a76622765a48e8f9cc516398b9a3a4213..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 286
zcmeAS@N?&q;$mQ6;PUiv2?EjrAk4xHB;VeB1QIX^@CkAK|Nnnj+RjzGKYD~rjLSPX
zXYE_xxFwhG|H`aARnc|R(z$5YiLcInb%r)6K$WdC?rq=6IvuE&u_VYZn8D%MjWi%f
zti&~<Bsf2<q&%@Gl_5Pd&8Q$RUBO7tM9*k(oI4*(g>!yxZfaf$gKuI=szP~YNrr;E
zr*A-As_ayt3YK(Fw{#%QRTKF(7)X11x;TbZ%t=mgVEn@r(6)(rieT6W*+UoJ$8aUq
z*kv;;i{y8nx<a<$!kf5&#!0LKb(!Kbo|X0NVKA(%^knck&(3i+g=e#r5;Mb<ZG2|?
TS&viz4Q23j^>bP0l+XkKkPl_d

diff --git a/product/MMMShop/.cvsignore b/product/MMMShop/.cvsignore
deleted file mode 100755
index 0d20b6487c..0000000000
--- a/product/MMMShop/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
diff --git a/product/MMMShop/CREDITS.txt b/product/MMMShop/CREDITS.txt
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/MMMShop/ComputerProduct.py b/product/MMMShop/ComputerProduct.py
deleted file mode 100755
index 972bae2692..0000000000
--- a/product/MMMShop/ComputerProduct.py
+++ /dev/null
@@ -1,340 +0,0 @@
-##############################################################################
-#    Copyright (C) 2001  MMmanager.org
-#
-#    This program is free software; you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-##############################################################################
-"""
-"""
-
-ADD_CONTENT_PERMISSION = 'Add portal content'
-
-import Globals
-import zLOG
-from Products.CMFCore import CMFCorePermissions
-from Products.CMFCore.CMFCorePermissions import View
-from Products.CMFCore.CMFCorePermissions import ManageProperties
-from AccessControl import ClassSecurityInfo
-from Products.CMFCore.PortalContent import PortalContent
-from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl
-from DateTime.DateTime import DateTime
-from Products.MMMShop.ShopProduct import ShopProduct
-from ZODB.PersistentMapping import PersistentMapping
-from Products.Base18.Document import Document18
-
-factory_type_information = {
-        'id': 'Computer Product',
-        'meta_type': 'Storever Computer Product',
-        'description': 'Use products to create an online shopping catalog',
-        'product': 'StoreverShop',
-        'icon': 'file_icon.gif',
-        'factory': 'addComputerProduct',
-        'filter_content_types': 0,
-        'immediate_view': 'computerproduct_edit_form',
-        'actions':
-                ({'name': 'View',
-                'id': 'view',
-                'action': 'computerproduct_view',
-                'permissions': ('View',),
-                'category': 'object'},
-               {'name': 'Edit',
-                'id': 'edit',
-                'action': 'computerproduct_edit_form',
-                'permissions': ('Modify portal content',),
-                'category': 'object'})
-        }
-
-
-def SecondSort(a,b):
-    if a[1] > b[1]:
-        return 1
-    if a[1] < b[1]:
-        return -1
-    return 0
-
-    
-class ComputerProduct( ShopProduct, Document18 ):
-    """
-        A Link
-    """
-
-    meta_type='Storever Computer Product'
-    portal_type='Computer Product'
-    effective_date = expiration_date = None
-    _isDiscussable = 1
-
-    price = 0.0
-    thumbnail = ''
-    image = ''
-    isCredit = 0
-    credits = 0
-    delivery_days = 0
-    disk_price = {}
-    memory_price = {}
-    option_price = {}  
-    processor_price = {}
-    default_variant = (80,1,128,1,(),'default partition','default task')
-    text = ''
-
-    security = ClassSecurityInfo()
-
-    def __init__( self
-                , id
-                , title=''
-                , description=''
-                ):
-        DefaultDublinCoreImpl.__init__(self)
-        self.id=id
-        self.title=title
-        self.description=description
-        self.delivery_days=0
-        self.processor_price = PersistentMapping()
-        self.disk_price = PersistentMapping()
-        self.memory_price = PersistentMapping()
-        self.option_price = PersistentMapping()
-        self.text = ''
-        
-            
-    def SearchableText(self):
-        """
-            text for indexing
-        """
-        return "%s %s" % (self.title, self.description)
-
-    security.declareProtected(ManageProperties, 'editProduct')
-    def editProduct(self, 
-                    title=None, 
-                    description=None, 
-                    price=None, 
-                    isCredit=None, 
-                    credits=None, 
-                    category=None, 
-                    delivery_days=None,
-		    product_path=None,
-                    text=None):
-        if title is not None:
-            self.setTitle(title)
-        if description is not None:
-            self.setDescription(description)
-        if price is not None:
-            self.price = price
-        if isCredit is not None:
-            if isCredit == '1':
-                self.isCredit = 1
-            else:
-                self.isCredit = 0
-
-        if product_path is not None:
-	    self.product_path = product_path
-        if credits is not None:
-            self.credits = int(credits)
-
-        if category is not None:
-            self.setSubject(category)
-
-        if delivery_days is not None:
-            self.delivery_days = int(delivery_days)
-
-        if text is not None:
-            self.text = text
-
-        self.reindexObject()
-
-    security.declareProtected(ManageProperties, 'setProcessorPrice')
-    def setProcessorPrice(self, size, price):
-        self.processor_price[size] = price
-    
-    security.declareProtected(ManageProperties, 'setDiskPrice')
-    def setDiskPrice(self, size, price):
-        self.disk_price[size] = price
-    
-    security.declareProtected(ManageProperties, 'setMemoryPrice')
-    def setMemoryPrice(self, size, price):
-        self.memory_price[size] = price
-
-    security.declareProtected(ManageProperties, 'setOptionPrice')
-    def setOptionPrice(self, option, price):
-        self.option_price[option] = price
-        
-    security.declareProtected(View, 'getProcessorSizes')
-    def getProcessorSizes(self):
-        if not hasattr(self,'processor_price'):
-            self.processor_price = PersistentMapping()
-        return self.processor_price.keys()
-    
-    security.declareProtected(View, 'getDiskSizes')
-    def getDiskSizes(self):
-        if not hasattr(self,'disk_price'):
-            self.disk_price = PersistentMapping()
-        return self.disk_price.keys()
-    
-    security.declareProtected(View, 'getMemorySizes')
-    def getMemorySizes(self):
-        if not hasattr(self,'option_price'):
-            self.memory_price = PersistentMapping()
-        memory_price = self.memory_price
-        return memory_price.keys()
-
-    security.declareProtected(View, 'getOptions')
-    def getOptions(self,pattern=''):
-        if not hasattr(self,'option_price'):
-            self.option_price = PersistentMapping()
-        return filter(lambda s,p=pattern: s.find(p) >= 0, self.option_price.keys())
-
-    security.declareProtected(View, 'getProcessorValues')
-    def getProcessorValues(self):
-        """
-            Return a sequence of tuples (option,price)
-        """
-        diskvalues = map(lambda i,product=self: (i, product.getProcessorPrice(i)), self.getProcessorSizes())
-        diskvalues.sort(SecondSort)                     
-        return diskvalues
-
-    security.declareProtected(View, 'getMemoryValues')
-    def getMemoryValues(self):
-        """
-            Return a sequence of tuples (option,price)
-        """
-        diskvalues = map(lambda i,product=self: (i, product.getMemoryPrice(i)), self.getMemorySizes())
-        diskvalues.sort(SecondSort)                     
-        return diskvalues
-
-    security.declareProtected(View, 'getDiskValues')
-    def getDiskValues(self):
-        """
-            Return a sequence of tuples (option,price)
-        """
-        diskvalues = map(lambda i,product=self: (i, product.getDiskPrice(i)), self.getDiskSizes())
-        diskvalues.sort(SecondSort)                     
-        return diskvalues
-
-    security.declareProtected(View, 'getOptionValues')
-    def getOptionValues(self,pattern=''):
-        """
-            Return a sequence of tuples (option,price)
-        """
-        diskvalues = map(lambda i,product=self: (i, product.getOptionPrice(i)), self.getOptions(pattern))
-        diskvalues.sort(SecondSort)                     
-        return diskvalues        
-    
-    security.declareProtected(View, 'getProcessorPrice')
-    def getProcessorPrice(self,size):
-        return self.processor_price[size]
-    
-    security.declareProtected(View, 'getDiskPrice')
-    def getDiskPrice(self,size):
-        return self.disk_price[size]
-    
-    security.declareProtected(View, 'getMemoryPrice')
-    def getMemoryPrice(self,size):
-        return self.memory_price[size]
-
-    security.declareProtected(View, 'getOptionPrice')
-    def getOptionPrice(self,size):
-        if self.option_price.has_key(size):
-          return self.option_price[size]
-        else:
-	  return 0
-
-    security.declareProtected(ManageProperties, 'deleteProcessorPrice')
-    def deleteProcessorPrice(self,size):
-        del self.processor_price[size]
-    
-    security.declareProtected(ManageProperties, 'deleteDiskPrice')
-    def deleteDiskPrice(self,size):
-        del self.disk_price[size]
-    
-    security.declareProtected(ManageProperties, 'deleteMemoryPrice')
-    def deleteMemoryPrice(self,size):
-        del self.memory_price[size]
-
-    security.declareProtected(ManageProperties, 'deleteOptionPrice')
-    def deleteOptionPrice(self,size):
-        del self.option_price[size]    
-    
-        
-    def editThumbnail(self, thumbnail=None):
-        if thumbnail is not None:
-            self.thumbnail = thumbnail
-
-    def editImage(self, image=None):
-        if image is not None:
-            self.image = image
-
-    security.declareProtected(View, 'computePrice')
-    def computePrice(self, variant):
-        """
-            variant is defined as:
-                (color,processor,memory,disk,options,setup,config_url,
-                root,boot,usr,home,var,tmp,swap,free)
-        """
-        processor_type = variant[1]
-        memory_type = variant[2]
-        disk_type = variant[3]
-        base_price = self.price
-	if self.processor_price.has_key(processor_type):
-	  base_price += self.processor_price[processor_type]
-	else:
-	  processor_type = self.processor_price.keys()[0]
-	  base_price += self.processor_price[processor_type]
-	  variant[1] = processor_type
-	if self.disk_price.has_key(disk_type):
-	  base_price += self.disk_price[disk_type]
-	else:
-	  disk_type = self.disk_price.keys()[0]
-	  base_price += self.disk_price[disk_type]
-	  variant[3] = disk_type
-	if self.memory_price.has_key(memory_type):
-	  base_price += self.memory_price[memory_type]
-	else:
-	  memory_type = self.memory_price.keys()[0]
-	  base_price += self.memory_price[memory_type]
-	  variant[2] = memory_type
-        setup = variant[5]
-        if setup != '':
-            base_price = base_price + self.getOptionPrice(setup)
-        options_price = 0
-        for option in variant[4]:
-            if option != '':
-                options_price = options_price + self.getOptionPrice(option)
-        return (base_price + options_price)
-
-    security.declareProtected(View, 'renderVariant')
-    def renderVariant(self, variant, REQUEST=None):
-        option_text = ''
-        for option in variant[4]:
-            if option != '': 
-                option_text = option_text + "<li>%s</li>" % option
-        return "<p>Hardware:</p>" \
-               "<ul><li>Color: %s</li><li>Processor: %s</li><li>Memory: %s</li><li>Disk: %s</li></ul>" \
-               "<p>Options:</p>" \
-               "<ul><li>Setup: %s</li>%s</ul>" \
-               "<p>Configuration URL: %s</p>" \
-               "<p>Partition:</p>" \
-               "<ul><li>/root: %s</li><li>/boot: %s</li><li>/usr: %s</li><li>/home: %s</li><li>/var: %s</li><li>/tmp: %s</li><li>/swap: %s</li><li>/free: %s</li></ul>" \
-               % (variant[0],variant[1],variant[2],variant[3],variant[5],option_text, \
-                  variant[6],variant[7],variant[8],variant[9],variant[10],
-                  variant[11],variant[12],variant[13],variant[14])
-
-    security.declareProtected(View, 'shortVariant')
-    def shortVariant(self, variant, REQUEST=None):
-        return "%s/%s/%s/%s/%s" % (variant[0],variant[1],variant[2],variant[3],variant[5])
-    
-    
-def addComputerProduct(self, id, title='', REQUEST=None):
-        ob=ComputerProduct(id,title)
-        self._setObject(id, ob)
-
-Globals.InitializeClass(ComputerProduct)
\ No newline at end of file
diff --git a/product/MMMShop/Extensions/CMMac.py b/product/MMMShop/Extensions/CMMac.py
deleted file mode 100755
index d48f6161b3..0000000000
--- a/product/MMMShop/Extensions/CMMac.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import cmmac
-
-def CMLang(langue):
-    if langue == 'fr':
-        langue = 'francais'
-    elif langue == 'en':
-        langue = 'anglais'
-    return langue
-
-def CreerFormulaireCM(url_banque = "https://ssl.paiement.cic-banques.fr",
-                        version = "1.2",
-                        TPE = "/var/www/payment/storever.key",
-                        montant = "1EUR",
-                        reference = "STVR1",
-                        texte_libre = "Toto",
-                        url_retour = "http://www.storever.com",
-                        url_retour_ok = "https://secure.storever.com/payment/accept",
-                        url_retour_err = "https://secure.storever.com/payment/reject",
-                        langue = "fr",
-                        code_societe = "storever",
-                        texte_bouton = "Paiement par carte bancaire"):
-    # Create Bing String
-    formulaire = '1234567890' * 500
-    langue = CMLang(langue)
-    formulaire = cmmac.CreerFormulaireCM2(url_banque, version, TPE, str(montant)+'EUR', str(reference), texte_libre, url_retour, url_retour_ok, url_retour_err, langue, str(code_societe), texte_bouton, formulaire)
-    return formulaire
-
-def CalculMAC(version="",
-              TPE="",
-              cdate="",
-              montant="",
-              reference="",
-              texte_libre="",
-              langue="",
-              code_societe=""):
-    # Adapt Parameters
-    langue = CMLang(langue)
-    return cmmac.CalculMAC(version,TPE,cdate,montant,reference,texte_libre,langue,code_societe)
-
-def TestMAC(code_MAC="",
-            version="",
-            TPE="",
-            cdate="",
-            montant="",
-            reference="",
-            texte_libre="",
-            code_retour="Code Retour Par Défaut"):
-    return cmmac.TestMAC(code_MAC,version,TPE,cdate,montant,reference,texte_libre,code_retour)
-
-def CreerReponseCM(phrase=""):
-    # Create Bing String
-    reponse = '1234567890' * 500
-    return cmmac.CreerReponseCM2(phrase,reponse)
diff --git a/product/MMMShop/GPL.txt b/product/MMMShop/GPL.txt
deleted file mode 100755
index dcfa4c235e..0000000000
--- a/product/MMMShop/GPL.txt
+++ /dev/null
@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/product/MMMShop/INSTALL.txt b/product/MMMShop/INSTALL.txt
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/MMMShop/README.txt b/product/MMMShop/README.txt
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/MMMShop/ServiceProduct.py b/product/MMMShop/ServiceProduct.py
deleted file mode 100755
index 692afe52fd..0000000000
--- a/product/MMMShop/ServiceProduct.py
+++ /dev/null
@@ -1,75 +0,0 @@
-##############################################################################
-#    Copyright (C) 2001  MMmanager.org
-#
-#    This program is free software; you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-##############################################################################
-"""
-"""
-
-ADD_CONTENT_PERMISSION = 'Add portal content'
-
-import Globals
-import zLOG
-from Products.CMFCore import CMFCorePermissions
-from Products.CMFCore.CMFCorePermissions import View
-from Products.CMFCore.CMFCorePermissions import ManageProperties
-from AccessControl import ClassSecurityInfo
-from Products.CMFCore.PortalContent import PortalContent
-from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl
-from DateTime.DateTime import DateTime
-from Products.StoreverShop.ComputerProduct import ComputerProduct
-from ZODB.PersistentMapping import PersistentMapping
-from Products.Base18.Document import Document18
-
-factory_type_information = {
-        'id': 'Service Product',
-        'meta_type': 'Storever Service Product',
-        'description': 'Use products to create an online shopping catalog',
-        'product': 'StoreverShop',
-        'icon': 'file_icon.gif',
-        'factory': 'addServiceProduct',
-        'filter_content_types': 0,
-        'immediate_view': 'serviceproduct_edit_form',
-        'actions':
-                ({'name': 'View',
-                'id': 'view',
-                'action': 'serviceproduct_view',
-                'permissions': ('View',),
-                'category': 'object'},
-               {'name': 'Edit',
-                'id': 'edit',
-                'action': 'serviceproduct_edit_form',
-                'permissions': ('Modify portal content',),
-                'category': 'object'})
-        }
-
-
-class ServiceProduct( ComputerProduct ):
-    """
-        A Link
-    """
-    meta_type='MMM Service Product'
-    portal_type='Object'
-    effective_date = expiration_date = None
-    _isDiscussable = 1
-    
-    security = ClassSecurityInfo()    
-    
-def addServiceProduct(self, id, title='', REQUEST=None):
-        ob=ComputerProduct(id,title)
-        self._setObject(id, ob)
-
-Globals.InitializeClass(ServiceProduct)
diff --git a/product/MMMShop/SimpleProduct.py b/product/MMMShop/SimpleProduct.py
deleted file mode 100755
index d038b86810..0000000000
--- a/product/MMMShop/SimpleProduct.py
+++ /dev/null
@@ -1,223 +0,0 @@
-##############################################################################
-#    Copyright (C) 2001  MMmanager.org
-#
-#    This program is free software; you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-##############################################################################
-"""
-"""
-
-ADD_CONTENT_PERMISSION = 'Add portal content'
-
-import Globals, string
-import zLOG
-from Products.CMFCore import CMFCorePermissions
-from Products.CMFCore.CMFCorePermissions import View
-from Products.CMFCore.CMFCorePermissions import ManageProperties
-from AccessControl import ClassSecurityInfo
-from Products.CMFCore.PortalContent import PortalContent
-from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl
-from DateTime.DateTime import DateTime
-from Products.MMMShop.ShopProduct import ShopProduct
-from ZODB.PersistentMapping import PersistentMapping
-from Products.Base18.Document import Document18
-
-factory_type_information = {
-        'id': 'Simple Product',
-        'meta_type': 'Storever Simple Product',
-        'description': 'Use simple products to create products with variations',
-        'product': 'StoreverShop',
-        'icon': 'file_icon.gif',
-        'factory': 'addSimpleProduct',
-        'filter_content_types': 0,
-        'immediate_view': 'simpleproduct_edit_form',
-        'actions':
-                ({'name': 'View',
-                'id': 'view',
-                'action': 'simpleproduct_view',
-                'permissions': ('View',),
-                'category': 'object'},
-               {'name': 'Edit',
-                'id': 'edit',
-                'action': 'simpleproduct_edit_form',
-                'permissions': ('Modify portal content',),
-                'category': 'object'})
-        }
-
-
-def SecondSort(a,b):
-    if a[1] > b[1]:
-        return 1
-    if a[1] < b[1]:
-        return -1
-    return 0
-
-
-class SimpleProduct( ShopProduct, Document18 ):
-    """
-        A Product with variations
-    """
-
-    meta_type='Storever Simple Product'
-    portal_type='Simple Product'
-    effective_date = expiration_date = None
-    _isDiscussable = 1
-
-    price = 0.0
-    thumbnail = ''
-    image = ''
-    isCredit = 0
-    credits = 0
-    delivery_days = 0
-    default_variant = ()
-    text = ''
-
-    security = ClassSecurityInfo()
-
-    def __init__( self
-                , id
-                , title=''
-                , description=''
-                ):
-        DefaultDublinCoreImpl.__init__(self)
-        self.id=id
-        self.title=title
-        self.description=description
-        self.delivery_days=0
-        self.processor_price = PersistentMapping()
-        self.disk_price = PersistentMapping()
-        self.memory_price = PersistentMapping()
-        self.option_price = PersistentMapping()
-        self.text = ''
-
-
-    def SearchableText(self):
-        """
-            text for indexing
-        """
-        return "%s %s" % (self.title, self.description)
-
-    security.declareProtected(ManageProperties, 'editProduct')
-    def editProduct(self,
-                    title=None,
-                    description=None,
-                    price=None,
-                    isCredit=None,
-                    credits=None,
-                    category=None,
-                    delivery_days=None,
-		    product_path=None,
-                    text=None):
-        if title is not None:
-            self.setTitle(title)
-        if description is not None:
-            self.setDescription(description)
-        if price is not None:
-            self.price = price
-        if isCredit is not None:
-            if isCredit == '1':
-                self.isCredit = 1
-            else:
-                self.isCredit = 0
-
-        if product_path is not None:
-	    self.product_path = product_path
-        if credits is not None:
-            self.credits = int(credits)
-
-        if category is not None:
-            self.setSubject(category)
-
-        if delivery_days is not None:
-            self.delivery_days = int(delivery_days)
-
-        if text is not None:
-            self.text = text
-
-        self.reindexObject()
-
-    security.declareProtected(ManageProperties, 'setOptionPrice')
-    def setOptionPrice(self, option, price):
-        self.option_price[option] = price
-
-    security.declareProtected(View, 'getOptions')
-    def getOptions(self,pattern=''):
-        if not hasattr(self,'option_price'):
-            self.option_price = PersistentMapping()
-        return filter(lambda s,p=pattern: s.find(p) >= 0, self.option_price.keys())
-
-    security.declareProtected(View, 'getOptionValues')
-    def getOptionValues(self,pattern=''):
-        """
-            Return a sequence of tuples (option,price)
-        """
-        diskvalues = map(lambda i,product=self: (i, product.getOptionPrice(i)), self.getOptions(pattern))
-        diskvalues.sort(SecondSort)
-        return diskvalues
-
-    security.declareProtected(View, 'getOptionPrice')
-    def getOptionPrice(self,size):
-        if self.option_price.has_key(size):
-          return self.option_price[size]
-        else:
-	  return 0
-
-    security.declareProtected(ManageProperties, 'deleteOptionPrice')
-    def deleteOptionPrice(self,size):
-        del self.option_price[size]
-
-    def editThumbnail(self, thumbnail=None):
-        if thumbnail is not None:
-            self.thumbnail = thumbnail
-
-    def editImage(self, image=None):
-        if image is not None:
-            self.image = image
-
-    security.declareProtected(View, 'computePrice')
-    def computePrice(self, variant):
-        """
-            variant is defined as:
-                (color,processor,memory,disk,options,setup,config_url,
-                root,boot,usr,home,var,tmp,swap,free)
-        """
-        base_price = self.price
-        options_price = 0.0
-        for option in variant[4]:
-            if option != '':
-                options_price = options_price + self.getOptionPrice(option)
-        return (base_price + options_price)
-
-    security.declareProtected(View, 'renderVariant')
-    def renderVariant(self, variant, REQUEST=None):
-        option_text = ''
-        for option in variant[4]:
-            if option != '':
-                option_text = option_text + "<li>%s</li>" % option
-        return "<p>Options:</p><ul>%s</ul>" % option_text
-
-    security.declareProtected(View, 'shortVariant')
-    def shortVariant(self, variant, REQUEST=None):
-        option_text = ''
-        for option in variant[4]:
-            if option != '':
-                option_text = option_text + "%s/" % option
-        return '<font size="-2"><i>%s</i></font>' % option_text
-
-def addSimpleProduct(self, id, title='', REQUEST=None):
-        ob=SimpleProduct(id,title)
-        self._setObject(id, ob)
-
-Globals.InitializeClass(SimpleProduct)
diff --git a/product/MMMShop/ZPL.txt b/product/MMMShop/ZPL.txt
deleted file mode 100755
index 44e0648b31..0000000000
--- a/product/MMMShop/ZPL.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-Zope Public License (ZPL) Version 2.0
------------------------------------------------
-
-This software is Copyright (c) Zope Corporation (tm) and
-Contributors. All rights reserved.
-
-This license has been certified as open source. It has also
-been designated as GPL compatible by the Free Software
-Foundation (FSF).
-
-Redistribution and use in source and binary forms, with or
-without modification, are permitted provided that the
-following conditions are met:
-
-1. Redistributions in source code must retain the above
-   copyright notice, this list of conditions, and the following
-   disclaimer.
-
-2. Redistributions in binary form must reproduce the above
-   copyright notice, this list of conditions, and the following
-   disclaimer in the documentation and/or other materials
-   provided with the distribution.
-
-3. The name Zope Corporation (tm) must not be used to
-   endorse or promote products derived from this software
-   without prior written permission from Zope Corporation.
-
-4. The right to distribute this software or to use it for
-   any purpose does not give you the right to use Servicemarks
-   (sm) or Trademarks (tm) of Zope Corporation. Use of them is
-   covered in a separate agreement (see
-   http://www.zope.com/Marks).
-
-5. If any files are modified, you must cause the modified
-   files to carry prominent notices stating that you changed
-   the files and the date of any change.
-
-Disclaimer
-
-  THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS''
-  AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
-  NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-  AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
-  NO EVENT SHALL ZOPE CORPORATION OR ITS CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-  DAMAGE.
-
-
-This software consists of contributions made by Zope
-Corporation and many individuals on behalf of Zope
-Corporation.  Specific attributions are listed in the
-accompanying credits file.
diff --git a/product/MMMShop/__init__.py b/product/MMMShop/__init__.py
deleted file mode 100755
index 6ee609a0ee..0000000000
--- a/product/MMMShop/__init__.py
+++ /dev/null
@@ -1,90 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Jean-Paul Smets
-# Copyright (c) 2002 Nexedi SARL
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version, with the special
-# provision that the authors explicitly grant hereby the right to link this
-# program with any versions of the Qt library including non GPL versions
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-"""
-"""
-
-ADD_FOLDERS_PERMISSION = 'Add portal folders'
-
-import ComputerProduct
-import ServiceProduct
-import SimpleProduct
-from Products.CMFCore import utils
-from Products.CMFCore.DirectoryView import registerDirectory
-import Products.MMMShop
-
-# Aliases for previous mixed up version
-__module_aliases__ = ( ( 'Products.MMMShop.ComputerProduct', ComputerProduct )
-                     , ( 'Products.MMMShop.ServiceProduct', ServiceProduct )
-                     )
-
-#   ...and make sure we can find them in PTKBase when we do
-#   'manage_migrate_content()'.
-Products.MMMShop.ComputerProduct = ComputerProduct
-Products.MMMShop.ServiceProduct = ServiceProduct
-
-contentClasses = (
-                 ComputerProduct.ComputerProduct
-               , SimpleProduct.SimpleProduct
-               , ServiceProduct.ServiceProduct
-		)
-
-contentConstructors = (
-                          ComputerProduct.addComputerProduct
-                        , SimpleProduct.addSimpleProduct
-                        , ServiceProduct.addServiceProduct
-			)
-
-bases = contentClasses
-
-boring_globals = globals()
-
-import sys
-this_module = sys.modules[ __name__ ]
-
-z_bases = utils.initializeBasesPhase1( bases, this_module )
-
-#Make the skins availiable as DirectoryViews
-registerDirectory('skins/storever', globals())
-registerDirectory('skins/zpt_storever', globals())
-registerDirectory('skins/cm_storever', globals())
-
-def initialize( context ):
-
-    utils.initializeBasesPhase2( z_bases, context )
-
-    utils.ContentInit( 'Storever Shop Content'
-                     , content_types=contentClasses
-                     , permission=ADD_FOLDERS_PERMISSION
-                     , extra_constructors=contentConstructors
-                     , fti = (
-                          ComputerProduct.factory_type_information
-                        , ServiceProduct.factory_type_information 
-                        , SimpleProduct.factory_type_information )
-                     ).initialize( context )
diff --git a/product/MMMShop/refresh.txt b/product/MMMShop/refresh.txt
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/MMMShop/skins/cm_storever/payme.dtml b/product/MMMShop/skins/cm_storever/payme.dtml
deleted file mode 100755
index 08f6cbf06a..0000000000
--- a/product/MMMShop/skins/cm_storever/payme.dtml
+++ /dev/null
@@ -1,36 +0,0 @@
-<dtml-var standard_html_header>
-
-<div class="Desktop">
-
-<p><dtml-gettext>This form allows to pay online a custom service
-or order which price has been defined specifically.</dtml-gettext></p>
-
-<h1><dtml-gettext>Order Summary</dtml-gettext></h1>
-
-<p><dtml-gettext><b>Invoice number</b>: </dtml-gettext><dtml-var invoice_number></p>
-<p><dtml-gettext><b>Grand total</b>: </dtml-gettext><dtml-var montant> EUR.</p>
-
-<p><dtml-gettext>Please refer to the invoice you received</dtml-gettext></p>
-
-<h3><dtml-gettext>Online Payment</dtml-gettext></h3>
-
-<p><dtml-gettext>With our secure online payment system operated by CIC, you can simply use you credit card to pay</dtml-gettext> <dtml-if payvat><dtml-var montantvat><dtml-else><dtml-var montant></dtml-if> EUR
-<dtml-gettext> online with the same or better level of security as in the real world.</dtml-gettext></p>
-
-
-<center>
-<dtml-let code_societe="'nexedi'"
-          texte_bouton="gettext('Secure Online Payment')"
-          langue="gettext.get_selected_language()"
-          TPE="'/etc/cmmac/6496547.key'"
-          url_banque="'https://ssl.paiement.cic-banques.fr/paiement.cgi'"
-          texte_libre="invoice_number" 
-          reference="invoice_number"
-          url_retour_err="'payme_rejected'"
-          url_retour_ok="'payme_accepted'">
-
-<dtml-var "payment.CreerFormulaireCM(url_retour_err=url_retour_err,url_retour_ok=url_retour_ok,texte_libre=texte_libre,reference=reference,code_societe=code_societe,texte_bouton=texte_bouton, langue=langue, TPE=TPE, url_banque=url_banque,montant=montant)">
-
-</dtml-let>
-
-<dtml-var standard_html_footer>
\ No newline at end of file
diff --git a/product/MMMShop/skins/cm_storever/payme_accepted.dtml b/product/MMMShop/skins/cm_storever/payme_accepted.dtml
deleted file mode 100755
index 25d6bc5025..0000000000
--- a/product/MMMShop/skins/cm_storever/payme_accepted.dtml
+++ /dev/null
@@ -1,9 +0,0 @@
-<dtml-var standard_html_header>
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Your payment has been accepted. Thank you.</dtml-gettext></h1>
-
-</div>
-
-<dtml-var standard_html_footer>
\ No newline at end of file
diff --git a/product/MMMShop/skins/cm_storever/payme_rejected.dtml b/product/MMMShop/skins/cm_storever/payme_rejected.dtml
deleted file mode 100755
index b69b834cb3..0000000000
--- a/product/MMMShop/skins/cm_storever/payme_rejected.dtml
+++ /dev/null
@@ -1,9 +0,0 @@
-<dtml-var standard_html_header>
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Sorry, your payment has been rejected.</dtml-gettext></h1>
-
-</div>
-
-<dtml-var standard_html_footer>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/MdkRandom.py b/product/MMMShop/skins/storever/MdkRandom.py
deleted file mode 100755
index 70d429184d..0000000000
--- a/product/MMMShop/skins/storever/MdkRandom.py
+++ /dev/null
@@ -1,20 +0,0 @@
-##parameters=setup_list
-
-# Example code:
-
-# Import a standard function, and get the HTML request and response objects.
-from random import randrange
-
-random_list0 = []
-random_list1 = []
-
-for (key, value) in setup_list:
- if value == 0.0:
-   if randrange(0,2) == 0:
-     random_list0 = random_list0 + [(key , value)]
-   else:
-     random_list0 = [(key , value)] + random_list0
- else:
-     random_list1 =  random_list1 + [(key , value)]
-
-return random_list0 + random_list1
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/addToCart.py b/product/MMMShop/skins/storever/addToCart.py
deleted file mode 100755
index df36a49c1c..0000000000
--- a/product/MMMShop/skins/storever/addToCart.py
+++ /dev/null
@@ -1,23 +0,0 @@
-## Script (Python) "addToCart"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=REQUEST=None,variant=None
-##title=Add a product to the shopping cart
-##
-if REQUEST['quantity'] > 0:
-   shopping_cart = context.getShoppingCart()
-   prod_obj = context.restrictedTraverse(REQUEST['product_path'])
-   del_days = prod_obj.delivery_days
-   shopping_cart.addProductToCart(product=REQUEST['product_path']
-    , quantity=REQUEST['quantity']
-    , delivery_days=del_days
-    , variant=variant)
-   status_msg = 'Cart+updated'
-else:
-   status_msg = 'Please+enter+a+quantity'
-
-
-context.REQUEST.RESPONSE.redirect('shoppingcart_view' + '?portal_status_message=' + status_msg)
diff --git a/product/MMMShop/skins/storever/checkOut.dtml b/product/MMMShop/skins/storever/checkOut.dtml
deleted file mode 100755
index 064df0cda9..0000000000
--- a/product/MMMShop/skins/storever/checkOut.dtml
+++ /dev/null
@@ -1,106 +0,0 @@
-<dtml-let lang="gettext.get_selected_language()">
-<dtml-let man_obj="getShopManager()">
- <dtml-if "man_obj[0] == 0">
-  <dtml-let portal_status_message="'No shop manager found'">
-   <dtml-return checkOut>
-  </dtml-let>
- <dtml-else>
-  <dtml-call "REQUEST.set('manager_obj', man_obj[1])">
- </dtml-if>
-</dtml-let>
-
-<dtml-call "setCurrencyParams()">
-<dtml-call "setPersonalDetailsParams()">
-<dtml-call "REQUEST.set('cart_obj', getShoppingCart())">
-<dtml-call "REQUEST.set('all_price', getTotalPrice())">
-
-<dtml-in "cart_obj.listProducts()" sort=delivery_days>
- <dtml-if sequence-end>
-  <dtml-let item="_.getitem('sequence-item')"
-     d_days="item.getDeliveryDays()">
-   <dtml-call "REQUEST.set('exp_delivery_days', d_days)">
-  </dtml-let>
- </dtml-if>
-</dtml-in>
-
-<dtml-let delivery_date="ZopeTime() + _.int(REQUEST['exp_delivery_days'])"
-   formatted_delivery_date="delivery_date.strftime('%Y/%m/%d')">
- <dtml-call "REQUEST.set('correct_ddate', formatted_delivery_date)">
-</dtml-let>
-
-<dtml-call "REQUEST.set('loggedin_user', getMemberObj().getUserName())">
-
-<TABLE BORDER="0" width="100%">
-<FORM ACTION="<dtml-var "manager_obj.httpsRoot">/&dtml-lang;/create_order_page" METHOD="POST">
- <TR CLASS="NewsTitle">
-  <TD CLASS="NewsTitle" COLSPAN="2"><dtml-gettext>Check Out</dtml-gettext></TD>
- </TR>
-<INPUT TYPE="hidden" NAME="shopid" VALUE="<dtml-var "manager_obj.shopid">">
-<INPUT TYPE="hidden" NAME="amount" VALUE="<dtml-var all_price fmt="%0.2f">">
-<INPUT TYPE="hidden" NAME="cust_fax" VALUE="&dtml-loggedin_user;">
-<INPUT TYPE="hidden" NAME="currency" VALUE="<dtml-var "REQUEST['cur_code']">">
-<INPUT TYPE="hidden" NAME="sessionid" VALUE="<dtml-var "REQUEST['HTTP_COOKIE']">">
- <TR>
-  <TD COLSPAN="2">
-  <p><dtml-gettext>You are about to submit an order to</dtml-gettext> <dtml-var "gettext(manager_obj.shop_from_name)"> <dtml-gettext>for a total amount of</dtml-gettext> <B><dtml-var expr="all_price + all_price * portal_properties.vat" fmt="%0.2f">&nbsp;&dtml-money_unit;</B> <dtml-gettext>(incl. VAT)</dtml-gettext> /
- &nbsp;<b><dtml-var expr="all_price "
- fmt="%0.2f">&nbsp;&dtml-money_unit;</B> <dtml-gettext>(excl. VAT)</dtml-gettext></p>
-  <p><dtml-gettext>Expected day of delivery:</dtml-gettext> <B>&dtml-correct_ddate;</B></p>
-  <p><dtml-gettext>Before we proceed to payment options, please provide the shipping address for this order:</dtml-gettext></p>
-  <p />
-  </TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Name:</dtml-gettext></TD>
-  <TD><INPUT TYPE="text" NAME="cust_name" VALUE="<dtml-var "REQUEST['cust_name']">"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Organisation:</dtml-gettext></TD>
-  <TD><INPUT TYPE="text" NAME="cust_organisation" VALUE="<dtml-var "REQUEST['cust_organisation']">"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Address:</dtml-gettext></TD>
-  <TD><textarea NAME="cust_address"><dtml-var "REQUEST['cust_address']"></textarea></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Zip code:</dtml-gettext></TD>
-  <TD><INPUT TYPE="text" NAME="cust_zipcode" VALUE="<dtml-var "REQUEST['cust_zipcode']">"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>City:</dtml-gettext></TD>
-  <TD><INPUT TYPE="text" NAME="cust_city" VALUE="<dtml-var "REQUEST['cust_city']">"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Country:</dtml-gettext></TD>
-  <TD><select name="cust_country">
-          <dtml-in "portal_properties.shipping_countries">
-                   <option value="&dtml-sequence-item;" <dtml-if "REQUEST['cust_country'] == _['sequence-item']">selected</dtml-if>><dtml-var "gettext(_['sequence-item'])"></option>
-          </dtml-in>
-      </select>
-      <br><font size="-2"><dtml-gettext>If your country is not listed here, it simply means we are unable to ship to your country at the present time. We deeply apologize for this inconvenience.</dtml-gettext>
-   </TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Phone:</dtml-gettext></TD>
-  <TD><INPUT TYPE="text" NAME="cust_phone" VALUE="<dtml-var "REQUEST['cust_phone']">"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Email:</dtml-gettext></TD>
-  <TD><INPUT TYPE="text" NAME="cust_email" VALUE="<dtml-var "REQUEST['cust_email']">"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>VAT Number:</dtml-gettext></TD>
-  <TD><INPUT TYPE="text" NAME="cust_vat" VALUE="<dtml-var "REQUEST['cust_vat']">">
-        <br><font size="-2"><dtml-gettext>EU Companies outside France will not pay the VAT if they provide a valid EU VAT Number. Customers outside EU (company or not) will not pay the VAT at all.
-</dtml-gettext>
-  </TD>
- </TR>
- <TR>
-  <TD COLSPAN="2" HEIGHT="4">&nbsp;</TD>
- </TR>
- <TR>
-  <TD COLSPAN="2" align="center"><INPUT TYPE="submit" VALUE=" <dtml-gettext>Proceed to payment options</dtml-gettext> "></TD>
- </TR>
-</FORM>
-</TABLE>
-</dtml-let>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/checkoutPage.dtml b/product/MMMShop/skins/storever/checkoutPage.dtml
deleted file mode 100755
index 85083ac78f..0000000000
--- a/product/MMMShop/skins/storever/checkoutPage.dtml
+++ /dev/null
@@ -1,12 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-call "REQUEST.set('currency_manager', getCurrencyManager())">
-<dtml-call "REQUEST.set('member_currency', getMemberObj().pref_currency)">
-
-<TABLE BORDER="0" WIDTH="100%">
- <TR>
-  <TD VALIGN="top" WIDTH="50%"><dtml-var checkOut></TD>
- </TR>
-</TABLE>
-
-<dtml-var standard_html_footer>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/computerproduct_edit_form.dtml b/product/MMMShop/skins/storever/computerproduct_edit_form.dtml
deleted file mode 100755
index 0ced35cf4f..0000000000
--- a/product/MMMShop/skins/storever/computerproduct_edit_form.dtml
+++ /dev/null
@@ -1,206 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-call "REQUEST.set('local_currency_name', getLocalCurrencyName())">
-
-<TABLE BORDER="0" WIDTH="100%" CLASS="FormLayout">
-<FORM ACTION="update_computer_product" METHOD="POST" ENCTYPE="multipart/form-data">
- <TR>
-  <TH VALIGN="top">Navn:</TD>
-  <TD><INPUT TYPE="text" NAME="prod_name" VALUE="&dtml-title;">
-  <DL CLASS="FieldHelp">
-   <DD>The name of the product.</DD>i
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Short Description:</TD>
-  <TD><TEXTAREA NAME="description" ROWS="5" COLS="30">&dtml-description;</TEXTAREA>
-  <DL CLASS="FieldHelp">
-   <DD>The description of the product.</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Long Description:</TD>
-  <TD><textarea name="text:text"
-             rows="20" cols="80"><dtml-var text html_quote></textarea>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Category:</TD>
-  <TD>
-  <SELECT NAME="prod_category:list" SIZE="3" MULTIPLE>
-<dtml-let contentSubject=Subject
-          allowedSubjects="portal_metadata.listAllowedSubjects(this())">
- <dtml-in allowedSubjects>
-  <dtml-let item=sequence-item
-            sel="item in contentSubject and 'selected' or ''">
-   <OPTION VALUE="&dtml-sequence-item;" &dtml-sel;>&dtml-sequence-item;</OPTION>
-  </dtml-let>
- </dtml-in>
-</dtml-let>
-  </SELECT>
-  <DL CLASS="FieldHelp">
-   <DD>You should place your procu in one - or more - category, so visitors on the site can find your product easier.
-       Pick the category that fits your product best.</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Price:</TD>
-  <TD><INPUT TYPE="text" NAME="price:float" VALUE="&dtml-price;">
-  <DL CLASS="FieldHelp">
-   <DD>The price of your product (in <dtml-var "REQUEST['local_currency_name']">).</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Days to deliver:</TD>
-  <TD><INPUT TYPE="text" NAME="delivery_days:int" VALUE="&dtml-delivery_days;">
-  <DL CLASS="FieldHelp">
-   <DD>How many days will it take to deliver your product (as precise as possible).</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Thumbnail picture:</TD>
-  <TD><INPUT TYPE="file" NAME="thumbnail" VALUE=""><BR>
-  &dtml-thumbnail;
-  <DL CLASS="FieldHelp">
-   <DD>A little picturre of the product that can be shown in the product catalog.</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Large picture:</TD>
-  <TD><INPUT TYPE="file" NAME="image" VALUE=""><BR>
-  &dtml-image;
-  <DL CLASS="FieldHelp">
-   <DD>Picture of your product that will be used at the product page.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-   <TH VALIGN="top">Product Path:</TD>
-   <TD><INPUT TYPE="text" NAME="product_path" VALUE="<dtml-if product_path><dtml-var product_path></dtml-if>"><BR>
-     <DL CLASS="FieldHelp">
-      <DD>Product path.</DD>
-     </DL>
-    </TD>
- </TR>
-
-
- <TR>
-  <TH VALIGN="top">Processor:</TD>
-  <TD>
-  <dtml-in "getProcessorSizes()">
-  <INPUT TYPE="text" NAME="procsize_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="procprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getProcessorPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="procsize_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="procprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of processor options.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Memory:</TD>
-  <TD>
-  <dtml-in "getMemorySizes()">
-  <INPUT TYPE="text" NAME="memsize_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="memprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getMemoryPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="memsize_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="memprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of memory options.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Disk:</TD>
-  <TD>
-  <dtml-in "getDiskSizes()">
-  <INPUT TYPE="text" NAME="disksize_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="diskprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getDiskPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="disksize_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="diskprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of disk options.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Options:</TD>
-  <TD>
-  <dtml-in "getOptions()">
-  <INPUT TYPE="text" NAME="option_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="optionprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getOptionPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="option_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="optionprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of service options.</DD>
-  </DL>
-  </TD>
- </TR>
-
-
-
-
-
-
-<!-- test to see if NON option should be checked -->
- <dtml-if "this().isCredit">
-  <dtml-if "this().isCredit == 1">
-   <dtml-call "REQUEST.set('credit_sel', '')">
-  <dtml-else>
-   <dtml-call "REQUEST.set('credit_sel', 'CHECKED')">
-  </dtml-if>
- <dtml-else>
-  <dtml-call "REQUEST.set('credit_sel', 'CHECKED')">
- </dtml-if>
-
-
-
-<TR>
-  <TH VALIGN="top">Is this a credit product?</TD>
-  <TD><INPUT TYPE="radio" NAME="isCredit" VALUE="1"
-  <dtml-if "this().isCredit"><dtml-if "this().isCredit == 1">CHECKED</dtml-if></dtml-if>
-  >Yes&nbsp;
-  <INPUT TYPE="radio" NAME="isCredit" VALUE="0" &dtml-credit_sel;>No
-  <DL CLASS="FieldHelp">
-   <DD>If your product is a credits product, the visitors can buy minutes to be used in pay-per-view cinemas.</DD>
-  </DL>
-  </TD>
- </TR>
-
-
-
-
-<dtml-if "this().isCredit">
- <TR>
-  <TH VALIGN="top">Credits amount:</TD>
-  <TD><INPUT TYPE="text" NAME="credits:int" VALUE="&dtml-credits;">
-  <DL CLASS="FieldHelp">
-   <DD>How many credits the users get.</DD>
-  </DL>
-  </TD>
- </TR>
-<dtml-else>
- <INPUT TYPE="hidden" NAME="credits:int" VALUE="&dtml-credits;">
-</dtml-if>
-
- <TR>
-  <TD COLSPAN="2"><INPUT TYPE="submit" VALUE=" Save "></TD>
- </TR>
-</FORM>
-</TABLE>
-
-<dtml-var standard_html_footer>
diff --git a/product/MMMShop/skins/storever/computerproduct_variant.dtml b/product/MMMShop/skins/storever/computerproduct_variant.dtml
deleted file mode 100755
index 913772b04b..0000000000
--- a/product/MMMShop/skins/storever/computerproduct_variant.dtml
+++ /dev/null
@@ -1,31 +0,0 @@
-<table width="100%"><tr>
- <td valign="top">
-   <p><dtml-gettext>Hardware:</dtml-gettext></p>
-   <ul>
-    <li><dtml-gettext>Color:</dtml-gettext> <dtml-var "variant[0]"></li>
-    <li><dtml-gettext>Processor:</dtml-gettext> <dtml-var "variant[1]"></li>
-    <li><dtml-gettext>Memory:</dtml-gettext> <dtml-var "variant[2]"></li>
-    <li><dtml-gettext>Disk:</dtml-gettext> <dtml-var "variant[3]"></li>
-   </ul>
-   <p><dtml-gettext>Options:</dtml-gettext></p>
-   <ul>
-     <dtml-in "variant[4]">
-     <li><dtml-var "gettext(_['sequence-item'])"></li>
-     </dtml-in>
-   </ul>
- </td>
- <td valign="top">
-   <p><dtml-gettext>Setup:</dtml-gettext> <dtml-var "variant[5]"></p>
-   <p><dtml-gettext>Configuration URL:</dtml-gettext> <dtml-var "variant[6]"></p>
-   <p><dtml-gettext>Partition:</dtml-gettext></p>
-   <ul>
-     <li>/root: <dtml-var "variant[7]"></li>
-     <li>/boot: <dtml-var "variant[8]"></li>
-     <li>/usr: <dtml-var "variant[9]"></li>
-     <li>/home: <dtml-var "variant[10]"></li>
-     <li>/var: <dtml-var "variant[11]"></li>
-     <li>/tmp: <dtml-var "variant[12]"></li>
-     <li>/swap: <dtml-var "variant[13]"></li>
-     <li>/free: <dtml-var "variant[14]"></li></ul>
- </td>
-</tr></table>
diff --git a/product/MMMShop/skins/storever/computerproduct_view.dtml b/product/MMMShop/skins/storever/computerproduct_view.dtml
deleted file mode 100755
index 4ab11e74ed..0000000000
--- a/product/MMMShop/skins/storever/computerproduct_view.dtml
+++ /dev/null
@@ -1,28 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-in "portal_catalog.searchResults(meta_type='MMM Shop Currency Manager')">
-  <dtml-call "REQUEST.set('currency_manager', restrictedTraverse(path))">
-</dtml-in>
-
- <dtml-if "portal_membership.isAnonymousUser()">
-   <dtml-call "REQUEST.set('member_currency', 'EUR')">
- <dtml-else>
-  <dtml-let member="portal_membership.getAuthenticatedMember()">
-   <dtml-call "REQUEST.set('member_currency', member.pref_currency)">
-  </dtml-let>
- </dtml-if>
-
-<div CLASS="Desktop">
-
-<TABLE BORDER="0" WIDTH="100%" cellspacing="3" cellpadding="3">
-<TR>
-  <TD ALIGN="CENTER" VALIGN="top">
-
-    <dtml-var computerproduct_presentation>
- 
-  </TD>
- </TR>
-</TABLE>
-
-</div>
-<dtml-var standard_html_footer>
diff --git a/product/MMMShop/skins/storever/create_order_page.dtml b/product/MMMShop/skins/storever/create_order_page.dtml
deleted file mode 100755
index 78628cc5e5..0000000000
--- a/product/MMMShop/skins/storever/create_order_page.dtml
+++ /dev/null
@@ -1,19 +0,0 @@
-<dtml-let man_obj="getShopManager()">
- <dtml-if "man_obj[0] == 0">
- <dtml-let portal_status_message="'No shop manager found'">
- <dtml-return checkOut>
- </dtml-let>
- <dtml-else>
- <dtml-call "REQUEST.set('manager_obj', man_obj[1])">
- </dtml-if>
-</dtml-let>
- 
-
-<dtml-call "manager_obj.createOrder(REQUEST)">
-
-
-<dtml-let order_obj="portal_membership.getHomeFolder(getMemberObj().getUserName())[orderid]">
-
-<dtml-call "REQUEST.RESPONSE.redirect('%s/order_confirm_form' % order_obj.local_absolute_url())">
-
-</dtml-let>
diff --git a/product/MMMShop/skins/storever/custommer_registration.dtml b/product/MMMShop/skins/storever/custommer_registration.dtml
deleted file mode 100755
index 5881e57424..0000000000
--- a/product/MMMShop/skins/storever/custommer_registration.dtml
+++ /dev/null
@@ -1,173 +0,0 @@
-<dtml-let show_language_selector="0" show_breadcrumb="0">
-<dtml-var standard_html_header>
-
-<h1><dtml-gettext>Custommer Registration</dtml-gettext></h1>
-
-<table>
- <tr>
-  <td valign="top">
-   <h2><dtml-gettext>New Custommers</dtml-gettext></h2>
-
-   <p><dtml-gettext>If you are a new custommer, please provide bellow your
- personal information in order to let us identify you.</dtml-gettext></p>
-
-<form method="POST" action="register_and_addToCart">
-
-<dtml-in "('color',
- 'quantity','product_path','processor','memory','disk','drive','setup',
-'fs','root_partition','boot_partition','usr_partition','home_partition',
-'var_partition','swap_partition','tmp_partition','free_partition', 'config_url',
-'support','monitoring','backup','archive','hosting','keyboard')">
-<input type="hidden" name="&dtml-sequence-item;" value="<dtml-var
- "REQUEST[_['sequence-item']]">">
-</dtml-in>
-
-<dtml-in "getOptionValues('Option')">
-<dtml-if "REQUEST.has_key('option_%s' % _['sequence-number'])">
-<input type="hidden" name="option_&dtml-sequence-number;"
- value="&dtml-sequence-item">
-</dtml-if>
-</dtml-in>
-
-
-<input type="hidden" name="last_visit:date" value="<dtml-var ZopeTime>">
- <input type="hidden" name="prev_visit:date" value="<dtml-var ZopeTime>">
- 
-<table class="FormLayout">
- <tr valign="top">
- <th> <dtml-gettext>Login Name</dtml-gettext>
- </th>
- <td>
- <input type="text"
- name="username" size="30"
- value="<dtml-if username><dtml-var username></dtml-if>">
- </td>
- </tr>
- <tr>
- <th> <dtml-gettext>Email Address</dtml-gettext>
- </th>
- <td align="left" valign="top">
- <input type="text" name="email" size="30"
- value="<dtml-if email><dtml-var email></dtml-if>">
- </td>
- </tr>
-
-<dtml-unless expr="portal_properties.validate_email">
- <tr>
- <th> <dtml-gettext>Password</dtml-gettext>
- </th>
- <td align="left" valign="top">
- <input type="password" name="password" size="30">
- </td>
- </tr>
- <tr>
- <th> <dtml-gettext>Password (confirm)</dtml-gettext>
- </th>
- <td align="left" valign="top">
- <input type="password" name="confirm" size="30">
- </td>
- </tr>
- <tr>
- <th> <dtml-gettext>Mail Password?</dtml-gettext>
-</th>
- <td>
- <input type="checkbox" name="mail_me" size="30" id="cb_mailme" />
- <em><label for="cb_mailme"><dtml-gettext>Check this box to have your password
- mailed to you.</dtml-gettext></label></em>
- </td>
- </tr>
- </dtml-unless>
-
-<dtml-comment> These items do not actually exist (yet?)
- <tr>
- <th> Full Name<br>(Optional)
- </th>
- <td>
- <input type="text" name="full_name" size="30"
-value="<dtml-if full_name><dtml-var full_name></dtml-if>">
- </td>
- </tr>
- <tr>
- <th> Company<br>(Optional)
- </th>
- <td>
- <input type="text" name="company" size="30"
- value="<dtml-if company><dtml-var company></dtml-if>">
- </td>
- </tr>
- </dtml-comment>
-
-<dtml-comment>
- <dtml-in CommonProperties>
- <dtml-let property_name=sequence-item
- current_value="_.has_key(property_name) and _[property_name] or ''">
- <tr>
- <th> <dtml-var sequence-item spacify>
- </th>
- <td>
- <input type="text" name="<dtml-var sequence-item>" size="30"
- value="&dtml-current_value;">
- </td>
- </tr>
- </dtml-let>
- </dtml-in>
- </dtml-comment>
-</table>
-
-   <p align="center"><input type="submit" value=" <dtml-gettext>Register & Add
- to Cart</dtml-gettext> "></p>
-   </form>
-  </td>
-  <td valign="top">
-   <h2><dtml-gettext>Existing Custommers</dtml-gettext></h2>
-
-   <p><dtml-gettext>If you are a registered custommer, please provide your user
- login and password in order to proceed.</dtml-gettext></p>
-
-<form method="POST" action="login_and_addToCart">
-
-<dtml-in
- "('color','processor','quantity','product_path','memory','disk','drive','setup'
-,
-'fs','root_partition','boot_partition','usr_partition','home_partition',
-'var_partition','swap_partition','tmp_partition','free_partition', 'config_url',
-'support','monitoring','backup','archive','hosting','keyboard')">
-<input type="hidden" name="&dtml-sequence-item;" value="<dtml-var
- "REQUEST[_['sequence-item']]">">
-</dtml-in>
-
-<dtml-in "getOptionValues('Option')">
-<dtml-if "REQUEST.has_key('option_%s' % _['sequence-number'])">
-<input type="hidden" name="option_&dtml-sequence-number;"
- value="&dtml-sequence-item">
-</dtml-if>
-</dtml-in>
-
-<table class="FormLayout">
-<tr>
-  <td align="left" valign="top">
-  <strong><dtml-gettext>Name:</dtml-gettext></strong>
-  </td>
-  <td align="left" valign="top">
-  <input type="TEXT" name="__ac_name" size="20"
-   value="<dtml-var "REQUEST.get('__ac_name', '')">">
-  </td>
-</tr>
-<tr>
-  <td align="left" valign="top">
-  <strong><dtml-gettext>Password:</dtml-gettext></strong>
-  </td>
-  <td align="left" valign="top">
-  <input type="PASSWORD" name="__ac_password" size="20">
-  </td>
-</tr>
-</table>
-   <p align="center"><input type="submit" value=" <dtml-gettext>Login & Add to
- Cart</dtml-gettext> "></p>
-   </form>
-  </td>
- </tr>
-</table>
-
-<dtml-var standard_html_footer>
-</dtml-let>
diff --git a/product/MMMShop/skins/storever/define_options.dtml b/product/MMMShop/skins/storever/define_options.dtml
deleted file mode 100755
index 236d92acb3..0000000000
--- a/product/MMMShop/skins/storever/define_options.dtml
+++ /dev/null
@@ -1,249 +0,0 @@
-<dtml-var standard_html_header>
-
-<p><i><dtml-gettext>Thank you for choosing Storever. All Storever products are available with a choice of
-hardware, software, and service options. Please use this form to configure your.</dtml-gettext></i></p>
-
-<dtml-if "portal_membership.isAnonymousUser()">
-<form method="POST" action="custommer_registration">
-<dtml-else>
-<form method="POST" action="login_and_addToCart">
-</dtml-if>
-
-<dtml-comment>Keep previous choice hidden</dtml-comment>
-<dtml-in "('color','quantity','product_path')">
-<input type="hidden" name="&dtml-sequence-item;" value="<dtml-var "REQUEST[_['sequence-item']]">">
-</dtml-in>
-
-<table>
-<tr ><td colspan="2"><h1><dtml-gettext>Hardware Options</dtml-gettext></h1></td></tr>
-            <tr>
-              <td width="25%"><dtml-gettext>Processor:</dtml-gettext></td>
-              <td>
-                <select name="processor">
-                 <dtml-in "getProcessorValues()">
-                   <option value="&dtml-sequence-key;"><dtml-var "gettext(_['sequence-key'])"> <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>Speed increases with clock frequencies and cache memory. Celeron processors use a 256KB L1 cache. Pentium III processors use a 256 KB or a 512 KB L1 cache.
-               Celeron processors use a 100 Mhz FSB frequency. Pentium III processors use a 133 Mhz FSB.</dtml-gettext></td>
-            </tr>
-           <tr>
-              <td><dtml-gettext>Memory:</dtml-gettext></td>
-              <td>
-                <select name="memory">
-                 <dtml-in "getMemoryValues()">
-                   <option value="&dtml-sequence-key;"><dtml-var "gettext(_['sequence-key'])"> <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>128 MB is sufficient for a low traffic Web server or mail server.
-More memory is required for highly loaded servers or for servers which need to access large databases
-and require to store database indices into memory.</dtml-gettext></td>
-            </tr>
-            <tr>
-              <td><dtml-gettext>Disk:</dtml-gettext></td>
-              <td>
-                <select name="disk">
-                  <dtml-in "getDiskValues()">
-                   <option value="&dtml-sequence-key;"><dtml-var "gettext(_['sequence-key'])"> <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>10 GB is sufficient for a personal server. 80 GB disk is sufficient for most servers. Multiple hard disks are very useful in order to maximise reliability (RAID technology) or increase storage (LVM technology).</dtml-gettext></td>
-            </tr>
-            <tr>
-              <td valign="top"><dtml-gettext>Other:</dtml-gettext></td>
-              <td>
-                 <dtml-in "getOptionValues('Option')">
-                   <input type="checkbox" name="option_&dtml-sequence-number;" value="&dtml-sequence-key;"><dtml-var "gettext(_['sequence-key'])"> (+&dtml-sequence-item; EUR)<br>
-                 </dtml-in>
-               </td>
-            </tr>
-            <tr ><td colspan="2"><h1><dtml-gettext>Software Options</dtml-gettext></h1></td></tr>
-            <tr>
-              <td><dtml-gettext>Setup:</dtml-gettext></td>
-              <td>
-                <select name="setup">
-                 <dtml-in "getOptionValues('Setup')">
-                   <option value="&dtml-sequence-key;" <dtml-if expr="setup==_['sequence-key']">selected</dtml-if>>&dtml-sequence-key; <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-               </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>Storever systems can be installed with a choice of Debian or Mandrake distribution. Please be aware that Storever
-               systems are sold to professional users who should be trained enough to use and configure their server by themselves. In particular, Storever
-               provides no kind of warranty on pre-installed GNU/Linux distributions.</dtml-gettext></td>
-            </tr>
-            <tr>
-              <td><dtml-gettext>Filesystem type:</dtml-gettext></td>
-              <td>
-                <select name="fs">
-                 <dtml-in "getOptionValues('Filesystem')">
-                   <option value="&dtml-sequence-key;">&dtml-sequence-key; <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>Storever systems can be configured with a choice
-               or 3 filesystems: Reiser, Ext2 and Ext3. If you do not know which file system to
-               choose, select Ext3.</dtml-gettext></td>
-            </tr>
-            <tr>
-              <td><dtml-gettext>Partitions:</dtml-gettext></td>
-              <td>
-                <table>
-                <tr><td>/root:</td><td><input type="text" name="root_partition" /></td></tr>
-                <tr><td>/boot:</td><td><input type="text" name="boot_partition" /></td></tr>
-                <tr><td>/usr:</td><td><input type="text" name="usr_partition" /></td></tr>
-                <tr><td>/home:</td><td><input type="text" name="home_partition" /></td></tr>
-                <tr><td>/var:</td><td><input type="text" name="var_partition" /></td></tr>
-                <tr><td>/tmp:</td><td><input type="text" name="tmp_partition" /></td></tr>
-                <tr><td>/swap:</td><td><input type="text" name="swap_partition" /></td></tr>
-                <tr><td>/free:</td><td><input type="text" name="free_partition" /></td></tr>
-                </table>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>Storever systems can be partitioned to your needs. The root
-               partition contains the core system including preferences, the boot partition contains the Linux kernel,
-               the usr partition contains most application software, the home partition
-               contains user files, the var partition contains log files and application
-               data, the tmp partition contains temporary files, the swap partition
-               allows to define the amount of virtual memory and the free partition is
-               used to define empty space on the hard disk which may eventually be used
-               to create more partitions.</dtml-gettext></td>
-            </tr>
-            <tr>
-              <td><dtml-gettext>Configuration:</dtml-gettext></td>
-              <td>
-                <input type="text" name="config_url" size="60">
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>Expert users may provide a URL
-               to a <A HREF="http://www.systemimager.org">SystemImager</A> setup which we shall use to install their server.</dtml-gettext></td>
-            </tr>
-
-<tr ><td colspan="2"><h1><dtml-gettext>Service Options</dtml-gettext></h1></td></tr>
-            <tr>
-              <td>Support:</td>
-              <td>
-                <select name="support">
-                 <dtml-in "getOptionValues('Support')">
-                   <option value="&dtml-sequence-key;"><dtml-var "gettext(_['sequence-key'])"> <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>Storever provides a choice of levels of support.
-               Web community support is a free service without any warranty based user mailing lists.
-               It is the best option for advanced users. Other users are encouraged to subscibe
-               a service pack so that they can get commercial support from fully qualified engineers.
-               Please make sure you read the <A HREF="products/service/support">general conditions</A> of Storever support service.</dtml-gettext></td>
-            </tr>
-            <tr>
-              <td><dtml-gettext>Monitoring:</dtml-gettext></td>
-              <td>
-                <select name="monitoring">
-                 <dtml-in "getOptionValues('Monitoring')">
-                   <option value="&dtml-sequence-key;"><dtml-var "gettext(_['sequence-key'])"> <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>Storever can provide you with monitoring
-               service in order to maximise the reliability of your server. Self monitoring
-               is based on webmin software and is built-in all Storever computer products.
-               Advanced monitoring is based on the Telemetry box.
-               Expert montoring includes human analysis of your log files
-               and analysis of intrusion detection.
-               Please make sure you read the <A HREF="products/service/monitoring">general conditions</A> of Storever monitoring service.</dtml-gettext></td>
-            </tr>
-            <tr>
-              <td><dtml-gettext>Hosting:</dtml-gettext></td>
-              <td>
-                <select name="hosting">
-                 <dtml-in "getOptionValues('Hosting')">
-                   <option value="&dtml-sequence-key;"><dtml-var "gettext(_['sequence-key'])"> <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>Storever servers may be hosted at the
-               Storever hosting center in Paris where we provide a
-               100 Mbps high quality connection to the Internet.
-               Please make sure you read the <A HREF="products/service/hosting">general conditions</A> of Storever hosting service.</dtml-gettext></td>
-            </tr>
-            <tr>
-              <td><dtml-gettext>Online Backup:</dtml-gettext></td>
-              <td>
-                <select name="backup">
-                 <dtml-in "getOptionValues('Backup')">
-                   <option value="&dtml-sequence-key;"><dtml-var "gettext(_['sequence-key'])"> <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>In order to backup your data without
-               pain, we propose a choice of backup options based on the rsync technology
-               and ssh encryption. Your data will be saved at Storever Online Backup
-               Center. Please make sure you read the <A HREF="products/service/backup">general conditions</A> of Storever backup service.</dtml-gettext></td>
-            </tr>
-            <tr>
-              <td><dtml-gettext>Offline Archive:</dtml-gettext></td>
-              <td>
-                <select name="archive">
-                 <dtml-in "getOptionValues('Archive')">
-                   <option value="&dtml-sequence-key;"><dtml-var "gettext(_['sequence-key'])"> <dtml-if expr="_['sequence-item'] > 0.0">(+&dtml-sequence-item; EUR)</dtml-if></option>
-                 </dtml-in>
-                </select>
-              </td>
-            </tr>
-            <tr>
-               <td></td>
-               <td class="OptionHelp"><dtml-gettext>To maximise data security,
-               we strongly recommend to make copy of your data in a location which
-               can not be accessed through any kind of network connection. Storever can provide
-               you this kind of service based on rsync, ssh and ftp technologies.
-               Please make sure you read the <A HREF="products/service/hosting">general conditions</A> of Storever offline archive service.</dtml-gettext></td>
-            </tr>
-</table>
-
-
-
-<p align="center">
-<dtml-if "portal_membership.isAnonymousUser()">
-<input type="submit" name="submit" value=" <dtml-gettext>Proceed to registration</dtml-gettext> ">
-<dtml-else>
-<input type="submit" name="submit" value=" <dtml-gettext>Add to Cart</dtml-gettext> ">
-</dtml-if>
-</p>
-
-</form>
-
-
-<dtml-var standard_html_footer>
diff --git a/product/MMMShop/skins/storever/favicon.ico b/product/MMMShop/skins/storever/favicon.ico
deleted file mode 100755
index 05a5a14d61c6459950f1c5e355cc7ca629f8771a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 281
zcmV+!0p|WkNk%w1VGsZi0E7SltgO8=Gh7T1K>z?V2M0MjJ7U(>-WfAyDN=<qW|=}l
zXy4!E6DL|PUXdwQix7UX0KNDUbEyE#|4&bH|NsB8vcVV_MgW7_0HEmyhROzW!xc@E
z0A|d+y~+q!umAu5A^8LW6aXIpEC2ui01yBW000G+;3s}SAPfUh0OM#B#DOFUauCYm
z22A5T5J<$)U<7oZLhm7IIv>ReiO_gZD3Yr)(hyV%2Zs~ult3H@1pyHWy5B;CWstaF
z?)ZErL7;0cfPsP<2?GKM8yt#@j2j373So?s9B2v^0t$(g92*J*9Ul`tn~hN-20T6+
f9v&M+3^^kUYBDr70ux9r6$%0b1QrvaBOw4gkqKOD

diff --git a/product/MMMShop/skins/storever/folder18_view.dtml b/product/MMMShop/skins/storever/folder18_view.dtml
deleted file mode 100755
index d36e3e21a3..0000000000
--- a/product/MMMShop/skins/storever/folder18_view.dtml
+++ /dev/null
@@ -1,61 +0,0 @@
-<dtml-if "'index.html' in objectIds()">
-
-  <dtml-var index.html>
-
-<dtml-elif "'index.stx' in objectIds()">
-
-  <dtml-var index.stx>
-
-<dtml-elif "'default.htm' in objectIds()">
-
-  <dtml-var default.htm>
-
-<dtml-else>
-
-<dtml-var standard_html_header>
-
-<dtml-let folder_url=absolute_url>
-
-<div class="Document">
-
-<dtml-if name="Description">
-<p><dtml-var TranslatedDescription></p>
-</dtml-if>
-
-<dtml-in expr="objectValues(['MMM Computer Product','Base18 Folder'])" skip_unauthorized
-  sort=TranslatedTitle_or_id>
-
- <dtml-let obj="_.getitem('sequence-item', 0 )"
-   folderish=isPrincipiaFolderish
-   portalish="_.hasattr( obj, 'isPortalContent' ) and obj.isPortalContent"
-   getIcon="_.hasattr(obj, 'getIcon') and obj.getIcon()"
-   icon="getIcon or _.getattr(obj, 'icon', '')">
-
-   <dtml-if portalish>
-     <h1>
-      <dtml-if icon>
-        <a href="&dtml-folder_url;/&dtml.url_quote-getId;"><img
-         src="&dtml-portal_url;/&dtml-icon;" alt="&dtml-Type;" border="0">
-        </a>
-      </dtml-if>
-
-      <a href="&dtml-folder_url;/&dtml.url_quote-getId;"
-        >&dtml-TranslatedTitle_or_id;</a>
-     </h1>
-
-     <dtml-if name="Description">
-      <p>&dtml.html_quote-TranslatedDescription;</p>
-     </dtml-if>
-
-   </dtml-if>
-
- </dtml-let>
-</dtml-in>
-
-</div>
-
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-</dtml-if>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/getCurrencyManager.py b/product/MMMShop/skins/storever/getCurrencyManager.py
deleted file mode 100755
index c210b17644..0000000000
--- a/product/MMMShop/skins/storever/getCurrencyManager.py
+++ /dev/null
@@ -1,11 +0,0 @@
-## Script (Python) "getCurrencyManager"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=
-##title=Uggly patch to bypass ZSQLCatalog issue
-##
-
-return context.CurrencyManager
diff --git a/product/MMMShop/skins/storever/getShopManager.py b/product/MMMShop/skins/storever/getShopManager.py
deleted file mode 100755
index f84b68f9f9..0000000000
--- a/product/MMMShop/skins/storever/getShopManager.py
+++ /dev/null
@@ -1,11 +0,0 @@
-## Script (Python) "getShopManager"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=
-##title=Uggly patch to bypass ZSQLCatalog issue
-##
-
-return 1, context.ShopManager
diff --git a/product/MMMShop/skins/storever/getTotalPrice.py b/product/MMMShop/skins/storever/getTotalPrice.py
deleted file mode 100755
index 4360549700..0000000000
--- a/product/MMMShop/skins/storever/getTotalPrice.py
+++ /dev/null
@@ -1,40 +0,0 @@
-## Script (Python) "getTotalPrice"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=
-##title=Computer Total Price
-##
-shopping_cart = context.getShoppingCart()
-exchange_rate = context.REQUEST['exchange_rate']
-cur_code = context.REQUEST['cur_code']
-shopmanager = context.getShopManager()[1]
-local_fee = shopmanager.send_fee_local
-world_fee = shopmanager.send_fee_world
-exchange_fee = shopmanager.exchange_fee
-
-all_price = 0
-for item in shopping_cart.listProducts():
-   product_path = item.getProduct()
-   quantity = item.getQuantity()
-   variant = item.getVariant()
-   product = context.restrictedTraverse(product_path)
-   prod_deliver_days = product.delivery_days
-   prod_price = product.computePrice(variant)
-   price = float(prod_price) / float(exchange_rate)
-   total_price = int(quantity) * float(price)
-   all_price = float(all_price) + float(total_price)
-   item.setDeliveryDays(prod_deliver_days)
-
-if cur_code == shopmanager.local_currency:
-   send_fee = float(local_fee)
-   exc_fee = float(0)
-else:
-   send_fee = float(world_fee) / float(exchange_rate)
-   exc_fee = float(exchange_fee) / float(exchange_rate)
-
-all_price = float(all_price) + float(send_fee) + float(exc_fee)
-
-return all_price
diff --git a/product/MMMShop/skins/storever/has_vat.py b/product/MMMShop/skins/storever/has_vat.py
deleted file mode 100755
index 3ab056af29..0000000000
--- a/product/MMMShop/skins/storever/has_vat.py
+++ /dev/null
@@ -1,11 +0,0 @@
-##parameters=euvat , country
-
-# Tells if this client has to pay VAT
-
-eu_countries = [ 'Austria', 'Belgium', 'Denmark', 'Finland', 'France', 'Germany', 'Greece', 'Ireland', 'Italy', 'Luxembourg', 'Netherlands', 'Portugal', 'Spain', 'Sweden' ,'United Kingdom']
-
-if euvat != '' and country != 'France':
-  return 0
-if not country in eu_countries:
-  return 0
-return 1
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/logged_out.dtml b/product/MMMShop/skins/storever/logged_out.dtml
deleted file mode 100755
index 5455c60489..0000000000
--- a/product/MMMShop/skins/storever/logged_out.dtml
+++ /dev/null
@@ -1,10 +0,0 @@
-<dtml-var standard_html_header>
-<p>
-<dtml-if expr="portal_membership.isAnonymousUser()">
-You have been logged out.
-<dtml-else>
-You are logged in outside the portal.  You may need to
-<a href="/manage_zmi_logout">log out of the Zope management interface</a>.
-</dtml-if>
-</p>
-<dtml-var standard_html_footer>
diff --git a/product/MMMShop/skins/storever/login_and_addToCart.dtml b/product/MMMShop/skins/storever/login_and_addToCart.dtml
deleted file mode 100755
index 7160cceef4..0000000000
--- a/product/MMMShop/skins/storever/login_and_addToCart.dtml
+++ /dev/null
@@ -1,75 +0,0 @@
-<dtml-if portal_skins>
- <dtml-if expr="portal_skins.updateSkinCookie()">
-  <dtml-call setupCurrentSkin>
- </dtml-if>
-</dtml-if>
-
-
-<dtml-with portal_properties>
-
-<dtml-if "portal_membership.isAnonymousUser()">
- <dtml-var standard_html_header>
- <dtml-call "REQUEST['RESPONSE'].expireCookie('__ac', path='/')">
- <h1 class="DesktopTitle"><dtml-gettext>Login failure</dtml-gettext></h1>
-
- <!-- <p><a href="&dtml.url-mail_password_form;">I forgot my password!</a></p>
- -->
-
- <p class="Desktop"><dtml-gettext>You are not currently logged in.
- Your username and or password may be incorrect.
- Your browser may also not be configured to accept
- HTTP cookies. You may try to login again by going back to the previous page.
- If you need help please contact</dtml-gettext> 
- <a href="mailto:&dtml-email_from_address;">&dtml-email_from_address;</a>.
- </p>
- <dtml-var standard_html_footer>
-
-<dtml-else>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()">
-
- <dtml-if "member.login_time == _.DateTime('2000/01/01') and 
-           validate_email">
- <dtml-comment>
-  First login by this user.  Display message and offer password changer form.
-  Init login times to now
- </dtml-comment>
-
- <dtml-call
-
-"member.setProperties(last_login_time=ZopeTime(),
-login_time=ZopeTime())">
-
- <dtml-else>
-
- <dtml-call
- "member.setProperties(last_login_time=member.login_time)">
- <dtml-call "member.setProperties(login_time=ZopeTime())">
-
- </dtml-if>
-
-<dtml-call "REQUEST.set('options',())">
-
-<dtml-in "getOptionValues('Option')">
-<dtml-if "REQUEST.has_key('option_%s' % _['sequence-number'])">
-<dtml-call "REQUEST.set('options',REQUEST.get('options')+ 
-                (_['sequence-key'],))">
-</dtml-if>
-</dtml-in>
-
-
- <dtml-let variant="(color,processor,memory,disk,
-  options + (support,hosting,monitoring,backup,archive,drive,keyboard,fs),setup,
-  config_url,
-  root_partition,
-  boot_partition,usr_partition,home_partition,var_partition,tmp_partition,
-  swap_partition,free_partition)">
-
- <dtml-var "addToCart(REQUEST,variant)">
- </dtml-let>
-
-</dtml-let>
-
-</dtml-if>
-
-</dtml-with>
diff --git a/product/MMMShop/skins/storever/login_form.dtml b/product/MMMShop/skins/storever/login_form.dtml
deleted file mode 100755
index eb5eaa3e53..0000000000
--- a/product/MMMShop/skins/storever/login_form.dtml
+++ /dev/null
@@ -1,68 +0,0 @@
-<dtml-var standard_html_header>
-
-<h1 class="DesktopTitle">
- <dtml-gettext>Log in</dtml-gettext>
-</h1>
-
-<p><dtml-gettext>The action you have requested requires to provide your custommer information bellow.</dtml-gettext></p>
-
-<form action="&dtml.url-logged_in;" method="post">
-
-<!-- ****** Enable the automatic redirect ***** -->
-<dtml-if name="came_from">
-  <input type="hidden" name="came_from" value="&dtml-came_from;">
-</dtml-if>
-<!-- ****** Enable the automatic redirect ***** -->
-
-<table class="FormLayout">
-<tr>
-  <td align="left" valign="top">
-  <strong><dtml-gettext>Name</dtml-gettext></strong>
-  </td>
-  <td align="left" valign="top">
-  <input type="TEXT" name="__ac_name" size="20"
-   value="<dtml-var "REQUEST.get('__ac_name', '')">">
-  </td>
-</tr>
-<tr>
-  <td align="left" valign="top">
-  <strong><dtml-gettext>Password</dtml-gettext></strong>
-  </td>
-  <td align="left" valign="top">
-  <input type="PASSWORD" name="__ac_password" size="20">
-  </td>
-</tr>
-
-<tr valign="top" align="left">
-<td></td>
-<td><input type="checkbox" name="__ac_persistent" value="1" checked
-      id="cb_remember" />
-<label for="cb_remember">Remember my name.</label>
-</td></tr>
-
-<tr>
-  <td align="left" valign="top">
-  </td>
-  <td align="left" valign="top">
-  <input type="submit" name="submit" value=" Login ">
-  </td>
-</tr>
-
-</table>
-</form>
-
-<p><a href="&dtml.url-mail_password_form;">I forgot my password!</a></p>
-
-<p>
-<dtml-gettext>Having trouble logging in? Make sure to enable cookies in your web browser.</dtml-gettext>
-</p>
-
-<p><dtml-gettext>Don't forget to logout or exit your browser when you're done.</dtml-gettext>
-</p>
-
-<p>
-<dtml-gettext>Setting the 'Remember my name' option will set a cookie with your username,
-so that when you next log in, your user name will already be filled in for you.</dtml-gettext>
-</p>
-
-<dtml-var standard_html_footer>
diff --git a/product/MMMShop/skins/storever/logo.png b/product/MMMShop/skins/storever/logo.png
deleted file mode 100755
index 52309f7d150cc40a7a65757f0139ff780c8120a7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10142
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

diff --git a/product/MMMShop/skins/storever/news_box.dtml b/product/MMMShop/skins/storever/news_box.dtml
deleted file mode 100755
index 909b2c3d94..0000000000
--- a/product/MMMShop/skins/storever/news_box.dtml
+++ /dev/null
@@ -1,60 +0,0 @@
- <table class="NewsItems" cellspacing="0" cellpadding="0" border="0" width="150">
-  <tr>
-   <td class="NewsBorder" width="1" rowspan="13" bgcolor="#6699CC">
-    <img src="spacer.gif" alt=" "
-         width="1" height="2" border="0">
-   </td>
-   <td valign="top" class="NewsTitle" width="150">
-     <b><dtml-gettext>News</dtml-gettext></b>
-   </td>
-  </tr>
-
-  <dtml-if "meta_type=='Portal Topic'">
-  <dtml-in "portal_catalog.searchResults( meta_type=['News Item','Base18 News Item']
-                                        , sort_on='Date'
-                                        , sort_order='reverse'
-                                        , review_state='published'
-                                        , Subject=combined_subjects()
-                                        )" size="10">
-  <tr class="NewsItemRow">
-   <td valign="top" class="title">
-    <p><a href="<dtml-var "getObject().local_absolute_url(lang=gettext.get_selected_language())">"> <dtml-var "getObject().TranslatedTitle()"> </a></p>
-    <p class="description"><dtml-var Date> - <dtml-var "getObject().TranslatedDescription()"></p>
-   </td>
-  </tr>
-  <dtml-else>
-  <tr class="NewsItemRow">
-   <td valign="top" class="title">
-     <dtml-gettext>No news is no news.</dtml-gettext>
-   </td>
-  </tr>
-  </dtml-in>
-  <dtml-else>
-  <dtml-in "portal_catalog.searchResults( meta_type=['News Item','Base18 News Item']
-                                        , sort_on='Date'
-                                        , sort_order='reverse'
-                                        , review_state='published'
-                                        )" size="10">
-  <tr class="NewsItemRow">
-   <td valign="top" class="title">
-    <p><a href="<dtml-var "getObject().local_absolute_url(lang=gettext.get_selected_language())">"> <dtml-var "getObject().TranslatedTitle()"> </a></p>
-    <p class="description"><dtml-var Date> - <dtml-var "getObject().TranslatedDescription()"></p>
-   </td>
-  </tr>
-  <dtml-else>
-  <tr class="NewsItemRow">
-   <td valign="top" class="title">
-     <dtml-gettext>No news is no news.</dtml-gettext>
-   </td>
-  </tr>
-  </dtml-in>
-  </dtml-if>
-
-
-  <tr class="NewsItemRow" >
-   <td class="title">
-     <a href="&dtml.url-recent_news;"><dtml-gettext>More...</dtml-gettext></a>
-   </td>
-  </tr>
-
- </table>
diff --git a/product/MMMShop/skins/storever/order_accept_form.dtml b/product/MMMShop/skins/storever/order_accept_form.dtml
deleted file mode 100755
index 6f6248b67c..0000000000
--- a/product/MMMShop/skins/storever/order_accept_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Accept Request for Repair</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to request a repair on an order. Use the
-form bellow to provide a detailed description of the incident. Do not
-send anything before you get our acceptance.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="accept">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Accept RMA</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_authorize_form.dtml b/product/MMMShop/skins/storever/order_authorize_form.dtml
deleted file mode 100755
index 5a0cc713e3..0000000000
--- a/product/MMMShop/skins/storever/order_authorize_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Authorize Order</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to authorize orders built by partners
-before they are shipped. If you have any comments, plese you the
-text area bellow.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="authorize">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Authorize Order</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_build_form.dtml b/product/MMMShop/skins/storever/order_build_form.dtml
deleted file mode 100755
index 0b203ad6df..0000000000
--- a/product/MMMShop/skins/storever/order_build_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Build Order</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to build an order. Built orders
-can be shipped. If you have any comments, plese you the
-text area bellow.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="build">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Build Order</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_cancel_form.dtml b/product/MMMShop/skins/storever/order_cancel_form.dtml
deleted file mode 100755
index 3dd25d95f2..0000000000
--- a/product/MMMShop/skins/storever/order_cancel_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Cancel an Order</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to cancel an order. Cancelled orders
-can not be confirmed anylonger. If you have any comments, plese you the
-text area bellow</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="cancel">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Cancel Order</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_confirm_form.dtml b/product/MMMShop/skins/storever/order_confirm_form.dtml
deleted file mode 100755
index 31534b9c54..0000000000
--- a/product/MMMShop/skins/storever/order_confirm_form.dtml
+++ /dev/null
@@ -1,75 +0,0 @@
-<dtml-var standard_html_header>
-
-<div class="Desktop">
-
-<p><dtml-gettext>Thank you very much for submitting an order. In order to confirm your
-order, please select a payment option with the form bellow. If you are not certain yet,
-you may still access this order later by selecting the menu <b>My Orders</b> and confirm payment options.
-You may also <a href="&dtml-local_absolute_url;">cancel this order by clicking here</a>.
-</dtml-gettext></p>
-
-<h1><dtml-gettext>Order Summary</dtml-gettext></h1>
-
-<dtml-let display_in_payment="1">
-        <dtml-var shoporder_view>
-</dtml-let>
-
-<dtml-let code_societe="'nexedi'"
-          montantvat="getTotalPriceVAT()"
-          montant="getTotalPrice()"
-          payvat="has_vat(euvat = euvat, country = country )"
->
-
-<h1><dtml-gettext>Payment Options</dtml-gettext></h1>
-
-<p><dtml-gettext>Storever Online accepts payments by money transfer or by credit card</dtml-gettext></p>
-
-<h3><dtml-gettext>Online Payment</dtml-gettext></h3>
-
-<p><dtml-gettext>With our secure online payment system operated by CIC, you can simply use you credit card to pay</dtml-gettext> <dtml-if payvat><dtml-var montantvat><dtml-else><dtml-var montant></dtml-if> EUR
-<dtml-gettext> online with the same or better level of security as in the real world.</dtml-gettext></p>
-
-
-<center>
-<dtml-let code_societe="'nexedi'"
-          texte_bouton="gettext('Secure Online Payment')"
-          langue="gettext.get_selected_language()"
-          TPE="'/etc/cmmac/6496547.key'"
-          url_banque="'https://ssl.paiement.cic-banques.fr/paiement.cgi'"
-          texte_libre="_.string.join(getPhysicalPath()[1:],'/')" 
-          reference="id"
-          url_retour_err="absolute_url() + '?portal_status_message=' + gettext('Online+Payment+Rejected')"
-          url_retour_ok="absolute_url() + '?portal_status_message=' + gettext('Online+Payment+Accepted') ">
-
-<dtml-if payvat>
-  <dtml-var "payment.CreerFormulaireCM(url_retour_err=url_retour_err,url_retour_ok=url_retour_ok,texte_libre=texte_libre,reference=reference,code_societe=code_societe,texte_bouton=texte_bouton, langue=langue, TPE=TPE, url_banque=url_banque,montant=montantvat)">
-<dtml-else>
-  <dtml-var "payment.CreerFormulaireCM(url_retour_err=url_retour_err,url_retour_ok=url_retour_ok,texte_libre=texte_libre,reference=reference,code_societe=code_societe,texte_bouton=texte_bouton, langue=langue, TPE=TPE, url_banque=url_banque,montant=montant)">
-</dtml-if>
-
-</dtml-let>
-</center>
-
-
-<dtml-comment>
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="confirm">
-<input type="hidden" name="comment" value="Confirm payment online">
-<p align="center"><input type="submit" value="<dtml-gettext>Confirm Order and Pay Online</dtml-gettext>"></p>
-</form>
-</dtml-comment>
-
-<h3><dtml-gettext>Money Transfer</dtml-gettext></h3>
-
-<p><dtml-gettext>If you prefer not to use your credit card online, please send</dtml-gettext> <dtml-if payvat><dtml-var montantvat><dtml-else><dtml-var montant></dtml-if> EUR <dtml-gettext>to Nexedi SARL bank account</dtml-gettext></p>
-<p align="center">IBAN: FR76 3002 7000 3900 0000 1332 336</p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.local_absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="confirm">
-<input type="hidden" name="comment" value="Confirm payment by money transfer">
-<p align="center"><input type="submit" value="<dtml-gettext>Confirm Order and Pay by Money Transfer</dtml-gettext>"></p>
-</form>
-
-</dtml-let>
-
-<dtml-var standard_html_footer>
diff --git a/product/MMMShop/skins/storever/order_inform_form.dtml b/product/MMMShop/skins/storever/order_inform_form.dtml
deleted file mode 100755
index 1a5b4ecb75..0000000000
--- a/product/MMMShop/skins/storever/order_inform_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Order Information</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to provide information to customers.
-Please use the text area bellow to provide the information you
-want your customer to receive.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="inform">
-
-<strong><em>Order information:</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Order Information</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_invoice_form.dtml b/product/MMMShop/skins/storever/order_invoice_form.dtml
deleted file mode 100755
index f81f95b2fc..0000000000
--- a/product/MMMShop/skins/storever/order_invoice_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Confirm Invoice</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to confirm that an invoice was sent to the
-customer. Please you the
-text area bellow.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="invoice">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Confirm Invoice</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_list.dtml b/product/MMMShop/skins/storever/order_list.dtml
deleted file mode 100755
index 2cb36fda60..0000000000
--- a/product/MMMShop/skins/storever/order_list.dtml
+++ /dev/null
@@ -1,78 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-if "portal_membership.isAnonymousUser()">
-  <dtml-call "REQUEST.RESPONSE.redirect('login_form?came_from=order_list')">
-<dtml-else>
-
-<dtml-call "REQUEST.set('listurl', REQUEST['URL'])">
-
-<dtml-let user="portal_membership.getAuthenticatedMember().getUserName()"
-   mem_folder="portal_membership.getHomeFolder(user)">
-<TABLE BORDER="0" WIDTH="100%">
- <TR Class="NewsTitle">
-  <TD colspan="6" Class="NewsTitle"><dtml-gettext>My Orders</dtml-gettext></TD>
- </TR>
- <TR>
-  <TD>&nbsp;</TD>
-  <TD><FONT SIZE="1"><B><dtml-gettext>Order Date</dtml-gettext></B></FONT></TD>
-  <TD><FONT SIZE="1"><B><dtml-gettext>Lines in order</dtml-gettext></B></FONT></TD>
-  <TD><FONT SIZE="1"><B><dtml-gettext>Total incl. VAT</dtml-gettext></B></FONT></TD>
-  <TD><FONT SIZE="1"><B><dtml-gettext>Order ID</dtml-gettext></B></FONT></TD>
-  <TD><FONT SIZE="1"><B><dtml-gettext>Status</dtml-gettext></B></FONT></TD>
- </TR>
- <dtml-in "mem_folder.objectValues('MMM Shop Order')">
-  <dtml-let orderobj="_.getitem('sequence-item')">
- <TR>
-  <TD><FONT SIZE="2"><A HREF="&dtml-listurl;?display_order_content=true&orderpath=<dtml-var "orderobj.absolute_url(relative=1)">"><dtml-gettext>Content</dtml-gettext></A></FONT></TD>
-  <TD><FONT SIZE="2"><dtml-var "orderobj.created().strftime('%Y/%m/%d %H:%M')"></FONT></TD>
-  <TD><FONT SIZE="2"><dtml-var "orderobj.orderLines()"></FONT></TD>
-  <TD><FONT SIZE="2"><dtml-var getTotalPriceVAT></FONT></TD>
-  <TD><FONT SIZE="2"><A HREF="<dtml-var "orderobj.local_absolute_url()">"><dtml-var "orderobj.orderid"></A></FONT></TD>
-  <TD><FONT SIZE="2">
-   <dtml-let review_state="portal_workflow.getInfoFor(this(),
-    'order_state', '')">
-    <dtml-if review_state><dtml-var "gettext(review_state)"></dtml-if>
-   </dtml-let>
-  </FONT></TD>
- </TR>
-  </dtml-let>
- </dtml-in>
-</TABLE>
-
-<dtml-if "REQUEST.has_key('display_order_content')">
- <dtml-let orderobj="restrictedTraverse(REQUEST['orderpath'])">
-<TABLE BORDER="0" WIDTH="100%">
- <TR>
-  <TD><FONT SIZE="1"><B><dtml-gettext>Product</dtml-gettext></B></FONT></TD>
-  <TD><FONT SIZE="1"><B><dtml-gettext>Quantity</dtml-gettext></B></FONT></TD>
-  <TD><FONT SIZE="1"><B><dtml-gettext>Price / Piece</dtml-gettext></B></FONT></TD>
-  <TD><FONT SIZE="1"><B><dtml-gettext>Total price</dtml-gettext></B></FONT></TD>
- </TR>
-  <dtml-in "orderobj.listProducts()">
-   <dtml-let item="_.getitem('sequence-item')"
-      product="item.getProduct()"
-      quantity="item.getQuantity()"
-      variant="item.getVariant()"
-      price="item.getPrice()"
-      prodobj="restrictedTraverse(product)"
-      total_price="_.int(quantity) * _.float(price)">
- <TR>
-  <TD><FONT SIZE="2"><dtml-var "prodobj.title"> <dtml-var "prodobj.shortVariant(variant)"></FONT></TD>
-  <TD><FONT SIZE="2">&dtml-quantity;</FONT></TD>
-  <TD><FONT SIZE="2">&dtml-price;</FONT></TD>
-  <TD><FONT SIZE="2">&dtml-total_price;</FONT></TD>
- </TR>
-   </dtml-let>
-  </dtml-in>
- </dtml-let>
-</dtml-if>
-</TABLE>
-</dtml-let>
-
-<dtml-in "portal_catalog.searchResults(review_state='visible')">
- <dtml-var "portal_catalog.getpath(data_record_id_)"><BR>
-</dtml-in>
-
-</dtml-if>
-
-<dtml-var standard_html_footer>
diff --git a/product/MMMShop/skins/storever/order_partial_ship_form.dtml b/product/MMMShop/skins/storever/order_partial_ship_form.dtml
deleted file mode 100755
index f9fd5e2172..0000000000
--- a/product/MMMShop/skins/storever/order_partial_ship_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Confirm Partial Shipment</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to confirm partial shipment for an order. Shipped orders
- can eventually be sent back. If you have any comments, please you the
-text area bellow.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="partial_ship">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Confirm Partial Shipment</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_pay_form.dtml b/product/MMMShop/skins/storever/order_pay_form.dtml
deleted file mode 100755
index a0fb819e6a..0000000000
--- a/product/MMMShop/skins/storever/order_pay_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Confirm Payment for an Order</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to confirm payment an order. Paid orders
-can be built. If you have any comments, plese you the
-text area bellow.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="pay">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Confirm Payment</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_receive_form.dtml b/product/MMMShop/skins/storever/order_receive_form.dtml
deleted file mode 100755
index fc8a3c76ae..0000000000
--- a/product/MMMShop/skins/storever/order_receive_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Confirm Reception</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to request a repair on an order. Use the
-form bellow to provide a detailed description of the incident. Do not
-send anything before you get our acceptance.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="receive">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Confirm Reception</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_reject_form.dtml b/product/MMMShop/skins/storever/order_reject_form.dtml
deleted file mode 100755
index 60d74695e1..0000000000
--- a/product/MMMShop/skins/storever/order_reject_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Reject an Order</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to reject an order. Rejected orders
-can not be confirmed anylonger. If you have any comments, plese you the
-text area bellow.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="reject">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Reject Order</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_rejectrma_form.dtml b/product/MMMShop/skins/storever/order_rejectrma_form.dtml
deleted file mode 100755
index 176bb6d049..0000000000
--- a/product/MMMShop/skins/storever/order_rejectrma_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Reject Request for Repair</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to request a repair on an order. Use the
-form bellow to provide a detailed description of the incident. Do not
-send anything before you get our acceptance.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="reject_rma">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Reject RMA</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_repair_form.dtml b/product/MMMShop/skins/storever/order_repair_form.dtml
deleted file mode 100755
index 76cda7d318..0000000000
--- a/product/MMMShop/skins/storever/order_repair_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Repair Order</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to request a repair on an order. Use the
-form bellow to provide a detailed description of the incident. Do not
-send anything before you get our acceptance.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="repair">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Repair Order</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_rma_form.dtml b/product/MMMShop/skins/storever/order_rma_form.dtml
deleted file mode 100755
index 8a524dd6b9..0000000000
--- a/product/MMMShop/skins/storever/order_rma_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Request Repair</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to request a repair on an order. Use the
-form bellow to provide a detailed description of the incident. Do not
-send anything before you get our acceptance.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="request_rma">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Request Repair</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_ship_form.dtml b/product/MMMShop/skins/storever/order_ship_form.dtml
deleted file mode 100755
index 1be6239e26..0000000000
--- a/product/MMMShop/skins/storever/order_ship_form.dtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()"
- review_state="portal_workflow.getInfoFor(this(), 'order_state')"
- review_history="portal_workflow.getInfoFor(this(), 'order_history')">
-
-<div class="Desktop">
-
-<h1><dtml-gettext>Confirm Shipment</dtml-gettext></h1>
-
-<p><dtml-gettext>This form allows you to confirm shipment for an order. Shipped orders
- can eventually be sent back. If you have any comments, plese you the
-text area bellow.</dtml-gettext></p>
-
-<form method="post" action="<dtml-if order_obj><dtml-var "order_obj.absolute_url()"></dtml-if>order_status_modify">
-<input type="hidden" name="workflow_action" value="ship">
-
-<strong><em>Comments</em></strong><br>
- <textarea name="comment" cols="60" rows="5" wrap="soft"
- style="width: 100%"></textarea>
-
-<p align="center"><input type="submit" value="<dtml-gettext>Confirm Shipment</dtml-gettext>"></p>
-</form>
-
-
-<dtml-if review_history>
- <p><strong>Reviewing history</strong><br>
- <dtml-in review_history mapping reverse>
- <dtml-var time fmt="aCommon"> &dtml-action;
- <dtml-if effective_date>
- (effective: <dtml-var effective_date fmt="aCommon">)
- </dtml-if>
- by &dtml-actor;<br>
- <dtml-if "_['sequence-item']['comments']">
- </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p>
- </dtml-if>
- </dtml-in>
- </p>
- </dtml-if>
-
-
-</div>
-</dtml-let>
-
-<dtml-var standard_html_footer>
-
-
-
-
diff --git a/product/MMMShop/skins/storever/order_status_modify.py b/product/MMMShop/skins/storever/order_status_modify.py
deleted file mode 100755
index fc078556f0..0000000000
--- a/product/MMMShop/skins/storever/order_status_modify.py
+++ /dev/null
@@ -1,37 +0,0 @@
-## Script (Python) "order_status_modify"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=workflow_action, comment=''
-##title=Modify the status of an order object
-##
-context.portal_workflow.doActionFor(
-    context,
-    workflow_action,
-    comment=comment)
-
-if workflow_action == 'reject':
-    redirect_url = context.portal_url() + '/search?review_state=pending'
-elif workflow_action == 'confirm':
-    # Empty the cart first
-    try:
-        user = context.portal_membership.getAuthenticatedMember().getUserName()
-        mem_folder = context.portal_membership.getHomeFolder(user)
-        mem_folder.ShoppingCart.clearCart()
-    except:
-        pass
-    redirect_url = '%s/view?%s' % ( context.local_absolute_url()
-                                  , 'portal_status_message=Order+confirmed.'
-                                  )
-elif workflow_action == 'cancel':
-    redirect_url = '%s/view?%s' % ( context.local_absolute_url()
-                                  , 'portal_status_message=Order+cancelled.'
-                                  )
-else:
-    redirect_url = '%s/view?%s' % ( context.local_absolute_url()
-                                  , 'portal_status_message=Status+changed.'
-                                  )
-
-context.REQUEST[ 'RESPONSE' ].redirect( redirect_url )
diff --git a/product/MMMShop/skins/storever/register_and_addToCart.py b/product/MMMShop/skins/storever/register_and_addToCart.py
deleted file mode 100755
index 02e19985a2..0000000000
--- a/product/MMMShop/skins/storever/register_and_addToCart.py
+++ /dev/null
@@ -1,42 +0,0 @@
-## Script (Python) "register_and_addToCart"
-##bind container=container
-##bind context=context
-##bind namespace=_
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=password='password', confirm='confirm'
-##title=Register a user
-##
-REQUEST=context.REQUEST
-portal_properties = context.portal_properties
-portal_registration = context.portal_registration
-
-# Validate Login Name
-if not portal_registration.isMemberIdAllowed(REQUEST['username']):
-  failMessage = 'Bad name. Login names must only contain letters (without accents) and numbers'
-  REQUEST.set( 'portal_status_message', failMessage )
-  return context.custommer_registration( context, REQUEST, portal_status_message=failMessage )
-
-if not portal_properties.validate_email:
-  failMessage = portal_registration.testPasswordValidity(password, confirm)
-  if failMessage:
-      REQUEST.set( 'portal_status_message', failMessage )
-      return context.custommer_registration( context, REQUEST, portal_status_message=failMessage )
-
-failMessage = portal_registration.testPropertiesValidity(REQUEST)
-
-if failMessage:
-    REQUEST.set( 'portal_status_message', failMessage )
-    return context.custommer_registration( context, REQUEST, portal_status_message=failMessage )
-else:
-    REQUEST.set('pref_currency','EUR')
-    password=REQUEST.get('password') or portal_registration.generatePassword()
-    portal_registration.addMember(REQUEST['username'], password, properties=REQUEST)
-
-    if portal_properties.validate_email or REQUEST.get('mail_me', 0):
-        portal_registration.registeredNotify(REQUEST['username'])
-
-    REQUEST.set('__ac_name',REQUEST['username'])
-    REQUEST.set('__ac_password',password)
-    #context.cookie_authentication.modifyRequest(REQUEST, None)
-    return context.registered_before_addToCart( context, REQUEST )
diff --git a/product/MMMShop/skins/storever/registered_before_addToCart.dtml b/product/MMMShop/skins/storever/registered_before_addToCart.dtml
deleted file mode 100755
index 5f83e24dc4..0000000000
--- a/product/MMMShop/skins/storever/registered_before_addToCart.dtml
+++ /dev/null
@@ -1,56 +0,0 @@
-<dtml-let show_language_selector="0" show_breadcrumb="0">
-<dtml-var standard_html_header>
-
-<h1><dtml-gettext>Congratulations: you have been registered</dtml-gettext></h1>
-
-
-
-   <p><dtml-gettext>You are now a registered custommer. Please read the sales
- terms and conditions and add this item to your shopping
- cart.</dtml-gettext></p>
-
-<dtml-with "legal.sales">
-
-   <table BGCOLOR="#C0C0C0" cellpadding="10" align="center" width="80%"><tr><td
- bgcolor="#C0C0C0">
-
-   <center><p><dtml-var TranslatedTitle></p></center>
-
-   <dtml-var TranslatedBody>
-
-   </td></tr></table>
-
-</dtml-with>
-
-
-<form method="POST" action="login_and_addToCart">
-
-<dtml-in
- "('color','processor','quantity','product_path','memory','disk','drive','setup'
-,
-'fs','root_partition','boot_partition','usr_partition','home_partition',
-'var_partition','swap_partition','tmp_partition','free_partition', 'config_url',
-'support','monitoring','backup','archive','hosting','keyboard')">
-<input type="hidden" name="&dtml-sequence-item;" value="<dtml-var
- "REQUEST[_['sequence-item']]">">
-</dtml-in>
-
-<dtml-in "getOptionValues('Option')">
-<dtml-if "REQUEST.has_key('option_%s' % _['sequence-number'])">
-<input type="hidden" name="option_&dtml-sequence-number;"
- value="&dtml-sequence-item">
-</dtml-if>
-</dtml-in>
-
-  <input type="hidden" name="__ac_name" size="20"
-   value="<dtml-var "REQUEST.get('__ac_name', '')">">
-
-  <input type="hidden" name="__ac_password" value="<dtml-var
- "REQUEST.get('__ac_password', '')">" size="20">
-
-   <p align="center"><input type="submit" value=" <dtml-gettext>Accept and Add
- to Cart</dtml-gettext> "></p>
-   </form>
-
-<dtml-var standard_html_footer>
-</dtml-let>
diff --git a/product/MMMShop/skins/storever/render_computer_variant b/product/MMMShop/skins/storever/render_computer_variant
deleted file mode 100755
index d6ec0635c7..0000000000
--- a/product/MMMShop/skins/storever/render_computer_variant
+++ /dev/null
@@ -1,29 +0,0 @@
-<table width="100%"><tr>
- <td valign="top">
-   <p>Hardware:</p>
-   <ul>
-    <li>Color: <span tal:replace="python:options.variant"/></li>
-    <li>Processor: <span /></li>
-    <li>Memory: <span /></li>
-    <li>Disk: <span /></li>
-   </ul>
-   <p>Options:</p>
-   <ul>
-     <li tal:repeat="item python:options.variant" tal:content="item">Options</li>
-   </ul>
- </td>
- <td valign="top">
-   <p>Setup: <span /></p>
-   <p>Configuration URL: <span /></p>
-   <p>Partition:</p>
-   <ul>
-     <li>/root: <span /></li>
-     <li>/boot: <span /></li>
-     <li>/usr: <span /></li>
-     <li>/home: <span /></li>
-     <li>/var: <span /></li>
-     <li>/tmp: <span /></li>
-     <li>/swap: <span /></li>
-     <li>/free: <span /></li></ul>
- </td>
-</tr></table>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/search.dtml b/product/MMMShop/skins/storever/search.dtml
deleted file mode 100755
index 167ae127da..0000000000
--- a/product/MMMShop/skins/storever/search.dtml
+++ /dev/null
@@ -1,78 +0,0 @@
-<dtml-var standard_html_header>
-
-<div class="Desktop">
-
-<h1> Search Results </h1>
-
-
-<dtml-let results="doFormSearch( REQUEST=REQUEST )">
-
-<p>Found <dtml-var expr="_.len(results)" thousands_commas>
-items.</p>
-
-<dtml-in results sort="id" size="25" start="batch_start">
- <dtml-let objURL="getURL() + '/view'">
-
- <dtml-if sequence-start>
-<table class="SearchResults">
- <tr>
-  <td width="16"><br></td>
-  <th> Title
-  </th>
-  <th> Type
-  </th>
-  <th> Date
-  </th>
-  </tr>
- </dtml-if>
-
- <tr>
-  <td>
-   <dtml-if getIcon>
-   <a href="&dtml-objURL;"><img
-    src="&dtml-portal_url;/&dtml-getIcon;" border="0"
-    alt="[&dtml.missing-Type;]"
-    title="[&dtml.missing-Type;]"></a>
-   </dtml-if>
-  </td>
-  <td>
-   <a href="&dtml-objURL;"><dtml-if name="Title"><dtml-var name="Title" size="75" html_quote><dtml-else>(No title)</dtml-if></a>
-  </td>
-  <td>
-    &dtml.missing-Type;
-  </td>
-  <td>
-   &dtml-Date;
-  </td>
- </tr>
- <tr>
-  <td>&nbsp;</td>
-  <td colspan="3"><em>
-   <dtml-if name="Description"><dtml-var name="Description"
-   missing="(No description)" size="200" html_quote>
-   <dtml-else>(No description)</dtml-if></em></td>
- </tr>
- <dtml-if sequence-end>
-  </table>
- </dtml-if>
- </dtml-let>
-<dtml-else>
- <p> There are no items matching your specified criteria.  </p>
-</dtml-in>
-
-<dtml-in results size="25" start="batch_start" next>
- <dtml-let url=URL
-           sqry=sequence-query
-           next=next-sequence-start-number
-           nextSize=next-sequence-size
-           nextURL="'%s%sbatch_start=%s' % (url,sqry,next)"
- >
-  <p> <a href="&dtml-nextURL;"> Next &dtml-nextSize; items </a> </p>
- </dtml-let>
-</dtml-in>
-
-</dtml-let>
-
-</div>
-
-<dtml-var standard_html_footer>
diff --git a/product/MMMShop/skins/storever/serviceproduct_edit_form.dtml b/product/MMMShop/skins/storever/serviceproduct_edit_form.dtml
deleted file mode 100755
index e5dab7b913..0000000000
--- a/product/MMMShop/skins/storever/serviceproduct_edit_form.dtml
+++ /dev/null
@@ -1,196 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-call "REQUEST.set('local_currency_name', getLocalCurrencyName())">
-
-<TABLE BORDER="0" WIDTH="100%" CLASS="FormLayout">
-<FORM ACTION="update_computer_product" METHOD="POST" ENCTYPE="multipart/form-data">
- <TR>
-  <TH VALIGN="top">Navn:</TD>
-  <TD><INPUT TYPE="text" NAME="prod_name" VALUE="&dtml-title;">
-  <DL CLASS="FieldHelp">
-   <DD>The name of the product.</DD>i
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Short Description:</TD>
-  <TD><TEXTAREA NAME="description" ROWS="5" COLS="30">&dtml-description;</TEXTAREA>
-  <DL CLASS="FieldHelp">
-   <DD>The description of the product.</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Long Description:</TD>
-  <TD><textarea name="text:text"
-             rows="20" cols="80"><dtml-var text html_quote></textarea>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Category:</TD>
-  <TD>
-  <SELECT NAME="prod_category:list" SIZE="3" MULTIPLE>
-<dtml-let contentSubject=Subject
-          allowedSubjects="portal_metadata.listAllowedSubjects(this())">
- <dtml-in allowedSubjects>
-  <dtml-let item=sequence-item
-            sel="item in contentSubject and 'selected' or ''">
-   <OPTION VALUE="&dtml-sequence-item;" &dtml-sel;>&dtml-sequence-item;</OPTION>
-  </dtml-let>
- </dtml-in>
-</dtml-let>
-  </SELECT>
-  <DL CLASS="FieldHelp">
-   <DD>You should place your procu in one - or more - category, so visitors on the site can find your product easier.
-       Pick the category that fits your product best.</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Price:</TD>
-  <TD><INPUT TYPE="text" NAME="price:float" VALUE="&dtml-price;">
-  <DL CLASS="FieldHelp">
-   <DD>The price of your product (in <dtml-var "REQUEST['local_currency_name']">).</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Days to deliver:</TD>
-  <TD><INPUT TYPE="text" NAME="delivery_days:int" VALUE="&dtml-delivery_days;">
-  <DL CLASS="FieldHelp">
-   <DD>How many days will it take to deliver your product (as precise as possible).</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Thumbnail picture:</TD>
-  <TD><INPUT TYPE="file" NAME="thumbnail" VALUE=""><BR>
-  &dtml-thumbnail;
-  <DL CLASS="FieldHelp">
-   <DD>A little picturre of the product that can be shown in the product catalog.</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Large picture:</TD>
-  <TD><INPUT TYPE="file" NAME="image" VALUE=""><BR>
-  &dtml-image;
-  <DL CLASS="FieldHelp">
-   <DD>Picture of your product that will be used at the product page.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Processor:</TD>
-  <TD>
-  <dtml-in "getProcessorSizes()">
-  <INPUT TYPE="text" NAME="procsize_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="procprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getProcessorPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="procsize_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="procprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of processor options.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Memory:</TD>
-  <TD>
-  <dtml-in "getMemorySizes()">
-  <INPUT TYPE="text" NAME="memsize_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="memprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getMemoryPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="memsize_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="memprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of memory options.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Disk:</TD>
-  <TD>
-  <dtml-in "getDiskSizes()">
-  <INPUT TYPE="text" NAME="disksize_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="diskprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getDiskPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="disksize_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="diskprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of disk options.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Options:</TD>
-  <TD>
-  <dtml-in "getOptions()">
-  <INPUT TYPE="text" NAME="option_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="optionprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getOptionPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="option_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="optionprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of service options.</DD>
-  </DL>
-  </TD>
- </TR>
-
-
-
-
-
-
-<!-- test to see if NON option should be checked -->
- <dtml-if "this().isCredit">
-  <dtml-if "this().isCredit == 1">
-   <dtml-call "REQUEST.set('credit_sel', '')">
-  <dtml-else>
-   <dtml-call "REQUEST.set('credit_sel', 'CHECKED')">
-  </dtml-if>
- <dtml-else>
-  <dtml-call "REQUEST.set('credit_sel', 'CHECKED')">
- </dtml-if>
-
-
-
-<TR>
-  <TH VALIGN="top">Is this a credit product?</TD>
-  <TD><INPUT TYPE="radio" NAME="isCredit" VALUE="1"
-  <dtml-if "this().isCredit"><dtml-if "this().isCredit == 1">CHECKED</dtml-if></dtml-if>
-  >Yes&nbsp;
-  <INPUT TYPE="radio" NAME="isCredit" VALUE="0" &dtml-credit_sel;>No
-  <DL CLASS="FieldHelp">
-   <DD>If your product is a credits product, the visitors can buy minutes to be used in pay-per-view cinemas.</DD>
-  </DL>
-  </TD>
- </TR>
-
-
-
-
-<dtml-if "this().isCredit">
- <TR>
-  <TH VALIGN="top">Credits amount:</TD>
-  <TD><INPUT TYPE="text" NAME="credits:int" VALUE="&dtml-credits;">
-  <DL CLASS="FieldHelp">
-   <DD>How many credits the users get.</DD>
-  </DL>
-  </TD>
- </TR>
-<dtml-else>
- <INPUT TYPE="hidden" NAME="credits:int" VALUE="&dtml-credits;">
-</dtml-if>
-
- <TR>
-  <TD COLSPAN="2"><INPUT TYPE="submit" VALUE=" Save "></TD>
- </TR>
-</FORM>
-</TABLE>
-
-<dtml-var standard_html_footer>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/serviceproduct_view.dtml b/product/MMMShop/skins/storever/serviceproduct_view.dtml
deleted file mode 100755
index 508e1f2775..0000000000
--- a/product/MMMShop/skins/storever/serviceproduct_view.dtml
+++ /dev/null
@@ -1,28 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-in "portal_catalog.searchResults(meta_type='MMM Shop Currency Manager')">
- <dtml-let path="portal_catalog.getpath(data_record_id_)">
-  <dtml-call "REQUEST.set('currency_manager', restrictedTraverse(path))">
- </dtml-let>
-</dtml-in>
-
- <dtml-if "portal_membership.isAnonymousUser()">
-   <dtml-call "REQUEST.set('member_currency', 'EUR')">
- <dtml-else>
-  <dtml-let member="portal_membership.getAuthenticatedMember()">
-   <dtml-call "REQUEST.set('member_currency', member.pref_currency)">
-  </dtml-let>
- </dtml-if>
-
-<div CLASS="Desktop">
-<TABLE BORDER="0" WIDTH="100%" cellspacing="3" cellpadding="3">
-<TR>
-  <TD ALIGN="LEFT" VALIGN="top" width="400">
-
-    <dtml-var computerproduct_presentation>
- 
-  </TD>
- </TR>
-</TABLE>
-</div>
-<dtml-var standard_html_footer>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/setCurrencyParams.py b/product/MMMShop/skins/storever/setCurrencyParams.py
deleted file mode 100755
index 306199904c..0000000000
--- a/product/MMMShop/skins/storever/setCurrencyParams.py
+++ /dev/null
@@ -1,18 +0,0 @@
-## Script (Python) "setCurrencyParams"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=
-##title=Set the currency parameters for a specific member
-##
-currency_manager = context.getCurrencyManager()
-member_currency = context.getMemberObj().pref_currency
-
-for currency in currency_manager.listCurrencies():
-   if currency.getCode() == member_currency:
-      context.REQUEST.set('exchange_rate', currency.getRate())
-      context.REQUEST.set('money_unit', currency.getMonetaryUnit())
-      context.REQUEST.set('prod_unit', currency.getMonetaryUnit())
-      context.REQUEST.set('cur_code', currency.getCode())
diff --git a/product/MMMShop/skins/storever/setPersonalDetailsParams.py b/product/MMMShop/skins/storever/setPersonalDetailsParams.py
deleted file mode 100755
index 7e2c4a74e3..0000000000
--- a/product/MMMShop/skins/storever/setPersonalDetailsParams.py
+++ /dev/null
@@ -1,16 +0,0 @@
-## Script(Python) "setPersonalDetailsParams"
-##parameters=
-##title=Set the personal details params for use in the checkout page
-
-shopping_cart = context.getShoppingCart()
-pdetails = shopping_cart.getPersonalDetails()
-
-context.REQUEST.set('cust_name', pdetails[0])
-context.REQUEST.set('cust_address', pdetails[1])
-context.REQUEST.set('cust_zipcode', pdetails[2])
-context.REQUEST.set('cust_city', pdetails[3])
-context.REQUEST.set('cust_country', pdetails[4])
-context.REQUEST.set('cust_phone', pdetails[5])
-context.REQUEST.set('cust_email', pdetails[6])
-context.REQUEST.set('cust_vat', '')
-context.REQUEST.set('cust_organisation', pdetails[7])
diff --git a/product/MMMShop/skins/storever/shoporder_print.dtml b/product/MMMShop/skins/storever/shoporder_print.dtml
deleted file mode 100755
index 25e46f983c..0000000000
--- a/product/MMMShop/skins/storever/shoporder_print.dtml
+++ /dev/null
@@ -1,191 +0,0 @@
-<dtml-if display_in_payment>
-<dtml-else>
- <dtml-var printable_html_header>
-</dtml-if>
-
-<dtml-call "setCurrencyParams()">
-<dtml-call "REQUEST.set('shopmanager', getShopManager()[1])">
-
-<div class="Desktop">
-<TABLE BORDER="0" WIDTH="100%">
-
- <TR Class="NewsTitle">
-  <TD colspan="4" Class="NewsTitle"><dtml-gettext>My Order</dtml-gettext></TD>
- </TR>
-<dtml-if disp_msg>
- <TR>
-  <TD colspan="4">&dtml-disp_msg;</TD>
- </TR>
-<dtml-else>
-<dtml-call "REQUEST.set('prod_update_url', REQUEST['URL'] + '?display_orderitem=true&itemobj=')">
- <TR>
-  <TD width="97%" nowrap><B><dtml-gettext>Product</dtml-gettext></B></TD>
-  <TD width="1%" nowrap><B><dtml-gettext>Quantity</dtml-gettext></B>&nbsp;</TD>
-  <TD width="1%" nowrap><B><dtml-gettext>Price / Piece</dtml-gettext></B>&nbsp;</TD>
-  <TD width="1%" nowrap><B><dtml-gettext>Total</dtml-gettext></B></TD>
- </TR>
-<dtml-call "REQUEST.set('all_price', 0)">
-<dtml-in "listProducts()">
- <dtml-let item="_.getitem('sequence-item')"
-           item_id=sequence-index
-           product="item.getProduct()"
-           quantity="item.getQuantity()"
-           variant="item.getVariant()"
-           prod_obj="restrictedTraverse(product)"
-           prod_price="item.getPrice()"
-           prod_variant_line="prod_obj.shortVariant(variant)"
-           price="_.float(prod_price) / _.float(REQUEST['exchange_rate'])"
-           total_price="_.int(quantity) * _.float(price)">
- <TR>
-  <TD width="97%" nowrap><A HREF="&dtml-prod_update_url;&dtml-item_id;"><dtml-var "prod_obj.title"></A> <font size="-2"><dtml-var "prod_variant_line"></font></TD>
-  <TD width="1%" nowrap align="center">&dtml-quantity;</TD>
-  <TD width="1%" nowrap align="right">&dtml-money_unit; <dtml-var price fmt="%0.2f">&nbsp;&nbsp;</TD>
-  <TD width="1%" nowrap align="right">&dtml-money_unit; <dtml-var total_price fmt="%0.2f"></TD>
- </TR>
- </dtml-let>
-</dtml-in>
-<dtml-call "REQUEST.set('all_price', getTotalPrice())">
-<dtml-if "_.float(all_price) == 0">
- <TR>
-  <TD COLSPAN="4"><dtml-gettext>You have no items in this order</dtml-gettext></TD>
- </TR>
-<dtml-else>
- <TR>
-  <TD><dtml-gettext>Sending fee:</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var send_fee fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- <dtml-if "exchange_fee == 0">
- <dtml-else>
- <TR>
-  <TD><dtml-gettext>Exchange fee:</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var exchange_fee fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- </dtml-if>
- <TR>
-  <TD COLSPAN="4"><HR></TD>
- </TR>
- <TR>
-  <TD><b><dtml-gettext>Total amount (excl. VAT):</dtml-gettext></b></TD>
-  <TD COLSPAN="3" ALIGN="right"><b><dtml-var all_price fmt="%0.2f">&nbsp;&dtml-money_unit;</b></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>VAT (<dtml-var expr="vat * 100.0" fmt="%0.2f">%) (for EU citizens and French companies only):</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var expr="all_price * vat" fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- <TR>
-  <TD><dtml-gettext><b>Total amount (incl. VAT):</b></dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><b><dtml-var expr="all_price + all_price * vat" fmt="%0.2f">&nbsp;&dtml-money_unit;</b></TD>
- </TR>
-
-</dtml-if>
-</dtml-if>
- <TR>
-  <TD colspan="4"></TD>
- </TR>
-</TABLE>
-
-<h3><dtml-gettext>Custommer Information</dtml-gettext></h3>
-<table>
- <TR>
-  <TD><B><dtml-gettext>Name:</dtml-gettext></b></TD>
-  <TD><dtml-var name></TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Organisation:</dtml-gettext></b></TD>
-  <TD><dtml-var organisation></TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Address:</dtml-gettext></B></TD>
-  <TD><dtml-var address></TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Zip code:</dtml-gettext></B></TD>
-  <TD><dtml-var zipcode></TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>City:</dtml-gettext></B></TD>
-  <TD>&dtml-city;</TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Country:</dtml-gettext></B></TD>
-  <TD>&dtml-country;</TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Telephone:</dtml-gettext></B></TD>
-  <TD>&dtml-phone;</TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Email:</dtml-gettext></B></TD>
-  <TD>&dtml-email;</TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>EU VAT No:</dtml-gettext></B></TD>
-  <TD>&dtml-euvat;</TD>
- </TR>
-</table>
-
-<dtml-if display_in_payment>
-<dtml-else>
-
-  <dtml-let  actions="portal_actions.listFilteredActionsFor(this())"
-   object_actions="actions['workflow']" > 
-    <dtml-let review_state="portal_workflow.getInfoFor(this(), 'order_state', '')">
-  <dtml-if review_state>
-  <h3><dtml-gettext>Order Status:</dtml-gettext> <dtml-var "gettext(review_state)"></h3>
-
-  <p>
-    <dtml-gettext>Available Order Actions:</dtml-gettext> <dtml-in object_actions mapping>
-    <a href="&dtml-url;"><dtml-var "gettext(name)"></a>&nbsp;
-     <dtml-else><dtml-gettext>None</dtml-gettext></dtml-in> </i></p> 
-  </dtml-if>
-  </dtml-let>
-  </dtml-let>
-</dtml-if>
-
-
-<dtml-if "REQUEST.has_key('display_orderitem')">
-<TABLE BORDER="0" WIDTH="100%">
-<dtml-if "REQUEST.has_key('itemobj')">
- <dtml-let order_obj="getProduct(_.int(REQUEST['itemobj']))"
-           product="order_obj.getProduct()"
-           quantity="order_obj.getQuantity()"
-           variant="order_obj.getVariant()"
-           prod_obj="restrictedTraverse(product)"
-           prod_name="prod_obj.title"
-           prod_desc="prod_obj.description"
-           prod_image="prod_obj.image"
-           prod_price="order_obj.getPrice()"
-           price="_.float(prod_price) / _.float(REQUEST['exchange_rate'])"
-           total_price="_.int(quantity) * _.float(price)">
- <TR>
-  <TD><h2><dtml-gettext>Details of Order Item:</dtml-gettext> &dtml-prod_name;</h2></TD><TD rowspan="5">
-     <dtml-if "not prod_image == ''"><IMG SRC="&dtml-prod_image;" BORDER="0"></dtml-if></TD>
- </TR>
- <TR>
-  <TD><I>&dtml-prod_desc;</I></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Unit Price for this congiguration:</dtml-gettext> &dtml-prod_unit; <dtml-var price fmt="%0.2f"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Quantity:</dtml-gettext> &dtml-quantity;</TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Total price:</dtml-gettext> &dtml-prod_unit; <dtml-var total_price fmt="%0.2f"></TD>
- </TR>
- <TR>
-  <TD colspan="2">
-  <h2><dtml-gettext>Configuration options</dtml-gettext></h2>
-  <dtml-with prod_obj><dtml-var computerproduct_variant></dtml-with></TD>
- </TR>
- </dtml-let>
-</dtml-if>
-</TABLE>
-</dtml-if>
-</div>
-
-
-<dtml-if display_in_payment>
-<dtml-else>
-  <dtml-var printable_html_footer>
-</dtml-if>
diff --git a/product/MMMShop/skins/storever/shoporder_view.dtml b/product/MMMShop/skins/storever/shoporder_view.dtml
deleted file mode 100755
index a81beca18d..0000000000
--- a/product/MMMShop/skins/storever/shoporder_view.dtml
+++ /dev/null
@@ -1,192 +0,0 @@
-<dtml-if display_in_payment>
-<dtml-else>
- <dtml-var standard_html_header>
-</dtml-if>
-
-<dtml-call "setCurrencyParams()">
-<dtml-call "REQUEST.set('shopmanager', getShopManager()[1])">
-
-<div class="Desktop">
-<TABLE BORDER="0" WIDTH="100%">
-
- <TR Class="NewsTitle">
-  <TD colspan="4" Class="NewsTitle"><dtml-gettext>My Order</dtml-gettext></TD>
- </TR>
-<dtml-if disp_msg>
- <TR>
-  <TD colspan="4">&dtml-disp_msg;</TD>
- </TR>
-<dtml-else>
-<dtml-call "REQUEST.set('prod_update_url', REQUEST['URL'] + '?display_orderitem=true&itemobj=')">
- <TR>
-  <TD width="97%" nowrap><B><dtml-gettext>Product</dtml-gettext></B></TD>
-  <TD width="1%" nowrap><B><dtml-gettext>Quantity</dtml-gettext></B>&nbsp;</TD>
-  <TD width="1%" nowrap><B><dtml-gettext>Price / Piece</dtml-gettext></B>&nbsp;</TD>
-  <TD width="1%" nowrap><B><dtml-gettext>Total</dtml-gettext></B></TD>
- </TR>
-<dtml-call "REQUEST.set('all_price', 0)">
-<dtml-in "listProducts()">
- <dtml-let item="_.getitem('sequence-item')"
-           item_id=sequence-index
-           product="item.getProduct()"
-           quantity="item.getQuantity()"
-           variant="item.getVariant()"
-           prod_obj="restrictedTraverse(product)"
-           prod_price="item.getPrice()"
-           prod_variant_line="prod_obj.shortVariant(variant)"
-           price="_.float(prod_price) / _.float(REQUEST['exchange_rate'])"
-           total_price="_.int(quantity) * _.float(price)">
- <TR>
-  <TD width="97%" nowrap><A HREF="&dtml-prod_update_url;&dtml-item_id;"><dtml-var "prod_obj.title"></A> <font size="-2"><dtml-var "prod_variant_line"></font></TD>
-  <TD width="1%" nowrap align="center">&dtml-quantity;</TD>
-  <TD width="1%" nowrap align="right">&dtml-money_unit; <dtml-var price fmt="%0.2f">&nbsp;&nbsp;</TD>
-  <TD width="1%" nowrap align="right">&dtml-money_unit; <dtml-var total_price fmt="%0.2f"></TD>
- </TR>
- </dtml-let>
-</dtml-in>
-<dtml-call "REQUEST.set('all_price', getTotalPrice())">
-<dtml-if "_.float(all_price) == 0">
- <TR>
-  <TD COLSPAN="4"><dtml-gettext>You have no items in this order</dtml-gettext></TD>
- </TR>
-<dtml-else>
- <TR>
-  <TD><dtml-gettext>Sending fee:</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var send_fee fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- <dtml-if "exchange_fee == 0">
- <dtml-else>
- <TR>
-  <TD><dtml-gettext>Exchange fee:</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var exchange_fee fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- </dtml-if>
- <TR>
-  <TD COLSPAN="4"><HR></TD>
- </TR>
- <TR>
-  <TD><b><dtml-gettext>Total amount (excl. VAT):</dtml-gettext></b></TD>
-  <TD COLSPAN="3" ALIGN="right"><b><dtml-var all_price fmt="%0.2f">&nbsp;&dtml-money_unit;</b></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>VAT (<dtml-var expr="vat * 100.0" fmt="%0.2f">%) (for EU citizens and French companies only):</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var expr="all_price * vat" fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- <TR>
-  <TD><dtml-gettext><b>Total amount (incl. VAT):</b></dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><b><dtml-var expr="all_price + all_price * vat" fmt="%0.2f">&nbsp;&dtml-money_unit;</b></TD>
- </TR>
-
-</dtml-if>
-</dtml-if>
- <TR>
-  <TD colspan="4"></TD>
- </TR>
-</TABLE>
-
-<h3><dtml-gettext>Custommer Information</dtml-gettext></h3>
-<table>
- <TR>
-  <TD><B><dtml-gettext>Name:</dtml-gettext></b></TD>
-  <TD><dtml-var name></TD>
- </TR>
- <TR>
- <TR>
-  <TD><B><dtml-gettext>Organisation:</dtml-gettext></b></TD>
-  <TD><dtml-var organisation></TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Address:</dtml-gettext></B></TD>
-  <TD><dtml-var address></TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Zip code:</dtml-gettext></B></TD>
-  <TD><dtml-var zipcode></TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>City:</dtml-gettext></B></TD>
-  <TD>&dtml-city;</TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Country:</dtml-gettext></B></TD>
-  <TD>&dtml-country;</TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Telephone:</dtml-gettext></B></TD>
-  <TD>&dtml-phone;</TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>Email:</dtml-gettext></B></TD>
-  <TD>&dtml-email;</TD>
- </TR>
- <TR>
-  <TD><B><dtml-gettext>EU VAT No:</dtml-gettext></B></TD>
-  <TD>&dtml-euvat;</TD>
- </TR>
-</table>
-
-<dtml-if display_in_payment>
-<dtml-else>
-
-  <dtml-let  actions="portal_actions.listFilteredActionsFor(this())"
-   object_actions="actions['workflow']" > 
-    <dtml-let review_state="portal_workflow.getInfoFor(this(), 'order_state', '')">
-  <dtml-if review_state>
-  <h3><dtml-gettext>Order Status:</dtml-gettext> <dtml-var "gettext(review_state)"></h3>
-
-  <p>
-    <dtml-gettext>Available Order Actions:</dtml-gettext> <dtml-in object_actions mapping>
-    <a href="&dtml-url;"><dtml-var "gettext(name)"></a>&nbsp;
-     <dtml-else><dtml-gettext>None</dtml-gettext></dtml-in> </i></p> 
-  </dtml-if>
-  </dtml-let>
-  </dtml-let>
-</dtml-if>
-
-
-<dtml-if "REQUEST.has_key('display_orderitem')">
-<TABLE BORDER="0" WIDTH="100%">
-<dtml-if "REQUEST.has_key('itemobj')">
- <dtml-let order_obj="getProduct(_.int(REQUEST['itemobj']))"
-           product="order_obj.getProduct()"
-           quantity="order_obj.getQuantity()"
-           variant="order_obj.getVariant()"
-           prod_obj="restrictedTraverse(product)"
-           prod_name="prod_obj.title"
-           prod_desc="prod_obj.description"
-           prod_image="prod_obj.image"
-           prod_price="order_obj.getPrice()"
-           price="_.float(prod_price) / _.float(REQUEST['exchange_rate'])"
-           total_price="_.int(quantity) * _.float(price)">
- <TR>
-  <TD><h2><dtml-gettext>Details of Order Item:</dtml-gettext> &dtml-prod_name;</h2></TD><TD rowspan="5">
-     <dtml-if "not prod_image == ''"><IMG SRC="&dtml-prod_image;" BORDER="0"></dtml-if></TD>
- </TR>
- <TR>
-  <TD><I>&dtml-prod_desc;</I></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Unit Price for this congiguration:</dtml-gettext> &dtml-prod_unit; <dtml-var price fmt="%0.2f"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Quantity:</dtml-gettext> &dtml-quantity;</TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Total price:</dtml-gettext> &dtml-prod_unit; <dtml-var total_price fmt="%0.2f"></TD>
- </TR>
- <TR>
-  <TD colspan="2">
-  <h2><dtml-gettext>Configuration options</dtml-gettext></h2>
-  <dtml-with prod_obj><dtml-var computerproduct_variant></dtml-with></TD>
- </TR>
- </dtml-let>
-</dtml-if>
-</TABLE>
-</dtml-if>
-</div>
-
-
-<dtml-if display_in_payment>
-<dtml-else>
-  <dtml-var standard_html_footer>
-</dtml-if>
diff --git a/product/MMMShop/skins/storever/shoppingcart_view.dtml b/product/MMMShop/skins/storever/shoppingcart_view.dtml
deleted file mode 100755
index 2b8f4219da..0000000000
--- a/product/MMMShop/skins/storever/shoppingcart_view.dtml
+++ /dev/null
@@ -1,196 +0,0 @@
-<dtml-let lang="gettext.get_selected_language()">
-<dtml-if display_in_product>
-<dtml-else>
- <dtml-var standard_html_header>
- <dtml-call "REQUEST.set('currency_manager', getCurrencyManager())">
- <dtml-call "REQUEST.set('member_currency', getMemberObj().pref_currency)">
-
-</dtml-if>
-
-<dtml-call "setCurrencyParams()">
-<dtml-call "REQUEST.set('shopmanager', getShopManager()[1])">
-
-<dtml-let user="portal_membership.getAuthenticatedMember().getUserName()"
-   mem_folder="portal_membership.getHomeFolder(user)">
- <dtml-in "mem_folder.objectValues('MMM Shop Shopping Cart')">
-  <dtml-let cartid="getId()">
-   <dtml-call "REQUEST.set('cartobj', restrictedTraverse(cartid))">
-  </dtml-let>
- <dtml-else>
-  <dtml-call "REQUEST.set('disp_msg', 'You have no items in the cart')">
- </dtml-in>
- <dtml-in "mem_folder.objectValues('MMM Shop Order')">
- <dtml-else>
-  <dtml-call "REQUEST.set('order_msg', 'You have no orders yet')">
- </dtml-in>
-</dtml-let>
-
-<div class="Desktop">
-<TABLE BORDER="0" WIDTH="100%">
-
- <TR Class="NewsTitle">
-  <TD colspan="4" Class="NewsTitle"><dtml-gettext>My Shopping Cart</dtml-gettext></TD>
- </TR>
-<dtml-if disp_msg>
- <TR>
-  <TD colspan="4"><dtml "gettext(disp_msg)"></TD>
- </TR>
-</dtml-if>
-<dtml-call "REQUEST.set('prod_update_url', REQUEST['URL'] + '?display_cartitem=true&itemobj=')">
-<FORM ACTION="<dtml-var "cartobj.local_absolute_url()">/update_cart">
- <TR>
-  <TD width="97%" nowrap><B><dtml-gettext>Product</dtml-gettext></B></TD>
-  <TD width="1%" nowrap><B><dtml-gettext>Quantity</dtml-gettext></B>&nbsp;</TD>
-  <TD width="1%" nowrap><B><dtml-gettext>Price / Piece</dtml-gettext></B>&nbsp;</TD>
-  <TD width="1%" nowrap><B><dtml-gettext>Total</dtml-gettext></B></TD>
- </TR>
-<dtml-call "REQUEST.set('all_price', 0)">
-<dtml-in "cartobj.listProducts()">
- <dtml-let item="_.getitem('sequence-item')"
-           item_id=sequence-index
-           product="item.getProduct()"
-           quantity="item.getQuantity()"
-           variant="item.getVariant()"
-           prod_obj="restrictedTraverse(product)"
-           prod_price="prod_obj.computePrice(variant)"
-           prod_variant_line="prod_obj.shortVariant(variant)"
-           price="_.float(prod_price) / _.float(REQUEST['exchange_rate'])"
-           total_price="_.int(quantity) * _.float(price)">
- <TR>
-  <TD width="97%" nowrap>
-    <dtml-if display_in_product>
-       <dtml-var "prod_obj.title">
-    <dtml-else>
-       <A HREF="&dtml-prod_update_url;&dtml-item_id;"><dtml-var "prod_obj.title"></A>
-    </dtml-if>
-  &nbsp;<font size="-2"><dtml-var "prod_variant_line"></font></TD>
-  <TD width="1%" nowrap align="center">
-    <dtml-if display_in_product>
-      &dtml-quantity;
-    <dtml-else>
-      <A HREF="&dtml-prod_update_url;&dtml-item_id;">&dtml-quantity;</A>
-    </dtml-if>
-  </TD>
-  <TD width="1%" nowrap align="right"><dtml-var price fmt="%0.2f">&nbsp;&dtml-money_unit;&nbsp;</TD>
-  <TD width="1%" nowrap align="right"><dtml-var total_price fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- </dtml-let>
-</dtml-in>
-<dtml-call "REQUEST.set('all_price', getTotalPrice())">
-<dtml-if "_.float(all_price) == 0">
- <TR>
-  <TD COLSPAN="4"><dtml-gettext>You have no items in you shopping cart</dtml-gettext></TD>
- </TR>
-<dtml-else>
- <dtml-if "REQUEST['cur_code'] == shopmanager.local_currency">
-  <dtml-call "REQUEST.set('send_fee', _.float(shopmanager.send_fee_local))">
-  <dtml-call "REQUEST.set('exchange_fee', 0)">
- <dtml-else>
-  <dtml-let new_send_fee="_.float(shopmanager.send_fee_world) / _.float(REQUEST['exchange_rate'])"
-     new_exchange_fee="_.float(shopmanager.exchange_fee) / _.float(REQUEST['exchange_rate'])">
-   <dtml-call "REQUEST.set('send_fee', new_send_fee)">
-   <dtml-call "REQUEST.set('exchange_fee', new_exchange_fee)">
-  </dtml-let>
- </dtml-if>
- <TR>
-  <TD><dtml-gettext>Sending fee:</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var send_fee fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- <dtml-if "REQUEST['exchange_fee'] == 0">
- <dtml-else>
- <TR>
-  <TD><dtml-gettext>Exchange fee:</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var exchange_fee fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- </dtml-if>
- <TR>
-  <TD COLSPAN="4"><HR></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Total amount to pay (excl. VAT):</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var all_price fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>VAT (<dtml-var expr="portal_properties.vat * 100.0" fmt="%0.2f">%):</dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><dtml-var expr="all_price * portal_properties.vat" fmt="%0.2f">&nbsp;&dtml-money_unit;</TD>
- </TR>
- <TR>
-  <TD><dtml-gettext><b>Total amount to pay (incl. VAT):</b></dtml-gettext></TD>
-  <TD COLSPAN="3" ALIGN="right"><b><dtml-var expr="all_price + all_price * portal_properties.vat" fmt="%0.2f">&nbsp;&dtml-money_unit;</b></TD>
- </TR>
- <TR>
-  <TD HEIGHT="5" COLSPAN="4">&nbsp;</TD>
- </TR>
- <dtml-if display_in_product>
- <dtml-else>
- <TR>
-  <TD COLSPAN="4" align="right">
-    <INPUT TYPE="submit" NAME="emptyCart" VALUE=" <dtml-gettext>Empty the cart</dtml-gettext> ">
-    <INPUT TYPE="submit" NAME="checkOut" VALUE=" <dtml-gettext>Check out</dtml-gettext> ">
-   </TD>
- </TR>
- </dtml-if
-</dtml-if>
-</FORM>
-</dtml-if>
- <TR>
-  <TD colspan="3"></TD>
- </TR>
-</TABLE>
-
-<dtml-if "REQUEST.has_key('display_cartitem')">
-<TABLE BORDER="0" WIDTH="100%">
-<FORM ACTION="<dtml-var "cartobj.local_absolute_url()">/update_cartitem">
-<dtml-if "REQUEST.has_key('itemobj')">
- <dtml-let cart_obj="cartobj.getProduct(_.int(REQUEST['itemobj']))"
-           product="cart_obj.getProduct()"
-           quantity="cart_obj.getQuantity()"
-           variant="cart_obj.getVariant()"
-           prod_obj="restrictedTraverse(product)"
-           prod_name="prod_obj.title"
-           prod_desc="prod_obj.description"
-           prod_image="prod_obj.image"
-           prod_price="prod_obj.computePrice(variant)"
-           price="_.float(prod_price) / _.float(REQUEST['exchange_rate'])"
-           total_price="_.int(quantity) * _.float(price)">
-  <dtml-if "not prod_image == ''">
-  </dtml-if>
- <TR>
-  <TD><h2>&dtml-prod_name;</h2></TD><TD rowspan="6"><IMG SRC="&dtml-prod_image;" BORDER="0"></TD>
- </TR>
- <TR>
-  <TD><I>&dtml-prod_desc;</I></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Unit Price for this configuration:</dtml-gettext> &dtml-prod_unit; <dtml-var price fmt="%0.2f"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Quantity:</dtml-gettext><INPUT TYPE="text" NAME="new_quantity" VALUE="&dtml-quantity;"></TD>
- </TR>
- <TR>
-  <TD><dtml-gettext>Total price:</dtml-gettext> &dtml-prod_unit; <dtml-var total_price fmt="%0.2f"></TD>
- </TR>
- <TR>
-  <INPUT TYPE="hidden" NAME="item_cartid" VALUE="&dtml-itemobj;">
-  <INPUT TYPE="hidden" NAME="came_from_url" VALUE="<dtml-var "REQUEST['URL']">">
-  <TD align="center"><INPUT TYPE="submit" NAME="delItem" VALUE=" <dtml-gettext>Delete item from cart</dtml-gettext> ">&nbsp;
-  <INPUT TYPE="submit" NAME="updateItem" VALUE=" <dtml-gettext>Update quantity</dtml-gettext> "></TD>
- </TR>
- <TR>
-  <TD colspan="2">
-  <h2><dtml-gettext>Your configuration options</dtml-gettext></h2>
-  <dtml-with prod_obj><dtml-var computerproduct_variant></dtml-with></TD>
- </TR>
- </dtml-let>
-</dtml-if>
- <TR>
-  <TD>
-</FORM>
-</TABLE>
-</dtml-if>
-</div>
-<dtml-if display_in_product>
-<dtml-else>
- <dtml-var standard_html_footer>
-</dtml-if>
-</dtml-let>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/shopproduct_edit_form.dtml b/product/MMMShop/skins/storever/shopproduct_edit_form.dtml
deleted file mode 100755
index 0ced35cf4f..0000000000
--- a/product/MMMShop/skins/storever/shopproduct_edit_form.dtml
+++ /dev/null
@@ -1,206 +0,0 @@
-<dtml-var standard_html_header>
-
-<dtml-call "REQUEST.set('local_currency_name', getLocalCurrencyName())">
-
-<TABLE BORDER="0" WIDTH="100%" CLASS="FormLayout">
-<FORM ACTION="update_computer_product" METHOD="POST" ENCTYPE="multipart/form-data">
- <TR>
-  <TH VALIGN="top">Navn:</TD>
-  <TD><INPUT TYPE="text" NAME="prod_name" VALUE="&dtml-title;">
-  <DL CLASS="FieldHelp">
-   <DD>The name of the product.</DD>i
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Short Description:</TD>
-  <TD><TEXTAREA NAME="description" ROWS="5" COLS="30">&dtml-description;</TEXTAREA>
-  <DL CLASS="FieldHelp">
-   <DD>The description of the product.</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Long Description:</TD>
-  <TD><textarea name="text:text"
-             rows="20" cols="80"><dtml-var text html_quote></textarea>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Category:</TD>
-  <TD>
-  <SELECT NAME="prod_category:list" SIZE="3" MULTIPLE>
-<dtml-let contentSubject=Subject
-          allowedSubjects="portal_metadata.listAllowedSubjects(this())">
- <dtml-in allowedSubjects>
-  <dtml-let item=sequence-item
-            sel="item in contentSubject and 'selected' or ''">
-   <OPTION VALUE="&dtml-sequence-item;" &dtml-sel;>&dtml-sequence-item;</OPTION>
-  </dtml-let>
- </dtml-in>
-</dtml-let>
-  </SELECT>
-  <DL CLASS="FieldHelp">
-   <DD>You should place your procu in one - or more - category, so visitors on the site can find your product easier.
-       Pick the category that fits your product best.</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Price:</TD>
-  <TD><INPUT TYPE="text" NAME="price:float" VALUE="&dtml-price;">
-  <DL CLASS="FieldHelp">
-   <DD>The price of your product (in <dtml-var "REQUEST['local_currency_name']">).</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Days to deliver:</TD>
-  <TD><INPUT TYPE="text" NAME="delivery_days:int" VALUE="&dtml-delivery_days;">
-  <DL CLASS="FieldHelp">
-   <DD>How many days will it take to deliver your product (as precise as possible).</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Thumbnail picture:</TD>
-  <TD><INPUT TYPE="file" NAME="thumbnail" VALUE=""><BR>
-  &dtml-thumbnail;
-  <DL CLASS="FieldHelp">
-   <DD>A little picturre of the product that can be shown in the product catalog.</DD>
-  </DL>
-  </TD>
- </TR>
- <TR>
-  <TH VALIGN="top">Large picture:</TD>
-  <TD><INPUT TYPE="file" NAME="image" VALUE=""><BR>
-  &dtml-image;
-  <DL CLASS="FieldHelp">
-   <DD>Picture of your product that will be used at the product page.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-   <TH VALIGN="top">Product Path:</TD>
-   <TD><INPUT TYPE="text" NAME="product_path" VALUE="<dtml-if product_path><dtml-var product_path></dtml-if>"><BR>
-     <DL CLASS="FieldHelp">
-      <DD>Product path.</DD>
-     </DL>
-    </TD>
- </TR>
-
-
- <TR>
-  <TH VALIGN="top">Processor:</TD>
-  <TD>
-  <dtml-in "getProcessorSizes()">
-  <INPUT TYPE="text" NAME="procsize_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="procprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getProcessorPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="procsize_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="procprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of processor options.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Memory:</TD>
-  <TD>
-  <dtml-in "getMemorySizes()">
-  <INPUT TYPE="text" NAME="memsize_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="memprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getMemoryPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="memsize_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="memprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of memory options.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Disk:</TD>
-  <TD>
-  <dtml-in "getDiskSizes()">
-  <INPUT TYPE="text" NAME="disksize_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="diskprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getDiskPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="disksize_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="diskprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of disk options.</DD>
-  </DL>
-  </TD>
- </TR>
-
- <TR>
-  <TH VALIGN="top">Options:</TD>
-  <TD>
-  <dtml-in "getOptions()">
-  <INPUT TYPE="text" NAME="option_&dtml-sequence-number;" VALUE="&dtml-sequence-item;">&nbsp;
-  <INPUT TYPE="text" NAME="optionprice_&dtml-sequence-number;:float" VALUE="<dtml-var "getOptionPrice(_['sequence-item'])">"><br>
-  </dtml-in>
-  <INPUT TYPE="text" NAME="option_new" VALUE="">&nbsp;
-  <INPUT TYPE="text" NAME="optionprice_new:float" VALUE="0.0">
-  <DL CLASS="FieldHelp">
-   <DD>The price of service options.</DD>
-  </DL>
-  </TD>
- </TR>
-
-
-
-
-
-
-<!-- test to see if NON option should be checked -->
- <dtml-if "this().isCredit">
-  <dtml-if "this().isCredit == 1">
-   <dtml-call "REQUEST.set('credit_sel', '')">
-  <dtml-else>
-   <dtml-call "REQUEST.set('credit_sel', 'CHECKED')">
-  </dtml-if>
- <dtml-else>
-  <dtml-call "REQUEST.set('credit_sel', 'CHECKED')">
- </dtml-if>
-
-
-
-<TR>
-  <TH VALIGN="top">Is this a credit product?</TD>
-  <TD><INPUT TYPE="radio" NAME="isCredit" VALUE="1"
-  <dtml-if "this().isCredit"><dtml-if "this().isCredit == 1">CHECKED</dtml-if></dtml-if>
-  >Yes&nbsp;
-  <INPUT TYPE="radio" NAME="isCredit" VALUE="0" &dtml-credit_sel;>No
-  <DL CLASS="FieldHelp">
-   <DD>If your product is a credits product, the visitors can buy minutes to be used in pay-per-view cinemas.</DD>
-  </DL>
-  </TD>
- </TR>
-
-
-
-
-<dtml-if "this().isCredit">
- <TR>
-  <TH VALIGN="top">Credits amount:</TD>
-  <TD><INPUT TYPE="text" NAME="credits:int" VALUE="&dtml-credits;">
-  <DL CLASS="FieldHelp">
-   <DD>How many credits the users get.</DD>
-  </DL>
-  </TD>
- </TR>
-<dtml-else>
- <INPUT TYPE="hidden" NAME="credits:int" VALUE="&dtml-credits;">
-</dtml-if>
-
- <TR>
-  <TD COLSPAN="2"><INPUT TYPE="submit" VALUE=" Save "></TD>
- </TR>
-</FORM>
-</TABLE>
-
-<dtml-var standard_html_footer>
diff --git a/product/MMMShop/skins/storever/special_top_menu.dtml b/product/MMMShop/skins/storever/special_top_menu.dtml
deleted file mode 100755
index 3b656ae277..0000000000
--- a/product/MMMShop/skins/storever/special_top_menu.dtml
+++ /dev/null
@@ -1,10 +0,0 @@
-<dtml-let lang="gettext.get_selected_language()">
-            <a class="topbanner" href="<dtml-var portal_url>/&dtml-lang;"><dtml-gettext>Products</dtml-gettext></a>&nbsp;|&nbsp;
-            <dtml-if "not portal_membership.isAnonymousUser()">
-            <a class="topbanner" href="&dtml-secure_url;/&dtml-lang;/shoppingcart_view"><dtml-gettext>My Cart</dtml-gettext></a>&nbsp;|&nbsp;
-            </dtml-if>
-            <a class="topbanner" href="&dtml-secure_url;/&dtml-lang;/order_list"><dtml-gettext>My Orders</dtml-gettext></a>
-            <dtml-if "not portal_membership.isAnonymousUser()">
-            &nbsp;|&nbsp;<a class="topbanner" href="&dtml-secure_url;/&dtml-lang;/logout"><dtml-gettext>Logout</dtml-gettext></a>
-            </dtml-if>
-</dtml-let>
diff --git a/product/MMMShop/skins/storever/standard_html_footer.dtml b/product/MMMShop/skins/storever/standard_html_footer.dtml
deleted file mode 100755
index 50b77be585..0000000000
--- a/product/MMMShop/skins/storever/standard_html_footer.dtml
+++ /dev/null
@@ -1,19 +0,0 @@
-      <div class="Desktop">
-      <dtml-if localFooter>
-       <dtml-var localFooter>
-      </dtml-if>
-
-      </div>
-      </td>
-    </tr>
-  </tbody>
-</table>
-
-<!-- Legalese -->
-
-<div class="legalinfo">
-  <p><dtml-var "gettext(legal_footer)"></p>
-</div>
-
-  </body>
-</html>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/standard_html_header.dtml b/product/MMMShop/skins/storever/standard_html_header.dtml
deleted file mode 100755
index bf76f56571..0000000000
--- a/product/MMMShop/skins/storever/standard_html_header.dtml
+++ /dev/null
@@ -1,132 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<dtml-comment>
-Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
-Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-
-This software is subject to the provisions of the Zope Public License,
-Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-FOR A PARTICULAR PURPOSE
-</dtml-comment>
-
-<dtml-if "_.hasattr(this(),'isEffective') and not isEffective( ZopeTime() )">
-<dtml-unless "portal_membership.checkPermission('Request review',this())
-           or portal_membership.checkPermission('Review portal
- content',this())">
-<dtml-var "RESPONSE.unauthorized()">
-</dtml-unless>
-</dtml-if>
-
-<html>
- <head>  
-  <title><dtml-with portal_properties>&dtml-title;</dtml-with
-  ><dtml-if name="Title">: &dtml-TranslatedTitle;</dtml-if></title>
-  <dtml-var css_inline_or_link>
-  <dtml-if relative_to_content>
-   <base href="&dtml-absolute_url;" />
-  </dtml-if>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- </head>
-<dtml-with stylesheet_properties>
-<body font="&dtml-base_font_color;">
-</dtml-with>
-
-<!-- Top Bar: Global links and search -->
-<dtml-var standard_top_bar>
-
-<!-- Main Page -->
-<table cellspacing="0" cellpadding="0" width="100%" border="0">
-  <tbody>
-    <tr>
-      <!-- Logo -->
-      <td colspan="2" rowspan="2" class="LogoBox" valign="top">
-        <div class="LogoBox">
-     
-           <dtml-if mdk><img src="http://new.mandrakestore.com/images/MDKSTORE.jpg">
-           <dtml-else><a href="&dtml-portal_url;"><img src="&dtml-portal_url;/logo.png"
- border="0"  /></a>
-	   </dtml-if>
-        </div>
-      </td>
-      <!-- Title and Language -->
-      <td width="90%" class="TitleBox">
-          <dtml-var TranslatedTitle_or_id>
-      </td>
-    </tr>
-    <tr class="LanguageBox">
-      <td class="LanguageBox">
-          <dtml-if show_language_selector><dtml-var language_selector></dtml-if>
-      </td>
-    </tr>
-    <tr>
-      <dtml-if show_menu>
-        <td valign="top" width="150">
-            <!-- Optional Action Box-->
-            <dtml-if "not portal_membership.isAnonymousUser()">
-            <div class="ActionBox"><dtml-var actions_box></div>
-            </dtml-if>
-            <!-- Main menu -->
-            <dtml-var menu_box>
-            <!-- Quick Login -->
-            <dtml-if show_quicklogin><br><dtml-var quick_login></dtml-if>
-        </td>
-        <!-- Main Box -->
-        <td colspan="2" valign="top" class="Desktop">
-      <dtml-else>
-        <dtml-if
- "portal_membership.getAuthenticatedMember().has_role('Partner')">
-            <td valign="top" width="150">
-                <!-- Optional Action Box-->
-                <div class="ActionBox"><dtml-var actions_box></div>
-            </td>
-            <!-- Main Box -->
-            <td colspan="2" valign="top" class="Desktop">
-        <dtml-else>
-            <!-- Main Box -->
-            <td colspan="3" valign="top" class="Desktop">
-        </dtml-if>
-      </dtml-if>
-
-
-      <!-- Main Box -->
-      <div class="Desktop">
-          <dtml-if "not portal_membership.isAnonymousUser() and
-             not _.hasattr(portal_membership.getAuthenticatedMember(),
-             'getMemberId')">
-          <div class="AuthWarning">
-           <table>
-            <tr class="Host">
-             <td> Warning! </td>
-            <tr>
-             <td> You are presently logged in as a user from outside
-                  this portal.  Many parts of the portal will not work!
-                  You may have to shut down and relaunch your browser to
-                  log out, depending on how you originally logged in.
-             </td>
-            </tr>
-           </table>
-          </div>
-          </dtml-if>
-        </div>
-
-          <dtml-if show_breadcrumb>
-          <!-- Breadcrumb -->
-          <div class="breadcrumb">
-           <p><dtml-var breadcrumb></p>
-          </div>
-          </dtml-if>
-
-
-        <div class="Desktop">
-          <dtml-if portal_status_message>
-           <p class="DesktopStatusBar"><dtml-var
-             "gettext(portal_status_message)"></p>
-          </dtml-if>
-
-          <dtml-if localHeader>
-           <dtml-var localHeader>
-          </dtml-if>
-        </div>
\ No newline at end of file
diff --git a/product/MMMShop/skins/storever/update_cart.py b/product/MMMShop/skins/storever/update_cart.py
deleted file mode 100755
index 744f90e8fb..0000000000
--- a/product/MMMShop/skins/storever/update_cart.py
+++ /dev/null
@@ -1,23 +0,0 @@
-## Script(Python) "update_cart"
-##parameters=REQUEST=None
-##title=Update the shopping cart
-
-if context.meta_type == 'MMM Shop Shopping Cart':
-   if REQUEST.has_key('emptyCart'):
-      context.clearCart()
-      status_msg = 'The+cart+is+empty !'
-      return_page =  'cart'
-   elif REQUEST.has_key('checkOut'):
-      status_msg = 'BLA'
-      return_page = 'checkout'
-   else:
-      status_msg = 'No+action+selected'
-      return_page =  'cart'
-else:
-   status_msg = 'Update+script+called+in+the+wrong+context'
-   return_page =  'cart'
-
-if return_page == 'cart':
-   context.REQUEST.RESPONSE.redirect(context.local_absolute_url() + '/shoppingcart_view?portal_status_message=' + status_msg)
-else:
-   context.REQUEST.RESPONSE.redirect(context.local_absolute_url() + '/checkoutPage')
diff --git a/product/MMMShop/skins/storever/update_computer_product.py b/product/MMMShop/skins/storever/update_computer_product.py
deleted file mode 100755
index 8e06682620..0000000000
--- a/product/MMMShop/skins/storever/update_computer_product.py
+++ /dev/null
@@ -1,97 +0,0 @@
-## Script (Python) "update_computer_product"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=REQUEST=None
-##title=Update a Computer Product
-##
-if context.meta_type == 'MMM Computer Product' or context.meta_type == 'Storever Computer Product':
-    context.editProduct(title=REQUEST['prod_name']
-                        , description=REQUEST['description']
-                        , price=REQUEST['price']
-                        , isCredit=REQUEST['isCredit']
-                        , credits = REQUEST['credits']
-                        , category=REQUEST['prod_category']
-                        , delivery_days=REQUEST['delivery_days']
-                        , product_path = REQUEST['product_path']
-			, text= REQUEST['text'])
-    # Update Processor
-    l = len(context.getProcessorSizes())
-    for i in context.getProcessorSizes():
-        context.deleteProcessorPrice(i)
-    for i in range(1,l+1):
-        if REQUEST['procsize_%s' % i] != '':
-            context.setProcessorPrice(str(REQUEST['procsize_%s' % i]),float(REQUEST['procprice_%s' % i]))
-    if REQUEST['procsize_new'] != '':
-        context.setProcessorPrice(str(REQUEST['procsize_new']),float(REQUEST['procprice_new']))
-    # Update Memory
-    l = len(context.getMemorySizes())
-    for i in context.getMemorySizes():
-        context.deleteMemoryPrice(i)
-    for i in range(1,l+1):
-        if REQUEST['memsize_%s' % i] != '':
-            context.setMemoryPrice(str(REQUEST['memsize_%s' % i]),float(REQUEST['memprice_%s' % i]))
-    if REQUEST['memsize_new'] != '':
-        context.setMemoryPrice(str(REQUEST['memsize_new']),float(REQUEST['memprice_new']))
-    # Update Disk
-    l = len(context.getDiskSizes())
-    for i in context.getDiskSizes():
-        context.deleteDiskPrice(i)
-    for i in range(1,l+1):
-        if REQUEST['disksize_%s' % i] != '':
-            context.setDiskPrice(str(REQUEST['disksize_%s' % i]),float(REQUEST['diskprice_%s' % i]))
-    if REQUEST['disksize_new'] != '':
-        context.setDiskPrice(str(REQUEST['disksize_new']),float(REQUEST['diskprice_new']))
-    # Update Options
-    l = len(context.getOptions())
-    for i in context.getOptions():
-        context.deleteOptionPrice(i)
-    for i in range(1,l+1):
-        if REQUEST['option_%s' % i] != '':
-            context.setOptionPrice(str(REQUEST['option_%s' % i]),float(REQUEST['optionprice_%s' % i]))
-    if REQUEST['option_new'] != '':
-        context.setOptionPrice(str(REQUEST['option_new']),float(REQUEST['optionprice_new']))
-    # Update standard product fields
-    status_msg = 'Product+updated'
-    if REQUEST['thumbnail'] != '':
-        t_id = context.id + '_thumbnail'
-        user_obj = context.getMemberObj()
-        username = user_obj.getUserName()
-        memberfolder = context.portal_membership.getHomeFolder(username)
-        t_obj = None
-        for item in memberfolder.objectValues(('Portal Image','Base18 Image')):
-            if item.getId() == t_id:
-                t_obj = memberfolder.restrictedTraverse(item.getId())
-
-        if t_obj is None:
-            memberfolder.invokeFactory(id=t_id, type_name='Image')
-            t_obj = memberfolder.restrictedTraverse(t_id)
-
-        t_obj.edit(precondition='', file=REQUEST['thumbnail'])
-        context.editThumbnail(t_obj.absolute_url(relative=1))
-        status_msg = status_msg + ',+Thumbnail+updated'
-
-    if REQUEST['image'] != '':
-        i_id = context.id + '_image'
-        user_obj = context.getMemberObj()
-        username = user_obj.getUserName()
-        member_folder = context.portal_membership.getHomeFolder(username)
-        i_obj = None
-        for item in member_folder.objectValues(('Portal Image','Base18 Image')):
-            if item.getId() == i_id:
-                i_obj = member_folder.restrictedTraverse(item.getId())
-
-        if i_obj is None:
-            member_folder.invokeFactory(id=i_id, type_name='Image')
-            i_obj = member_folder.restrictedTraverse(i_id)
-
-        i_obj.edit(precondition='', file=REQUEST['image'])
-        context.editImage(i_obj.absolute_url(relative=1))
-        status_msg = status_msg + ',+Large+image+updated'
-
-else:
-    status_msg = 'Update+script+called+in+wrong+context'
-
-context.REQUEST.RESPONSE.redirect(context.absolute_url() + '/computerproduct_edit_form?portal_status_message=' + status_msg)
diff --git a/product/MMMShop/skins/storever/update_simple_product.py b/product/MMMShop/skins/storever/update_simple_product.py
deleted file mode 100755
index 99647e94a2..0000000000
--- a/product/MMMShop/skins/storever/update_simple_product.py
+++ /dev/null
@@ -1,69 +0,0 @@
-## Script (Python) "update_computer_product"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=REQUEST=None
-##title=Update a Computer Product
-##
-if context.meta_type == 'Storever Simple Product':
-    context.editProduct(title=REQUEST['prod_name']
-                        , description=REQUEST['description']
-                        , price=REQUEST['price']
-                        , isCredit=REQUEST['isCredit']
-                        , category=REQUEST['prod_category']
-                        , delivery_days=REQUEST['delivery_days']
-                        , product_path = REQUEST['product_path']
-			, text= REQUEST['text'])
-    # Update Options
-    l = len(context.getOptions())
-    for i in context.getOptions():
-        context.deleteOptionPrice(i)
-    for i in range(1,l+1):
-        if REQUEST['option_%s' % i] != '':
-            context.setOptionPrice(str(REQUEST['option_%s' % i]),float(REQUEST['optionprice_%s' % i]))
-    if REQUEST['option_new'] != '':
-        context.setOptionPrice(str(REQUEST['option_new']),float(REQUEST['optionprice_new']))
-    # Update standard product fields
-    status_msg = 'Product+updated'
-    if REQUEST['thumbnail'] != '':
-        t_id = context.id + '_thumbnail'
-        user_obj = context.getMemberObj()
-        username = user_obj.getUserName()
-        memberfolder = context.portal_membership.getHomeFolder(username)
-        t_obj = None
-        for item in memberfolder.objectValues(('Portal Image','Base18 Image')):
-            if item.getId() == t_id:
-                t_obj = memberfolder.restrictedTraverse(item.getId())
-
-        if t_obj is None:
-            memberfolder.invokeFactory(id=t_id, type_name='Image')
-            t_obj = memberfolder.restrictedTraverse(t_id)
-
-        t_obj.edit(precondition='', file=REQUEST['thumbnail'])
-        context.editThumbnail(t_obj.absolute_url(relative=1))
-        status_msg = status_msg + ',+Thumbnail+updated'
-
-    if REQUEST['image'] != '':
-        i_id = context.id + '_image'
-        user_obj = context.getMemberObj()
-        username = user_obj.getUserName()
-        member_folder = context.portal_membership.getHomeFolder(username)
-        i_obj = None
-        for item in member_folder.objectValues(('Portal Image','Base18 Image')):
-            if item.getId() == i_id:
-                i_obj = member_folder.restrictedTraverse(item.getId())
-
-        if i_obj is None:
-            member_folder.invokeFactory(id=i_id, type_name='Image')
-            i_obj = member_folder.restrictedTraverse(i_id)
-
-        i_obj.edit(precondition='', file=REQUEST['image'])
-        context.editImage(i_obj.absolute_url(relative=1))
-        status_msg = status_msg + ',+Large+image+updated'
-
-else:
-    status_msg = 'Update+script+called+in+wrong+context'
-
-context.REQUEST.RESPONSE.redirect(context.absolute_url() + '/simpleproduct_edit_form?portal_status_message=' + status_msg)
diff --git a/product/MMMShop/skins/zpt_storever/custommer_registration.pt b/product/MMMShop/skins/zpt_storever/custommer_registration.pt
deleted file mode 100755
index b21769d0c1..0000000000
--- a/product/MMMShop/skins/zpt_storever/custommer_registration.pt
+++ /dev/null
@@ -1,175 +0,0 @@
-<html metal:use-macro="here/main_template/macros/master">
-  <head>
-    <title tal:content="template/title">The title</title>
-  </head>
-  <body>
-
-    <div metal:fill-slot="main"
-         tal:define="dummy python:request.set('quantity',1);
-                     dummy python:request.set('product_path',here.product_path);
-                     show_language_selector python:0;
-                     show_breadcrumb python:0;
-                     mtool here/portal_membership;
-                     member mtool/getAuthenticatedMember;
-                     ptool here/portal_properties">
-
-      <h1 i18n:translate="">Custommer Registration</h1>
-
-      <table>
-       <tr>
-        <td valign="top">
-         <h2 i18n:translate="">New Custommers</h2>
-
-         <p i18n:translate="">If you are a new custommer, please provide bellow your
-       personal information in order to let us identify you.</p>
-
-      <form method="POST" action="register_and_addToCart">
-     
-
-
-      <span tal:repeat="item python:('color',
-       'quantity','product_path','processor','memory','disk','drive','setup',
-      'fs','root_partition','boot_partition','usr_partition','home_partition',
-      'var_partition','swap_partition','tmp_partition','free_partition', 'config_url',
-      'support','monitoring','backup','archive','hosting','keyboard')">
-      <input type="hidden" name="" value=""
-          tal:attributes="name item;
-                          value python:getattr(request,item,'')">
-      </span>
-
-      <span tal:repeat="item python:here.getOptionValues('Option')">
-        <input type="hidden" name=""
-         value=""
-         tal:attributes="name python:'option_%s' % repeat.item.number;
-                         value item"
-         tal:condition="python:request.has_key('option_%s' % repeat.item.number)">
-      </span>
-
-
-      <input type="hidden" name="last_visit:date" value=""
-          tal:attributes="value here/ZopeTime">
-       <input type="hidden" name="prev_visit:date" value=""
-          tal:attributes="value here/ZopeTime">
-
-        <table class="FormLayout">
-
-          <tr>
-           <th i18n:translate=""> Login Name </th>
-           <td>
-            <input type="text" name="username" size="30" value=""
-                   tal:attributes="value request/username|nothing">
-           </td>
-          </tr>
-
-          <tr>
-           <th i18n:translate=""> Email Address </th>
-           <td align="left" valign="top">
-            <input type="text" name="email" size="30" value=""
-                tal:attributes="value request/email|nothing">
-           </td>
-          </tr>
-
-         <tbody tal:condition="python: not(ptool.validate_email)">
-
-          <tr>
-           <th i18n:translate=""> Password </th>
-           <td align="left" valign="top">
-            <input type="password" name="password" size="30">
-           </td>
-          </tr>
-
-          <tr>
-           <th i18n:translate=""> Password (confirm) </th>
-           <td align="left" valign="top">
-            <input type="password" name="confirm" size="30">
-           </td>
-          </tr>
-
-          <tr>
-           <th i18n:translate=""> Mail Password?  </th>
-           <td>
-            <input type="checkbox" name="mail_me" size="30" id="cb_mailme" />
-            <em><label for="cb_mailme" i18n:translate="">Check this box to have your password
-                                       mailed to you.</label></em>
-           </td>
-          </tr>
-         </tbody>
-
-
-         </table>
-
-         <p align="center"><input type="submit" value=""
-                tal:attributes="value python:here.gettext.gettext('Register & Add to Cart')"
-              ></p>
-         </form>
-
-        </td>
-        <td valign="top">
-         <h2 i18n:translate="">Existing Custommers</h2>
-
-         <p i18n:translate="">If you are a registered custommer, please provide your user
-       login and password in order to proceed.</p>
-
-      <form method="POST" action="login_and_addToCart">
-
-      <span tal:repeat="item python:('color',
-       'quantity','product_path','processor','memory','disk','drive','setup',
-      'fs','root_partition','boot_partition','usr_partition','home_partition',
-      'var_partition','swap_partition','tmp_partition','free_partition', 'config_url',
-      'support','monitoring','backup','archive','hosting','keyboard')">
-      <input type="hidden" name="" value=""
-          tal:attributes="name item;
-                          value python:getattr(request,item,'')">
-      </span>
-
-      <span tal:repeat="item python:here.getOptionValues('Option')">
-        <input type="hidden" name=""
-         value=""
-         tal:attributes="name python:'option_%s' % repeat.item.number;
-                         value item"
-         tal:condition="python:request.has_key('option_%s' % repeat.item.number)">
-      </span>
-
-
-      <table class="FormLayout">
-      <tr>
-        <td align="left" valign="top">
-        <strong>Name</strong>
-        </td>
-        <td align="left" valign="top">
-        <input type="TEXT" name="__ac_name" size="20" value="" tal:attributes="value python: request.get('__ac_name') or ''">
-        </td>
-      </tr>
-      <tr>
-        <td align="left" valign="top">
-        <strong>Password</strong>
-        </td>
-        <td align="left" valign="top">
-        <input type="PASSWORD" name="__ac_password" size="20">
-        </td>
-      </tr>
-
-      <tr valign="top" align="left">
-      <td></td>
-      <td><input type="checkbox" name="__ac_persistent" value="1" checked
-            id="cb_remember" />
-      <label for="cb_remember">Remember my name.</label>
-      </td></tr>
-
-      </table>
-
-         <p align="center"><input type="submit" value=""
-                tal:attributes="value python:here.gettext.gettext('Login & Add to Cart')"
-              ></p>
-
-
-         </form>
-        </td>
-       </tr>
-      </table>
-
-
-    </div>
-  </body>
-</html>
-
diff --git a/product/MMMShop/skins/zpt_storever/define_options.pt b/product/MMMShop/skins/zpt_storever/define_options.pt
deleted file mode 100755
index 5244c5601b..0000000000
--- a/product/MMMShop/skins/zpt_storever/define_options.pt
+++ /dev/null
@@ -1,60 +0,0 @@
-<html metal:use-macro="here/main_template/macros/master">
-  <head>
-    <title tal:content="template/title">The title</title>
-  </head>
-  <body>
-    <div metal:fill-slot="main"
-         tal:define="dummy python:request.set('quantity',1);
-                     dummy python:request.set('product_path',here.product_path);
-                     dummy python:request.set('color','')">
-      <p><i i18:translate="">Thank you for choosing Nagasaki. Some Nagasaki products are available with a choice of
-      hardware, software, and service options. Please use this form to configure your product.</i></p>
-      <span tal:define="global form_method string:'custommer_registration'" tal:condition="python:here.portal_membership.isAnonymousUser()"/>
-      <span tal:define="global form_method string:'login_and_addToCart'" tal:condition="python:not here.portal_membership.isAnonymousUser()"/>
-      <form method="POST" action="custommer_registration"
-            tal:attributes="action form_method">
-      <span tal:repeat="item python:('color',
-       'quantity','product_path','processor','memory','disk','drive',
-      'fs','root_partition','boot_partition','usr_partition','home_partition',
-      'var_partition','swap_partition','tmp_partition','free_partition', 'config_url',
-      'support','monitoring','backup','archive','hosting','keyboard')">
-      <input type="hidden" name="" value=""
-          tal:attributes="name item;
-                          value python:getattr(request,item,'')">
-      </span>
-
-      <table>
-                  <tr>
-                    <td i18n:translate="">Option:</td>
-                    <td>
-                      <select name="setup">
-                         <option  tal:repeat="item python:here.getOptionValues('')"
-                                  value="Rouge (+300 EUR)"
-                                  tal:attributes="value python:item[0]"
-                                  tal:content="python:'%s (+%s)' % (item[0], item[1])"></option>
-                      </select>
-                     </td>
-                  </tr>
-                  <tr>
-                     <td></td>
-                     <td class="OptionHelp" i18n:translate="">Each Nasagaki product provides
-                     multiple options and variations to filt your needs best.</td>
-                  </tr>
-      </table>
-
-
-
-      <p align="center">
-      <input type="submit" name="submit" value=""
-             tal:attributes="value python:here.gettext.gettext('Proceed to registration')"
-             tal:condition="python:here.portal_membership.isAnonymousUser()">
-      <input type="submit" name="submit" value=""
-             tal:attributes="value python:here.gettext.gettext('Add to Cart')"
-             tal:condition="python:not here.portal_membership.isAnonymousUser()">
-      </p>
-
-      </form>
-    </div>
-  </body>
-</html>
-
diff --git a/product/MMMShop/skins/zpt_storever/shoppingcart_view.pt b/product/MMMShop/skins/zpt_storever/shoppingcart_view.pt
deleted file mode 100755
index 5919c5f14c..0000000000
--- a/product/MMMShop/skins/zpt_storever/shoppingcart_view.pt
+++ /dev/null
@@ -1,140 +0,0 @@
-<html metal:use-macro="here/main_template/macros/master">
-  <head>
-    <title tal:content="template/title">The title</title>
-  </head>
-  <body>
-    <div metal:fill-slot="main"
-         class="Desktop"
-         tal:define="dummy python:request.set('currency_manager', here.getCurrencyManager());
-                     dummy python:request.set('member_currency', here.getMemberObj().pref_currency);
-                     dummy python:here.setCurrencyParams();
-                     dummy python:request.set('shopmanager', here.getShopManager()[1]);
-                     user  python:here.portal_membership.getAuthenticatedMember().getUserName();
-                     mem_folder python:here.portal_membership.getHomeFolder(user);
-
-                     ">
-
-      <span tal:repeat="item python:mem_folder.objectValues('MMM Shop Shopping Cart')">
-        <span tal:define="cartid item/getId;
-                          dummy python:request.set('cartobj', mem_folder.restrictedTraverse(cartid))"
-                          />
-      </span>
-      <span tal:define="dummy python:request.set('disp_msg', 'You have no items in the cart')"
-            tal:condition="python:len(mem_folder.objectValues('MMM Shop Shopping Cart')) == 0" />
-
-      <form action="update_cart"
-            tal:attributes="href python:'%s/update_cart' % request.cartobj.absolute_url()">
-      <!-- List items in the cart object -->
-        <table BORDER="0" WIDTH="100%">
-         <tr Class="NewsTitle">
-          <td colspan="4" Class="NewsTitle" i18n:translate="">My Shopping Cart</td>
-         </tr>
-         <tr tal:condition="request/disp_msg | nothing">
-          <td colspan="4" tal:content="python:here.gettext.gettext(request.disp_msg)">A message to display</td>
-         </tr>
-         <tr tal:define="dummy python:request.set('prod_update_url', request['URL'] + '?display_cartitem=true&itemobj=');
-                         dummy python:request.set('all_price', 0)">
-          <td width="97%" nowrap><B i18n:translate="">Product</B></td>
-          <td width="1%" nowrap><B i18n:translate="">Quantity</B>&nbsp;</td>
-          <td width="1%" nowrap><B i18n:translate="">Price / Piece</B>&nbsp;</td>
-          <td width="1%" nowrap><B i18n:translate="">Total</B></td>
-         </tr>
-         <tr tal:repeat="item python:request.cartobj.listProducts()">
-          <span
-             tal:define="
-                   item_id  repeat/item/number;
-                   product item/getProduct;
-                   quantity item/getQuantity;
-                   variant item/getVariant;
-                   prod_obj python:here.restrictedTraverse(product);
-                   prod_price python:prod_obj.computePrice(variant);
-                   prod_variant_line python:prod_obj.shortVariant(variant);
-                   price python:float(prod_price) / float(request['exchange_rate']);
-                   total_price python:int(quantity) * float(price)">
-            <td width="97%" nowrap>
-                 <A HREF=""
-                    tal:condition="python:not request.get('display_in_product')"
-                    tal:content="prod_obj/title"
-                    ta:attributes="href python:'%s/%s' % (item.prod_update_url, item_id)">
-                    Link</A>&nbsp;
-            <font size="-2" tal:content="structure prod_variant_line"></font></td>
-            <td width="1%" nowrap align="center">
-                 <A HREF=""
-                    tal:condition="python:not request.get('display_in_product')"
-                    tal:content="quantity"
-                    ta:attributes="href python:'%s/%s' % (item.prod_update_url, item_id)">
-                    Link</A>
-                 <span tal:replace="quantity"
-                       tal:condition="request/display_in_product | nothing" />
-            </td>
-            <td width="1%" nowrap align="right"
-              tal:content="structure python:'%0.2f&nbsp;%s&nbsp;' % (price, request.money_unit)"></td>
-            <td width="1%" nowrap align="right"
-              tal:content="structure python:'%0.2f&nbsp;%s&nbsp;' % (total_price, request.money_unit)"></td>
-          </span>
-         </tr>
-         <span tal:define="dummy python:request.set('all_price', here.getTotalPrice())" />
-         <tr tal:condition="python: float(request.all_price) == 0.0">
-           <td COLSPAN="4" i18n:translate="">You have no items in you shopping cart</td>
-         </tr>
-         <span tal:condition="python: float(request.all_price) != 0.0">
-          <span tal:condition="python:request['cur_code'] == request.shopmanager.local_currency">
-            <span  tal:define="dummy python:request.set('send_fee', float(request.shopmanager.send_fee_local));
-                            dummy python:request.set('exchange_fee', 0.0)" />
-          </span>
-          <span tal:condition="python:request['cur_code'] != request.shopmanager.local_currency">
-            <span tal:define="new_send_fee python:float(request.shopmanager.send_fee_world) / float(request['exchange_rate']);
-                            new_exchange_fee python:float(request.shopmanager.exchange_fee) / float(request['exchange_rate']);
-                            dummy python:request.set('send_fee', new_send_fee);
-                            dummy python:request.set('exchange_fee', new_exchange_fee)" />
-          </span>
-         </span>
-         <tr>
-          <td i18n:translate="">Sending fee:</td>
-          <td COLSPAN="3" ALIGN="right"
-              tal:content="structure python:'%0.2f&nbsp;%s' % (request.send_fee,request.money_unit)"></td>
-         </tr>
-         <tr tal:condition="python:request['exchange_fee'] != 0.0">
-          <td i18n:translate="">Exchange fee:</td>
-          <td COLSPAN="3" ALIGN="right"
-              tal:content="structure python:'%0.2f&nbsp;%s' % (request.exchange_fee,request.money_unit)"></td>
-         </tr>
-         <tr>
-          <td COLSPAN="4"><HR></td>
-         </tr>
-         <tr>
-          <td i18n:translate="">Total amount to pay (excl. VAT):</td>
-          <td COLSPAN="3" ALIGN="right"
-              tal:content="structure python:'%0.2f&nbsp;%s' % (request.all_price,request.money_unit)"></td>
-         </tr>
-         <tr>
-          <td ><span i18n:translate="">VAT</span> (<span tal:replace="python:'%0.2f' % (here.portal_properties.vat * 100.0)" />%):</td>
-          <td COLSPAN="3" ALIGN="right"
-              tal:content="structure python:'%0.2f&nbsp;%s' % (request.all_price * here.portal_properties.vat,request.money_unit)"></td>
-         </tr>
-         <tr>
-          <td><b i18n:translate="">Total amount to pay (incl. VAT):</b></td>
-          <td COLSPAN="3" ALIGN="right"><b
-              tal:content="structure python:'%0.2f&nbsp;%s' % (request.all_price * (1.0 + here.portal_properties.vat),request.money_unit)">
-              </b></td>
-         </tr>
-         <tr>
-          <td HEIGHT="5" COLSPAN="4">&nbsp;</td>
-         </tr>
-         <tr tal:condition="python:not request.get('display_in_product')">
-          <td COLSPAN="4" align="right">
-            <input TYPE="submit" NAME="emptyCart" VALUE=""
-                   tal:attributes="value python:here.gettext.gettext('Empty the cart')">&nbsp;
-            <input TYPE="submit" NAME="checkOut" VALUE=""
-                   tal:attributes="value python:here.gettext.gettext('Check out')">
-           </td>
-         </tr>
-         <tr>
-          <td colspan="3"></td>
-         </tr>
-        </table>
-      </form>
-    </div>
-  </body>
-</html>
-
diff --git a/product/MMMShop/skins/zpt_storever/simpleproduct_edit_form.pt b/product/MMMShop/skins/zpt_storever/simpleproduct_edit_form.pt
deleted file mode 100755
index 20bb6f1c69..0000000000
--- a/product/MMMShop/skins/zpt_storever/simpleproduct_edit_form.pt
+++ /dev/null
@@ -1,130 +0,0 @@
-<html metal:use-macro="here/main_template/macros/master">
-  <head>
-    <title tal:content="template/title">The title</title>
-  </head>
-  <body>
-    <div metal:fill-slot="main"
-         tal:define="dummy python:request.set('local_currency_name', here.getLocalCurrencyName())">
-      <form ACTION="update_simple_product" MEthOD="POST" ENCTYPE="multipart/form-data">
-        <table BORDER="0" WIDth="100%" CLASS="FormLayout">
-         <tr>
-          <th VALIGN="top">Navn:</th>
-          <td>
-            <input TYPE="text" name="prod_name" value="title" tal:attributes="value here/title">
-            <dl CLASS="FieldHelp">
-              <dd>The name of the product.</dd>
-            </dl>
-          </td>
-         </tr>
-         <tr>
-          <th VALIGN="top">Short Description:</th>
-          <td>
-            <textarea name="description" ROWS="5" COLS="30" tal:content="here/description">Description</textarea>
-            <dl CLASS="FieldHelp">
-              <dd>The description of the product.</dd>
-            </dl>
-          </td>
-         </tr>
-         <tr>
-          <th VALIGN="top">Long Description:</th>
-          <td>
-            <textarea name="text:text"
-                     rows="20" cols="80" tal:content="here/text">Long Description</textarea>
-          </td>
-         </tr>
-         <tr>
-          <th VALIGN="top">Category:</th>
-          <td>
-            <select name="prod_category:list" SIZE="3" MULTIPLE
-                  tal:define="contentSubject here/Subject;
-                              allowedSubjects python:here.portal_metadata.listAllowedSubjects(here.this())">
-              <span tal:repeat="item allowedSubjects">
-                <option value="The subject" tal:attributes="value item" tal:content="item"
-                     tal:condition="python: item not in contentSubject">The category</option>
-                <option value="The subject" tal:attributes="value item" tal:content="item"
-                     tal:condition="python: item in contentSubject" selected>The category</option>
-              </span>
-            </select>
-            <dl CLASS="FieldHelp">
-              <dd>You should place your procu in one - or more - category, so visitors on the site can find your product easier.
-               Pick the category that fits your product best.</dd>
-            </dl>
-          </td>
-         </tr>
-         <tr>
-          <th VALIGN="top">Price:</th>
-          <td>
-            <input TYPE="text" name="price:float" value="Price" tal:attributes="value here/price">
-            <dl CLASS="FieldHelp">
-              <dd>The price of your product (in <span tal:replace="request/local_currency_name" />).</dd>
-            </dl>
-          </td>
-         </tr>
-         <tr>
-          <th VALIGN="top">Days to deliver:</th>
-          <td>
-            <input TYPE="text" name="delivery_days:int" value="Delivery days"  tal:attributes="value here/delivery_days">
-            <dl CLASS="FieldHelp">
-              <dd>How many days will it take to deliver your product (as precise as possible).</dd>
-            </dl>
-          </td>
-         </tr>
-         <tr>
-          <th VALIGN="top">Thumbnail picture:</th>
-          <td>
-            <input TYPE="file" name="thumbnail" value="" tal:attributes="value here/thumbnail"><BR>
-            <dl CLASS="FieldHelp">
-              <dd>A little picturre of the product that can be shown in the product catalog.</dd>
-            </dl>
-          </td>
-         </tr>
-         <tr>
-          <th VALIGN="top">Large picture:</th>
-          <td>
-            <input TYPE="file" name="image"  tal:attributes="value here/image"><BR>
-            <dl CLASS="FieldHelp">
-              <dd>Picture of your product that will be used at the product page.</dd>
-            </dl>
-          </td>
-         </tr>
-         <tr>
-           <th VALIGN="top">Product Path:</th>
-           <td>
-            <input TYPE="text" name="product_path" value="" tal:attributes="value here/product_path | string:"><BR>
-            <dl CLASS="FieldHelp">
-              <dd>Product path.</dd>
-            </dl>
-           </td>
-         </tr>
-         <tr>
-          <th VALIGN="top">Options:</th>
-          <td>
-            <span tal:repeat="item here/getOptions">
-              <input TYPE="text" name="" value=""
-               tal:define="number repeat/item/number"
-               tal:attributes="name python:'option_%s' % number;
-                             value item" />&nbsp;
-              <input TYPE="text" name="optionprice_0:float" value="10.0"
-               tal:define="number repeat/item/number"
-               tal:attributes="name python:'optionprice_%s:float' % number;
-                             value python:here.getOptionPrice(item)" /><br>
-            </span>
-            <input TYPE="text" name="option_new" value="">&nbsp;
-            <input TYPE="text" name="optionprice_new:float" value="0.0">
-            <dl CLASS="FieldHelp">
-              <dd>The price of service options.</dd>
-            </dl>
-          </td>
-         </tr>
-         <tr>
-          <td COLSPAN="2"><input TYPE="submit" value=" Save "></td>
-         </tr>
-        </table>
-        <input TYPE="hidden" name="isCredit" value="0" >
-      </form>
-    </div>
-  </body>
-</html>
-
-
-
diff --git a/product/Nexedi/.cvsignore b/product/Nexedi/.cvsignore
deleted file mode 100755
index 432ed787d1..0000000000
--- a/product/Nexedi/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.AppleDouble
-*.pyc
-__init__.py
diff --git a/product/Nexedi/Constraint/.cvsignore b/product/Nexedi/Constraint/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/Nexedi/Constraint/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/Nexedi/Constraint/__init__.py b/product/Nexedi/Constraint/__init__.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/Nexedi/Document/.cvsignore b/product/Nexedi/Document/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/Nexedi/Document/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/Nexedi/Document/NetworkProduct.py b/product/Nexedi/Document/NetworkProduct.py
deleted file mode 100755
index a87ac5b562..0000000000
--- a/product/Nexedi/Document/NetworkProduct.py
+++ /dev/null
@@ -1,134 +0,0 @@
-##############################################################################
-#    Copyright (C) 2001  MMmanager.org
-#
-#    This program is free software; you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-##############################################################################
-"""
-"""
-
-ADD_CONTENT_PERMISSION = 'Add portal content'
-
-from AccessControl import ClassSecurityInfo
-
-from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
-from Products.ERP5Shop.Document.ShopProduct import ShopProduct
-from Products.Base18.Document import Document18
-
-import zLOG
-
-class NetworkProduct( ShopProduct, Document18 ):
-    """
-        A Network Infrastructure Product used
-        by nexedi.net
-    """
-
-    meta_type='Nexedi Service Product'
-    portal_type='Service Product'
-    effective_date = expiration_date = None
-    add_permission = Permissions.AddPortalContent
-    isPortalContent = 1
-    isRADContent = 1
-
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.View)
-
-    # Declarative properties
-    property_sheets = ( PropertySheet.Base
-                      , PropertySheet.XMLObject
-                      , PropertySheet.CategoryCore
-                      , PropertySheet.DublinCore
-                      , PropertySheet.Document
-                      , PropertySheet.Price
-                      , PropertySheet.Resource
-                      , PropertySheet.NetworkProduct
-                      , PropertySheet.ShopProduct
-                      )
-
-    # Factory Type Information
-    factory_type_information = \
-      {    'id'             : portal_type
-         , 'meta_type'      : meta_type
-         , 'description'    : """\
-A Network Product for nexedi.net services"""
-         , 'icon'           : 'file_icon.gif'
-         , 'product'        : 'Nexedi'
-         , 'factory'        : 'addNetworkProduct'
-         , 'immediate_view' : 'network_product_edit_form'
-         , 'allow_discussion'     : 1
-         , 'allowed_content_types': ('Variante Gamme',
-                                      )
-         , 'filter_content_types' : 1
-         , 'global_allow'   : 1
-         , 'actions'        :
-        ( { 'id'            : 'view'
-          , 'name'          : 'View'
-          , 'category'      : 'object_view'
-          , 'action'        : 'network_product_view'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'edit'
-          , 'name'          : 'Edit'
-          , 'category'      : 'object_view'
-          , 'action'        : 'network_product_edit_form'
-          , 'permissions'   : (
-              Permissions.ModifyPortalContent, )
-          }
-        , { 'id'            : 'list'
-          , 'name'          : 'Object Contents'
-          , 'category'      : 'object_action'
-          , 'action'        : 'folder_contents'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'print'
-          , 'name'          : 'Print'
-          , 'category'      : 'object_print'
-          , 'action'        : 'document18_print'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'metadata'
-          , 'name'          : 'Metadata'
-          , 'category'      : 'object_edit'
-          , 'action'        : 'metadata_edit_form'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'translate'
-          , 'name'          : 'Translate'
-          , 'category'      : 'object_action'
-          , 'action'        : 'translation_template_view'
-          , 'permissions'   : (
-              Permissions.TranslateContent, )
-          }
-        )
-      }
-
-    def _getPrice(self, context):
-        """
-          Private price depending in the context
-        """
-        base_price = self.destination_base_price
-        additional_price = 0.0
-        for v in self.objectValues('Nexedi Service Pricing'):
-          if v.test(context):
-            if getattr(v, 'destination_base_price', None) is not None:
-              base_price = v.destination_base_price
-            if getattr(v, 'destination_additional_price', None) is not None:
-              additional_price += v.destination_additional_price
-        return base_price + additional_price
diff --git a/product/Nexedi/Document/NexediServicePricing.py b/product/Nexedi/Document/NexediServicePricing.py
deleted file mode 100755
index 8655e889ee..0000000000
--- a/product/Nexedi/Document/NexediServicePricing.py
+++ /dev/null
@@ -1,122 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-from Globals import InitializeClass, PersistentMapping
-from AccessControl import ClassSecurityInfo
-
-from Products.CMFCore.WorkflowCore import WorkflowAction
-from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
-from Products.ERP5Type.XMLMatrix import XMLMatrix
-
-from Products.ERP5.Document.SetPricing import SetPricing
-from Products.ERP5.Document.MappedValue import MappedValue as ERP5MappedValue
-
-class NexediServicePricing(SetPricing):
-    """
-      Un element de tarif est un prix pour un ensemble de conditions d'application...
-    """
-
-    meta_type = 'Nexedi Service Pricing'
-    portal_type = 'Pricing'
-    add_permission = Permissions.AddPortalContent
-    isPortalContent = 1
-    isRADContent = 1
-
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.View)
-
-    # Declarative properties
-    property_sheets = ( PropertySheet.Base
-                      , PropertySheet.XMLObject
-                      , PropertySheet.CategoryCore
-                      , PropertySheet.Predicate
-                      , PropertySheet.MappedValue
-                      , PropertySheet.Price
-                      , PropertySheet.Pricing
-                      , PropertySheet.NexediServicePricing
-                      , PropertySheet.Variation
-                      )
-
-    # Factory Type Information
-    factory_type_information = \
-      {    'id'             : portal_type
-         , 'meta_type'      : meta_type
-         , 'description'    : """\
-Une ligne tarifaire."""
-         , 'icon'           : 'pricing_icon.gif'
-         , 'product'        : 'Nexedi'
-         , 'factory'        : 'addNexediServicePricing'
-         , 'immediate_view' : 'pricing_view'
-         , 'allow_discussion'     : 1
-         , 'allowed_content_types': ('',
-                                      )
-         , 'filter_content_types' : 1
-         , 'global_allow'   : 1
-         , 'actions'        :
-        ( { 'id'            : 'view'
-          , 'name'          : 'View'
-          , 'category'      : 'object_view'
-          , 'action'        : 'pricing_view'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'list'
-          , 'name'          : 'Object Contents'
-          , 'category'      : 'object_action'
-          , 'action'        : 'folder_contents'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'print'
-          , 'name'          : 'Print'
-          , 'category'      : 'object_print'
-          , 'action'        : 'pricing_print'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'metadata'
-          , 'name'          : 'Metadata'
-          , 'category'      : 'object_view'
-          , 'action'        : 'metadata_edit'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'translate'
-          , 'name'          : 'Translate'
-          , 'category'      : 'object_action'
-          , 'action'        : 'translation_template_view'
-          , 'permissions'   : (
-              Permissions.TranslateContent, )
-          }
-        )
-      }
-
-    def getDefaultResourceValue(self):
-      # Uggly patch XXX
-      return self.aq_parent
diff --git a/product/Nexedi/Document/VPN.py b/product/Nexedi/Document/VPN.py
deleted file mode 100755
index 017dd8c246..0000000000
--- a/product/Nexedi/Document/VPN.py
+++ /dev/null
@@ -1,105 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Guillaume Michon <guillaume@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-from Globals import InitializeClass, PersistentMapping
-from AccessControl import ClassSecurityInfo
-
-from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
-from Products.ERP5.Document.Item import Item
-from Products.ERP5.PropertySheet.Device import Device as ERP5Device
-
-class VPN(Item):
-    """
-      VPNs represent VPN equipments specific to Nexedi
-    """
-
-    meta_type = 'NEXEDI VPN'
-    portal_type = 'VPN'
-    add_permission = Permissions.AddPortalContent
-    isPortalContent = 1
-    isRADContent = 1
-
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.View)
-
-    # Declarative properties
-    property_sheets = ( PropertySheet.Base
-                      , PropertySheet.XMLObject
-                      , PropertySheet.CategoryCore
-                      , PropertySheet.DublinCore
-                      , PropertySheet.Price
-                      , PropertySheet.Resource
-                      , PropertySheet.Item
-                      , PropertySheet.Amount
-                      , PropertySheet.Reference
-                      , PropertySheet.Device
-                      , PropertySheet.VPN
-                      )
-
-    # Factory Type Information
-    factory_type_information = \
-      {    'id'             : portal_type
-         , 'meta_type'      : meta_type
-         , 'description'    : """\
-Devices represent VPN equipments specific to Nexedi."""
-         , 'icon'           : 'item_icon.gif'
-         , 'product'        : 'Nexedi'
-         , 'factory'        : 'addVPN'
-         , 'immediate_view' : 'VPN_view'
-         , 'actions'        :
-        ( { 'id'            : 'view'
-          , 'name'          : 'View'
-          , 'category'      : 'object_view'
-          , 'action'        : 'VPN_view'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'print'
-          , 'name'          : 'Print'
-          , 'category'      : 'object_print'
-          , 'action'        : 'VPN_print'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'metadata'
-          , 'name'          : 'Metadata'
-          , 'category'      : 'object_view'
-          , 'action'        : 'metadata_view'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'translate'
-          , 'name'          : 'Translate'
-          , 'category'      : 'object_action'
-          , 'action'        : 'translation_template_view'
-          , 'permissions'   : (
-              Permissions.TranslateContent, )
-          }
-        )
-      }
diff --git a/product/Nexedi/Document/WPNNode.py b/product/Nexedi/Document/WPNNode.py
deleted file mode 100755
index 0ac5c79ce9..0000000000
--- a/product/Nexedi/Document/WPNNode.py
+++ /dev/null
@@ -1,103 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-from AccessControl import ClassSecurityInfo
-
-from Products.ERP5.Document.Item import Item
-from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
-
-class WPNNode(Item):
-    """
-      A node of WPN
-    """
-
-    meta_type = 'Nexedi WPN Node'
-    portal_type = 'WPN Node'
-    add_permission = Permissions.AddPortalContent
-    isPortalContent = 1
-    isRADContent = 1
-
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.View)
-
-    # Declarative properties
-    property_sheets = ( PropertySheet.Base
-                      , PropertySheet.XMLObject
-                      , PropertySheet.CategoryCore
-                      , PropertySheet.DublinCore
-                      , PropertySheet.WPNNode
-                      )
-
-    # Factory Type Information
-    factory_type_information = \
-      {    'id'             : portal_type
-         , 'meta_type'      : meta_type
-         , 'description'    : """\
-un modele..."""
-         , 'icon'           : 'modele_icon.gif'
-         , 'product'        : 'Nexedi'
-         , 'factory'        : 'addWPNNode'
-         , 'immediate_view' : 'wpn_node_view'
-         , 'allow_discussion'     : 1
-         , 'allowed_content_types': ('Document','File',
-                                      )
-         , 'filter_content_types' : 1
-         , 'global_allow'   : 1
-         , 'actions'        :
-        ( { 'id'            : 'view'
-          , 'name'          : 'View'
-          , 'category'      : 'object_view'
-          , 'action'        : 'wpn_node_view'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'list'
-          , 'name'          : 'Object Contents'
-          , 'category'      : 'object_action'
-          , 'action'        : 'folder_contents'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'print'
-          , 'name'          : 'Print'
-          , 'category'      : 'object_print'
-          , 'action'        : 'wpn_node_print'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        , { 'id'            : 'metadata'
-          , 'name'          : 'Metadata'
-          , 'category'      : 'object_view'
-          , 'action'        : 'metadata_edit'
-          , 'permissions'   : (
-              Permissions.View, )
-          }
-        )
-      }
-
diff --git a/product/Nexedi/Document/__init__.py b/product/Nexedi/Document/__init__.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/Nexedi/Interface/.cvsignore b/product/Nexedi/Interface/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/Nexedi/Interface/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/Nexedi/Interface/__init__.py b/product/Nexedi/Interface/__init__.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/Nexedi/Permissions.py b/product/Nexedi/Permissions.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/Nexedi/PropertySheet/.cvsignore b/product/Nexedi/PropertySheet/.cvsignore
deleted file mode 100755
index d0743b7da6..0000000000
--- a/product/Nexedi/PropertySheet/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.AppleDouble
-*.pyc
diff --git a/product/Nexedi/PropertySheet/NetworkProduct.py b/product/Nexedi/PropertySheet/NetworkProduct.py
deleted file mode 100755
index 6ff91243a7..0000000000
--- a/product/Nexedi/PropertySheet/NetworkProduct.py
+++ /dev/null
@@ -1,37 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-class NetworkProduct:
-    """
-       Generic property sheet for a VPN node
-    """
-
-    _properties = (
-    )
-
-    _categories = ()
diff --git a/product/Nexedi/PropertySheet/NexediServicePricing.py b/product/Nexedi/PropertySheet/NexediServicePricing.py
deleted file mode 100755
index 9a8537054a..0000000000
--- a/product/Nexedi/PropertySheet/NexediServicePricing.py
+++ /dev/null
@@ -1,38 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Coramy SAS and Contributors. All Rights Reserved.
-#          Thierry Faucher <Thierry_Faucher@coramy.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-
-class NexediServicePricing:
-  """
-    Element tarif
-  """
-
-  _properties = (
-      )
-
-  _categories = ( 'network_connection', 'service_state' )
diff --git a/product/Nexedi/PropertySheet/VPN.py b/product/Nexedi/PropertySheet/VPN.py
deleted file mode 100755
index 5cc24cbd66..0000000000
--- a/product/Nexedi/PropertySheet/VPN.py
+++ /dev/null
@@ -1,162 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2003 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Guillaume Michon <guillaume@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-
-
-class VPN:
-    """
-        VPN Class stores specific informations on a Nexedi VPN Device
-    """
-
-    _properties = (
-        {   'id'          : 'external_ip_address',
-            'description' : 'External IP address',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'bind_shared_key',
-            'description' : 'Bind Shared Key',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'bind_zone',
-            'description' : 'Bind Zone',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'bind_records',
-            'description' : 'Bind Records',
-            'type'        : 'text',
-            'mode'        : '' },
-        {   'id'          : 'bind_reverse_records',
-            'description' : 'Bind Reverse Records',
-            'type'        : 'text',
-            'mode'        : '' },
-        {   'id'          : 'shorewall_rules_extra_config',
-            'description' : 'Shorewall Rules Extra Config',
-            'type'        : 'text',
-            'mode'        : '' },
-        {   'id'          : 'root_password',
-            'description' : 'Root Password',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'web_password',
-            'description' : 'Web Password',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'vpn_type',
-            'description' : 'VPN Type',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'bridge_device',
-            'description' : 'Bridge Device',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'version',
-            'description' : 'OS Version',
-            'type'        : 'string',
-            'mode'        : '' },
-           
-            
-  
-                      
-        {   'id'          : 'second_netmask_bits',
-            'description' : 'Netmask Bits of Second Interface',
-            'type'        : 'int',
-            'mode'        : '' },
-        {   'id'          : 'second_network_address',
-            'description' : 'Network Address of Second Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'second_wlan_wep_key',
-            'description' : 'WLAN Key of Second Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'second_wlan_essid',
-            'description' : 'WLAN EssID of Second Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'second_wlan_channel',
-            'description' : 'WLAN Channel of Second Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'second_network_interface',
-            'description' : 'Second Network Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'second_network_type',
-            'description' : 'Network Type of Second Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'second_dhcp_range_start',
-            'description' : 'DHCP Range Start of Second Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'second_dhcp_range_end',
-            'description' : 'DHCP Range End of Second Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'second_dhcp_extra_config',
-            'description' : 'DHCP Extra Config of Second Interface',
-            'type'        : 'text',
-            'mode'        : '' },
-        {   'id'          : 'second_dhcp_wlan_port',
-            'description' : 'WLAN Port of Second Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        
-            
-            
-            
-        {   'id'          : 'third_netmask_bits',
-            'description' : 'Netmask Bits of Third Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'third_network_address',
-            'description' : 'Network Address of Third Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'third_network_interface',
-            'description' : 'Third Network Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'third_network_type',
-            'description' : 'Network Type of Third Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'third_dhcp_range_start',
-            'description' : 'DHCP Range Start of Third Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'third_dhcp_range_end',
-            'description' : 'DHCP Range End of Third Interface',
-            'type'        : 'string',
-            'mode'        : '' },
-        {   'id'          : 'third_dhcp_extra_config',
-            'description' : 'DHCP Extra Config of Third Interface',
-            'type'        : 'text',
-            'mode'        : '' }
-  
-    )
diff --git a/product/Nexedi/PropertySheet/WPNNode.py b/product/Nexedi/PropertySheet/WPNNode.py
deleted file mode 100755
index 19b01bd0ec..0000000000
--- a/product/Nexedi/PropertySheet/WPNNode.py
+++ /dev/null
@@ -1,41 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-class WPNNode:
-    """
-       Generic property sheet for a VPN node
-    """
-
-    _properties = (
-        {   'id'          : 'ip_address',
-            'description' : 'IP Address of the network device',
-            'type'        : 'int',
-            'mode'        : 'w' },
-    )
-
-    _categories = ()
diff --git a/product/Nexedi/PropertySheet/__init__.py b/product/Nexedi/PropertySheet/__init__.py
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/Nexedi/__init__.py b/product/Nexedi/__init__.py
deleted file mode 100755
index f6293e198b..0000000000
--- a/product/Nexedi/__init__.py
+++ /dev/null
@@ -1,53 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-"""
-    ERP5 Free Software ERP
-"""
-
-# Update ERP5 Globals
-from Products.ERP5Type.Utils import initializeProduct, updateGlobals
-import sys, Permissions
-this_module = sys.modules[ __name__ ]
-document_classes = updateGlobals( this_module, globals(), permissions_module = Permissions)
-
-# Define object classes and tools
-object_classes = ()
-portal_tools = ()
-content_classes = ()
-content_constructors = ()
-
-# Finish installation
-def initialize( context ):
-  import Document
-  initializeProduct(context, this_module, globals(),
-                         document_module = Document,
-                         document_classes = document_classes,
-                         object_classes = object_classes,
-                         portal_tools = portal_tools,
-                         content_constructors = content_constructors,
-                         content_classes = content_classes)
diff --git a/product/Nexedi/help/.cvsignore b/product/Nexedi/help/.cvsignore
deleted file mode 100755
index 432ed787d1..0000000000
--- a/product/Nexedi/help/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.AppleDouble
-*.pyc
-__init__.py
diff --git a/product/Nexedi/refresh.txt b/product/Nexedi/refresh.txt
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/product/Nexedi/skins/.cvsignore b/product/Nexedi/skins/.cvsignore
deleted file mode 100755
index 432ed787d1..0000000000
--- a/product/Nexedi/skins/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.AppleDouble
-*.pyc
-__init__.py
diff --git a/product/Nexedi/skins/nexedi_shop/.cvsignore b/product/Nexedi/skins/nexedi_shop/.cvsignore
deleted file mode 100755
index 432ed787d1..0000000000
--- a/product/Nexedi/skins/nexedi_shop/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.AppleDouble
-*.pyc
-__init__.py
diff --git a/product/Nexedi/skins/nexedi_shop/form_view.pt b/product/Nexedi/skins/nexedi_shop/form_view.pt
deleted file mode 100755
index 5c2fab59fc..0000000000
--- a/product/Nexedi/skins/nexedi_shop/form_view.pt
+++ /dev/null
@@ -1,203 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "DTD/xhtml1-strict.dtd">
-<?xml-stylesheet  href="erp5.css" rel="stylesheet" type="text/css"?>
-
-<span tal:replace="nothing">
-<!--
-Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-                   Thierry Faucher     <tf@nexedi.com>
-
-This program is Free Software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
--->
-</span>
-
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
-    xml:lang="en"
-    xmlns:tal="http://xml.zope.org/namespaces/tal"
-    xmlns:metal="http://xml.zope.org/namespaces/metal"
-    metal:use-macro="here/main_template/macros/master">
-
-  <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-      <title tal:content="template/title_or_id">The title</title>
-      <link href="erp5.css" rel="stylesheet" type="text/css"/>
-  </head>
-
-  <body><div metal:fill-slot="main">
-          <div class="Main">
-
-
-<span tal:define="gettext python:here.gettext;
-                  groups form/get_groups;
-                  field_errors python: request.get('field_errors',{});
-                  dummy python: request.set('here',here)">
- <form action="Test" id="main_form"
-    tal:attributes="action here/local_absolute_url;
-                    method form/method | nothing"
-    method="post"
-    enctype="multipart/form-data" >
-
-  <input type="hidden" name="form_id" value="form"
-    tal:attributes="value form/id | template/id | script/id">
-  <input type="hidden" name="object_uid" value="uid"
-    tal:attributes="value here/getUid">
-
-  <table class="Border" width="100%" tal:condition="python:len(form.get_fields_in_group(groups[0])) > 0
-                                          or len(form.get_fields_in_group(groups[1])) > 0">
-    <td valign="top">
-      <table>
-        <span tal:repeat="field python:form.get_fields_in_group(groups[0])">
-        <tr tal:condition="python:field.meta_type != 'HiddenStringField'">
-          <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: field_errors.has_key(field.id)
-                      and not field.is_required()"
-              class="error">
-          </td>
-          <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: (not field_errors.has_key(field.id))
-                      and not field.is_required()"
-              >
-          </td>
-          <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: field_errors.has_key(field.id)
-                      and field.is_required()"
-              class="reqerror">
-          </td>
-          <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: (not field_errors.has_key(field.id))
-                      and field.is_required()"
-              class="required">
-          </td>
-          <td tal:define="value python:request.get(field.id,None)">
-            <span tal:replace="structure python:field.render(value,request)" />
-          </td>
-        </tr>
-        <tr tal:condition="python: field_errors.has_key(field.id)">
-          <td>
-          </td>
-          <td tal:content="python:gettext(field_errors[field.id].error_text)"
-              class="error">
-          </td>
-        </tr>
-        </span>
-      </table>
-    </td>
-    <td valign="top" tal:condition="python: len(groups)>1">
-      <table>
-        <span tal:repeat="field python:form.get_fields_in_group(groups[1])">
-        <tr tal:condition="python:field.meta_type != 'HiddenStringField'">
-          <td tal:content="structure field/title"
-              tal:condition="python: field_errors.has_key(field.id)
-                      and not field.is_required()"
-              class="error">
-          </td>
-          <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: (not field_errors.has_key(field.id))
-                      and not field.is_required()"
-              >
-          </td>
-          <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: field_errors.has_key(field.id)
-                      and field.is_required()"
-              class="reqerror">
-          </td>
-          <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: (not field_errors.has_key(field.id))
-                      and field.is_required()"
-              class="required">
-          </td>
-          <td tal:define="value python:request.get(field.id,None)">
-            <span tal:replace="structure python:field.render(value,request)" />
-          </td>
-        </tr>
-        <tr tal:condition="python: field_errors.has_key(field.id)">
-          <td>
-          </td>
-          <td tal:content="python: gettext(field_errors[field.id].error_text)"
-              class="error">
-          </td>
-        </tr>
-        </span>
-      </table>
-    </td>
-  </table>
-
-  <span tal:condition="python: len(groups)>2">
-  <table class="Border" tal:condition="python:len(form.get_fields_in_group(groups[2])) > 0">
-  <td>
-    <table width="100%">
-        <span tal:repeat="field python:form.get_fields_in_group(groups[2])">
-         <tr tal:condition="python:field.meta_type != 'HiddenStringField'">
-           <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: field_errors.has_key(field.id)
-                      and not field.is_required()"
-              class="error">
-           </td>
-           <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: (not field_errors.has_key(field.id))
-                      and not field.is_required()"
-              >
-           </td>
-           <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: field_errors.has_key(field.id)
-                      and field.is_required()"
-              class="reqerror">
-           </td>
-           <td tal:content="structure python:gettext(field.title())"
-              tal:condition="python: (not field_errors.has_key(field.id))
-                      and field.is_required()"
-              class="required">
-           </td>
-          </tr>
-          <tr>
-            <td tal:define="value python:request.get(field.id,None)">
-             <span tal:replace="structure python:field.render(value,request)"/>
-            </td>
-          </tr>
-          <tr tal:condition="python: field_errors.has_key(field.id)">
-            <td tal:content="python: gettext(field_errors[field.id].error_text)"
-                class="error">
-            </td>
-          </tr>
-        </span>
-     </table>
-  </td>
-  </table>
-  </span>
-
-  <span tal:condition="python: len(groups)>3">
-    <span tal:repeat="field python:form.get_fields_in_group(groups[3])">
-      <span tal:define="value python:request.get(field.id,None)"
-        tal:replace="structure python:field.render(value,request)" />
-    </span>
-  </span>
-
-  <p align="center">
-    <input type="submit" alt="Save" value="Toto"
-      tal:condition="form/action | nothing"
-      title="Save" name="action:method"
-      tal:attributes="name python: form.action + ':method';
-                      alt python:gettext('Save');
-                      value python:gettext('Save')"/>
-  </p>
-
- </form>
-</span>
-          </div>
-      </div>
-  </body>
-</html>
-
-
diff --git a/product/Nexedi/skins/nexedi_shop/login_and_addToCart.dtml b/product/Nexedi/skins/nexedi_shop/login_and_addToCart.dtml
deleted file mode 100755
index 84214e91d6..0000000000
--- a/product/Nexedi/skins/nexedi_shop/login_and_addToCart.dtml
+++ /dev/null
@@ -1,58 +0,0 @@
-<dtml-if portal_skins>
- <dtml-if expr="portal_skins.updateSkinCookie()">
-  <dtml-call setupCurrentSkin>
- </dtml-if>
-</dtml-if>
-
-
-<dtml-with portal_properties>
-
-<dtml-if "portal_membership.isAnonymousUser()">
- <dtml-var standard_html_header>
- <dtml-call "REQUEST['RESPONSE'].expireCookie('__ac', path='/')">
- <h1 class="DesktopTitle"><dtml-gettext>Login failure</dtml-gettext></h1>
-
- <!-- <p><a href="&dtml.url-mail_password_form;">I forgot my password!</a></p>
- -->
-
- <p class="Desktop"><dtml-gettext>You are not currently logged in.
- Your username and or password may be incorrect.
- Your browser may also not be configured to accept
- HTTP cookies. You may try to login again by going back to the previous page.
- If you need help please contact</dtml-gettext>
- <a href="mailto:&dtml-email_from_address;">&dtml-email_from_address;</a>.
- </p>
- <dtml-var standard_html_footer>
-
-<dtml-else>
-
-<dtml-let member="portal_membership.getAuthenticatedMember()">
-
- <dtml-if "member.login_time == _.DateTime('2000/01/01') and
-           validate_email">
- <dtml-comment>
-  First login by this user.  Display message and offer password changer form.
-  Init login times to now
- </dtml-comment>
-
- <dtml-call
-
-"member.setProperties(last_login_time=ZopeTime(),
-login_time=ZopeTime())">
-
- <dtml-else>
-
- <dtml-call
- "member.setProperties(last_login_time=member.login_time)">
- <dtml-call "member.setProperties(login_time=ZopeTime())">
-
- </dtml-if>
-
-
-</dtml-let>
-
-</dtml-if>
-
-</dtml-with>
-
-<dtml-var "addToCart(REQUEST, quantity=quantity, variation_category_list=variation_category_list)">
diff --git a/product/Nexedi/skins/nexedi_shop/network_product_view.pt b/product/Nexedi/skins/nexedi_shop/network_product_view.pt
deleted file mode 100755
index 7bc99f5d80..0000000000
--- a/product/Nexedi/skins/nexedi_shop/network_product_view.pt
+++ /dev/null
@@ -1,19 +0,0 @@
-<html metal:use-macro="here/main_template/macros/master">
-  <head>
-    <title tal:content="template/title">The title</title>
-  </head>
-  <body>
-    <div metal:fill-slot="main"
-         tal:define="pss modules/Products/PythonScripts/standard">
-      <div CLASS="Desktop">
-        <TABLE BORDER="0" WIDTH="100%" cellspacing="3" cellpadding="3">
-        <TR>
-          <TD ALIGN="CENTER" VALIGN="top"
-              tal:content="structure here/network_product_presentation">
-          </TD>
-        </TR>
-        </TABLE>
-      </div>
-    </div>
-  </body>
-</html>
diff --git a/product/Nexedi/skins/nexedi_shop/pricing_view.form b/product/Nexedi/skins/nexedi_shop/pricing_view.form
deleted file mode 100755
index 020eee7d2c..0000000000
--- a/product/Nexedi/skins/nexedi_shop/pricing_view.form
+++ /dev/null
@@ -1,395 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-
-<form>
-  <title>Pricing Viewx</title>
-  <name>pricing_view</name>
-  <action>base_edit</action>
-  <enctype></enctype>
-  <method>POST</method>
-  <pt>form_view</pt>
-
-  <groups>
-    <group>
-      <title>left</title>
-      <fields>
-
-      <field><id>my_id</id> <type>StringField</type>
-        <values>
-          <extra></extra>
-          <description></description>
-          <truncate type="int">0</truncate>
-          <title>Elément</title>
-          <default></default>
-          <css_class></css_class>
-          <required type="int">1</required>
-          <display_maxwidth></display_maxwidth>
-          <external_validator></external_validator>
-          <max_length></max_length>
-          <hidden type="int">0</hidden>
-          <display_width type="int">10</display_width>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="too_long">Too much input was given.</message>
-        </messages>
-      </field>
-      <field><id>my_description</id> <type>TextAreaField</type>
-        <values>
-          <extra></extra>
-          <max_lines></max_lines>
-          <description></description>
-          <title>Description</title>
-          <default></default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <height type="int">3</height>
-          <external_validator></external_validator>
-          <width type="int">40</width>
-          <max_length></max_length>
-          <max_linelength></max_linelength>
-          <hidden type="int">0</hidden>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="too_many_lines">You entered too many lines.</message>
-          <message name="line_too_long">A line was too long.</message>
-          <message name="too_long">You entered too many characters.</message>
-        </messages>
-      </field>
-      <field><id>my_destination_base_price</id> <type>FloatField</type>
-        <values>
-          <extra></extra>
-          <description></description>
-          <title>Prix de vente par défaut</title>
-          <default></default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <display_maxwidth></display_maxwidth>
-          <external_validator></external_validator>
-          <hidden type="int">0</hidden>
-          <display_width type="int">10</display_width>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="not_float">You did not enter a floating point number.</message>
-        </messages>
-      </field>
-      <field><id>my_quantity_range_list</id> <type>MultiListField</type>
-        <values>
-          <extra></extra>
-          <description></description>
-          <title>Plages de quantité</title>
-          <default type="list">[]</default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <external_validator></external_validator>
-          <items type="list">[]</items>
-          <hidden type="int">0</hidden>
-          <alternate_name></alternate_name>
-          <size type="int">5</size>
-        </values>
-        <tales>
-          <items>python:here.portal_categories.quantity_range.getBaseItemList(base=0)</items>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="unknown_selection">You selected an item that was not in the list.</message>
-        </messages>
-      </field>
-      <field><id>matrixbox</id> <type>MatrixBox</type>
-        <values>
-          <external_validator></external_validator>
-          <editable_attributes type="list">[('destination_base_price', 'Price'), ('predicate_value', 'predicate_value')]</editable_attributes>
-          <description></description>
-          <title>Prix par quantités</title>
-          <default></default>
-          <css_class></css_class>
-          <global_attributes type="list">[('mapped_value_property_list', 'mapped_value_property_list'), ('predicate_operator', 'predicate_operator'), ('domain_base_category_list', 'domain_base_category_list')]</global_attributes>
-          <lines type="list">[('None', 'None')]</lines>
-          <cell_base_id>destination_base_price</cell_base_id>
-          <tabs type="list">[]</tabs>
-          <columns type="list">[('300', '300'), ('1000', '1000'), ('5000', '5000')]</columns>
-          <getter_method></getter_method>
-          <cell_range type="list">[]</cell_range>
-          <hidden type="int">0</hidden>
-          <all_editable_attributes type="list">[('destination_base_price', 'Price'), ('predicate_value', 'predicate_value')]</all_editable_attributes>
-          <setter_method></setter_method>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-          <lines>python:((None,None),)</lines>
-          <columns>python:here.portal_categories.getItemList(here.getQuantityRangeList())</columns>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-        </messages>
-      </field>
-      </fields>
-    </group>
-    <group>
-      <title>right</title>
-      <fields>
-
-      <field><id>my_network_connection_list</id> <type>MultiListField</type>
-        <values>
-          <extra></extra>
-          <description></description>
-          <title>Plage de tailles</title>
-          <default type="list">[]</default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <external_validator></external_validator>
-          <items type="list">[]</items>
-          <hidden type="int">0</hidden>
-          <alternate_name></alternate_name>
-          <size type="int">5</size>
-        </values>
-        <tales>
-          <default>here/getNetworkConnectionList</default>
-          <items>here/portal_categories/network_connection/getFormItemList</items>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="unknown_selection">You selected an item that was not in the list.</message>
-        </messages>
-      </field>
-      <field><id>my_default_network_connection</id> <type>ListField</type>
-        <values>
-          <extra></extra>
-          <description></description>
-          <first_item type="int">0</first_item>
-          <title>Taille centrale</title>
-          <default></default>
-          <items type="list">[]</items>
-          <required type="int">0</required>
-          <external_validator></external_validator>
-          <css_class></css_class>
-          <hidden type="int">0</hidden>
-          <alternate_name></alternate_name>
-          <size type="int">1</size>
-        </values>
-        <tales>
-          <items>here/portal_categories/network_connection/getFormItemList</items>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="unknown_selection">You selected an item that was not in the list.</message>
-        </messages>
-      </field>
-      </fields>
-    </group>
-    <group>
-      <title>center</title>
-      <fields>
-
-      <field><id>my_commentaires</id> <type>TextAreaField</type>
-        <values>
-          <extra></extra>
-          <max_lines></max_lines>
-          <description></description>
-          <title>Commentaires</title>
-          <default></default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <height type="int">2</height>
-          <external_validator></external_validator>
-          <width type="int">80</width>
-          <max_length></max_length>
-          <max_linelength></max_linelength>
-          <hidden type="int">0</hidden>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="too_many_lines">You entered too many lines.</message>
-          <message name="line_too_long">A line was too long.</message>
-          <message name="too_long">You entered too many characters.</message>
-        </messages>
-      </field>
-      </fields>
-    </group>
-    <group>
-      <title>bottom</title>
-      <fields>
-      <field><id>domain_base_category_list</id> <type>LinesField</type>
-        <values>
-          <extra></extra>
-          <max_lines></max_lines>
-          <description></description>
-          <title>Valid Domain</title>
-          <default type="list">['quantity_range']</default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <height type="int">5</height>
-          <external_validator></external_validator>
-          <width type="int">40</width>
-          <max_length></max_length>
-          <max_linelength></max_linelength>
-          <hidden type="int">1</hidden>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="too_many_lines">You entered too many lines.</message>
-          <message name="line_too_long">A line was too long.</message>
-          <message name="too_long">You entered too many characters.</message>
-        </messages>
-      </field>
-      <field><id>mapped_value_property_list</id> <type>LinesField</type>
-        <values>
-          <extra></extra>
-          <max_lines></max_lines>
-          <description></description>
-          <title>Modified categories</title>
-          <default type="list">['destination_base_price']</default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <height type="int">5</height>
-          <external_validator></external_validator>
-          <width type="int">40</width>
-          <max_length></max_length>
-          <max_linelength></max_linelength>
-          <hidden type="int">1</hidden>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="too_many_lines">You entered too many lines.</message>
-          <message name="line_too_long">A line was too long.</message>
-          <message name="too_long">You entered too many characters.</message>
-        </messages>
-      </field>
-      <field><id>predicate_operator</id> <type>StringField</type>
-        <values>
-          <extra></extra>
-          <description></description>
-          <truncate type="int">0</truncate>
-          <title>Operator</title>
-          <default>SUPERSET_OF</default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <display_maxwidth></display_maxwidth>
-          <external_validator></external_validator>
-          <max_length></max_length>
-          <hidden type="int">1</hidden>
-          <display_width type="int">20</display_width>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="too_long">Too much input was given.</message>
-        </messages>
-      </field>
-      </fields>
-    </group>
-    <group>
-      <title>hidden</title>
-      <fields>
-
-      <field><id>matrixbox_destination_base_price</id> <type>FloatField</type>
-        <values>
-          <extra></extra>
-          <description></description>
-          <title>Quantity</title>
-          <default></default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <display_maxwidth></display_maxwidth>
-          <external_validator></external_validator>
-          <hidden type="int">0</hidden>
-          <display_width type="int">10</display_width>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-          <default>cell/destination_base_price | string:</default>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="not_float">You did not enter a floating point number.</message>
-        </messages>
-      </field>
-      <field><id>matrixbox_predicate_value</id> <type>LinesField</type>
-        <values>
-          <extra></extra>
-          <max_lines></max_lines>
-          <description></description>
-          <title>matrixbox_predicate_value</title>
-          <default type="list">[]</default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <height type="int">5</height>
-          <external_validator></external_validator>
-          <width type="int">40</width>
-          <max_length></max_length>
-          <max_linelength></max_linelength>
-          <hidden type="int">1</hidden>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-          <default>python:('quantity_range/'+cell_index[1],)</default>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="too_many_lines">You entered too many lines.</message>
-          <message name="line_too_long">A line was too long.</message>
-          <message name="too_long">You entered too many characters.</message>
-        </messages>
-      </field>
-      <field><id>matrixbox_title</id> <type>StringField</type>
-        <values>
-          <extra></extra>
-          <description></description>
-          <truncate type="int">0</truncate>
-          <title>matrixbox_title</title>
-          <default></default>
-          <css_class></css_class>
-          <required type="int">0</required>
-          <display_maxwidth></display_maxwidth>
-          <external_validator></external_validator>
-          <max_length></max_length>
-          <hidden type="int">0</hidden>
-          <display_width type="int">20</display_width>
-          <alternate_name></alternate_name>
-        </values>
-        <tales>
-          <default>cell/getTitle | string:</default>
-        </tales>
-        <messages>
-          <message name="external_validator_failed">The input failed the external validator.</message>
-          <message name="required_not_found">Input is required but no input given.</message>
-          <message name="too_long">Too much input was given.</message>
-        </messages>
-      </field>
-      </fields>
-    </group>
-  </groups>
-</form>
-- 
2.30.9