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"> &dtml-money_unit;</B> <dtml-gettext>(incl. VAT)</dtml-gettext> / - <b><dtml-var expr="all_price " - fmt="%0.2f"> &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"> </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;"> - <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=""> - <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;"> - <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=""> - <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;"> - <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=""> - <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;"> - <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=""> - <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 - <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> </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> </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;"> - <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=""> - <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;"> - <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=""> - <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;"> - <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=""> - <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;"> - <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=""> - <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 - <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> </TD> - <TD width="1%" nowrap><B><dtml-gettext>Price / Piece</dtml-gettext></B> </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"> </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"> &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"> &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"> &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"> &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"> &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> - <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> </TD> - <TD width="1%" nowrap><B><dtml-gettext>Price / Piece</dtml-gettext></B> </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"> </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"> &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"> &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"> &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"> &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"> &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> - <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> </TD> - <TD width="1%" nowrap><B><dtml-gettext>Price / Piece</dtml-gettext></B> </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> - <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"> &dtml-money_unit; </TD> - <TD width="1%" nowrap align="right"><dtml-var total_price fmt="%0.2f"> &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"> &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"> &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"> &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"> &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"> &dtml-money_unit;</b></TD> - </TR> - <TR> - <TD HEIGHT="5" COLSPAN="4"> </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> "> - <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;"> - <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=""> - <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;"> - <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=""> - <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;"> - <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=""> - <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;"> - <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=""> - <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 - <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> | - <dtml-if "not portal_membership.isAnonymousUser()"> - <a class="topbanner" href="&dtml-secure_url;/&dtml-lang;/shoppingcart_view"><dtml-gettext>My Cart</dtml-gettext></a> | - </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()"> - | <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> </td> - <td width="1%" nowrap><B i18n:translate="">Price / Piece</B> </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> - <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 %s ' % (price, request.money_unit)"></td> - <td width="1%" nowrap align="right" - tal:content="structure python:'%0.2f %s ' % (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 %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 %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 %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 %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 %s' % (request.all_price * (1.0 + here.portal_properties.vat),request.money_unit)"> - </b></td> - </tr> - <tr> - <td HEIGHT="5" COLSPAN="4"> </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')"> - <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" /> - <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=""> - <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