Commit 425c6dc5 authored by Romain Courteaud's avatar Romain Courteaud

We want to create ERP5 Site without catalog.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@8399 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 0253b5c3
...@@ -34,84 +34,78 @@ from os import path ...@@ -34,84 +34,78 @@ from os import path
from zLOG import LOG from zLOG import LOG
from string import join from string import join
import os import os
MARKER = [] MARKER = []
# Site Creation DTML # Site Creation DTML
manage_addERP5SiteForm = Globals.HTMLFile('dtml/addERP5Site', globals()) manage_addERP5SiteForm = Globals.HTMLFile('dtml/addERP5Site', globals())
manage_addERP5SiteForm.__name__ = 'addERP5Site' manage_addERP5SiteForm.__name__ = 'addERP5Site'
# ERP5Site Constructor # ERP5Site Constructor
def manage_addERP5Site( self def manage_addERP5Site(self,
, id id,
, title = 'ERP5' title='ERP5',
, description = '' description='',
, create_userfolder = 1 create_userfolder=1,
, create_activities = 1 create_activities=1,
, email_from_address = 'postmaster@localhost' email_from_address='postmaster@localhost',
, email_from_name = 'Portal Administrator' email_from_name='Portal Administrator',
, validate_email = 0 validate_email=0,
, erp5_sql_connection_type = 'Z MySQL Database Connection' erp5_sql_connection_type='Z MySQL Database Connection',
, erp5_sql_connection_string = 'test test' erp5_sql_connection_string='test test',
, erp5_sql_deferred_connection_type = 'Z MySQL Deferred Database Connection' erp5_sql_deferred_connection_type = \
, erp5_sql_deferred_connection_string = 'test test' 'Z MySQL Deferred Database Connection',
, cmf_activity_sql_connection_type = 'Z MySQL Database Connection' erp5_sql_deferred_connection_string = 'test test',
, cmf_activity_sql_connection_string = 'test test' cmf_activity_sql_connection_type= \
, light_install = 0 'Z MySQL Database Connection',
, reindex = 1 cmf_activity_sql_connection_string='test test',
, RESPONSE = None light_install=0,
): reindex=1,
""" RESPONSE=None):
Adds a portal instance. '''
""" Adds a portal instance.
'''
gen = ERP5Generator() gen = ERP5Generator()
id = str(id).strip() id = str(id).strip()
p = gen.create( self p = gen.create(self,
, id id,
, create_userfolder create_userfolder,
, erp5_sql_connection_type erp5_sql_connection_type,
, erp5_sql_connection_string erp5_sql_connection_string,
, erp5_sql_deferred_connection_type erp5_sql_deferred_connection_type,
, erp5_sql_deferred_connection_string erp5_sql_deferred_connection_string,
, cmf_activity_sql_connection_type cmf_activity_sql_connection_type,
, cmf_activity_sql_connection_string cmf_activity_sql_connection_string,
, create_activities create_activities=create_activities,
, light_install = light_install light_install=light_install,
, reindex = reindex reindex=reindex)
) gen.setupDefaultProperties(p,
gen.setupDefaultProperties( p title,
, title description,
, description email_from_address,
, email_from_address email_from_name,
, email_from_name validate_email)
, validate_email
)
if RESPONSE is not None: if RESPONSE is not None:
RESPONSE.redirect(p.absolute_url()) RESPONSE.redirect(p.absolute_url())
class ERP5Site(FolderMixIn, CMFSite): class ERP5Site(FolderMixIn, CMFSite):
""" """
The *only* function this class should have is to help in the setup The *only* function this class should have is to help in the setup
of a new ERP5. It should not assist in the functionality at all. of a new ERP5. It should not assist in the functionality at all.
""" """
meta_type = 'ERP5 Site' meta_type = 'ERP5 Site'
constructors = (manage_addERP5SiteForm, manage_addERP5Site, ) constructors = (manage_addERP5SiteForm, manage_addERP5Site, )
uid = 0 uid = 0
last_id = 0 last_id = 0
icon = 'portal.gif' icon = 'portal.gif'
_properties = ( { 'id' : 'title' _properties = (
, 'type': 'string' { 'id':'title',
} 'type':'string'},
, { 'id' : 'description' { 'id':'description',
, 'type': 'text' 'type':'text'},
} )
)
title = '' title = ''
description = '' description = ''
...@@ -119,7 +113,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -119,7 +113,6 @@ class ERP5Site(FolderMixIn, CMFSite):
security = ClassSecurityInfo() security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation) security.declareObjectProtected(Permissions.AccessContentsInformation)
security.declareProtected(Permissions.View, 'view') security.declareProtected(Permissions.View, 'view')
def view(self): def view(self):
""" """
...@@ -128,27 +121,25 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -128,27 +121,25 @@ class ERP5Site(FolderMixIn, CMFSite):
""" """
return self.index_html() return self.index_html()
def hasObject(self, id): def hasObject(self, id):
""" """
Check if the portal has an id. Check if the portal has an id.
""" """
return id in self.objectIds() return id in self.objectIds()
security.declareProtected(Permissions.AccessContentsInformation,
security.declareProtected(Permissions.AccessContentsInformation, 'getPortalObject') 'getPortalObject')
def getPortalObject(self): def getPortalObject(self):
return self return self
security.declareProtected(Permissions.AccessContentsInformation,
security.declareProtected(Permissions.AccessContentsInformation, 'getTitle') 'getTitle')
def getTitle(self): def getTitle(self):
""" """
Return the title. Return the title.
""" """
return self.title return self.title
security.declareProtected(Permissions.AccessContentsInformation, 'getUid') security.declareProtected(Permissions.AccessContentsInformation, 'getUid')
def getUid(self): def getUid(self):
""" """
...@@ -160,27 +151,24 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -160,27 +151,24 @@ class ERP5Site(FolderMixIn, CMFSite):
""" """
return getattr(self, 'uid', 0) return getattr(self, 'uid', 0)
security.declareProtected(Permissions.AccessContentsInformation,
security.declareProtected(Permissions.AccessContentsInformation, 'getParentUid') 'getParentUid')
def getParentUid(self): def getParentUid(self):
""" """
A portal has no parent A portal has no parent
""" """
return self.getUid() return self.getUid()
# Required to allow content creation outside folders # Required to allow content creation outside folders
security.declareProtected(Permissions.View, 'getIdGroup') security.declareProtected(Permissions.View, 'getIdGroup')
def getIdGroup(self): def getIdGroup(self):
return None return None
# Required to allow content creation outside folders # Required to allow content creation outside folders
security.declareProtected(Permissions.ModifyPortalContent, 'setLastId') security.declareProtected(Permissions.ModifyPortalContent, 'setLastId')
def setLastId(self, id): def setLastId(self, id):
self.last_id = id self.last_id = id
security.declareProtected(Permissions.AccessContentsInformation, 'getPath') security.declareProtected(Permissions.AccessContentsInformation, 'getPath')
def getPath(self, REQUEST=None): def getPath(self, REQUEST=None):
""" """
...@@ -188,8 +176,8 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -188,8 +176,8 @@ class ERP5Site(FolderMixIn, CMFSite):
""" """
return join(self.getPhysicalPath(),'/') return join(self.getPhysicalPath(),'/')
security.declareProtected(Permissions.AccessContentsInformation,
security.declareProtected(Permissions.AccessContentsInformation, 'searchFolder') 'searchFolder')
def searchFolder(self, **kw): def searchFolder(self, **kw):
""" """
Search the content of a folder by calling Search the content of a folder by calling
...@@ -198,16 +186,17 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -198,16 +186,17 @@ class ERP5Site(FolderMixIn, CMFSite):
if not kw.has_key('parent_uid'): if not kw.has_key('parent_uid'):
kw['parent_uid'] = self.uid kw['parent_uid'] = self.uid
kw2 = {} kw2 = {}
# Remove useless matter before calling the catalog. In particular, consider empty # Remove useless matter before calling the
# strings as None values. # catalog. In particular, consider empty
# strings as None values
for cname in kw.keys(): for cname in kw.keys():
if kw[cname] not in ('', None): if kw[cname] not in ('', None):
kw2[cname] = kw[cname] kw2[cname] = kw[cname]
# The method to call to search the folder content has to be called z_search_folder. # The method to call to search the folder
# content has to be called z_search_folder
method = self.portal_catalog.searchResults method = self.portal_catalog.searchResults
return method(**kw2) return method(**kw2)
security.declareProtected(Permissions.AccessContentsInformation, 'countFolder') security.declareProtected(Permissions.AccessContentsInformation, 'countFolder')
def countFolder(self, **kw): def countFolder(self, **kw):
""" """
...@@ -217,26 +206,28 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -217,26 +206,28 @@ class ERP5Site(FolderMixIn, CMFSite):
if not kw.has_key('parent_uid'): if not kw.has_key('parent_uid'):
kw['parent_uid'] = self.uid kw['parent_uid'] = self.uid
kw2 = {} kw2 = {}
# Remove useless matter before calling the catalog. In particular, consider empty # Remove useless matter before calling the
# strings as None values # catalog. In particular, consider empty
# strings as None values
for cname in kw.keys(): for cname in kw.keys():
if kw[cname] not in ('', None): if kw[cname] not in ('', None):
kw2[cname] = kw[cname] kw2[cname] = kw[cname]
# The method to call to search the folder content has to be called z_search_folder. # The method to call to search the folder
# content has to be called z_search_folder
method = self.portal_catalog.countResults method = self.portal_catalog.countResults
return method(**kw2) return method(**kw2)
# Proxy methods for security reasons # Proxy methods for security reasons
def getOwnerInfo(self): def getOwnerInfo(self):
return self.owner_info() return self.owner_info()
security.declarePublic('getOrderedGlobalActionList') security.declarePublic('getOrderedGlobalActionList')
def getOrderedGlobalActionList(self, action_list): def getOrderedGlobalActionList(self, action_list):
""" """
Returns a dictionnary of actions, sorted by type of object. Returns a dictionnary of actions, sorted by type of object
TODO: This should absolutely be rewritten by using clean concepts to separate worklists.
This should absolutely be rewritten by using clean
concepts to separate worklists XXX
""" """
sorted_workflow_actions = {} sorted_workflow_actions = {}
sorted_global_actions = [] sorted_global_actions = []
...@@ -258,28 +249,28 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -258,28 +249,28 @@ class ERP5Site(FolderMixIn, CMFSite):
sorted_global_actions.extend(other_global_actions) sorted_global_actions.extend(other_global_actions)
return sorted_global_actions return sorted_global_actions
def setupDefaultProperties(self, p, title, description, def setupDefaultProperties(self, p, title, description,
email_from_address, email_from_name, email_from_address, email_from_name,
validate_email validate_email
): ):
CMFSite.setupDefaultProperties(self, p, title, description, CMFSite.setupDefaultProperties(self, p, title, description,
email_from_address, email_from_name, email_from_address, email_from_name,
validate_email) validate_email)
# Portal methods are based on the concept of having portal-specific parameters # Portal methods are based on the concept of having portal-specific
# for customization. In the past, we used global parameters, but it was not very good # parameters for customization. In the past, we used global parameters,
# because it was very difficult to customize the settings for each portal site. # but it was not very good because it was very difficult
# to customize the settings for each portal site.
def _getPortalConfiguration(self, id): def _getPortalConfiguration(self, id):
""" """
Get a portal-specific configuration. Get a portal-specific configuration.
Current implementation is using properties in a portal object. Current implementation is using properties in a portal object.
If not found, try to get a default value for backward compatibility. If not found, try to get a default value for backward compatibility.
This implementation can be improved by gathering information from appropriate places, This implementation can be improved by gathering information
such as portal_types, portal_categories and portal_workflow. from appropriate places, such as portal_types, portal_categories
and portal_workflow.
""" """
if self.hasProperty(id): if self.hasProperty(id):
return self.getProperty(id) return self.getProperty(id)
...@@ -287,10 +278,9 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -287,10 +278,9 @@ class ERP5Site(FolderMixIn, CMFSite):
# Fall back to the default. # Fall back to the default.
return getattr(ERP5Defaults, id, None) return getattr(ERP5Defaults, id, None)
def _getPortalGroupedTypeList(self, group): def _getPortalGroupedTypeList(self, group):
""" """
Return a list of portal types classified to a specific group. Return a list of portal types classified to a specific group.
""" """
def getTypeList(group): def getTypeList(group):
type_list = [] type_list = []
...@@ -299,16 +289,14 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -299,16 +289,14 @@ class ERP5Site(FolderMixIn, CMFSite):
type_list.append(pt.getId()) type_list.append(pt.getId())
return tuple(type_list) return tuple(type_list)
getTypeList = CachingMethod( getTypeList getTypeList = CachingMethod(getTypeList,
, id = ('_getPortalGroupedTypeList', group) id=('_getPortalGroupedTypeList', group),
, cache_duration = 3600 cache_duration=3600)
)
return getTypeList(group) return getTypeList(group)
def _getPortalGroupedCategoryList(self, group): def _getPortalGroupedCategoryList(self, group):
""" """
Return a list of base categories classified to a specific group. Return a list of base categories classified to a specific group.
""" """
def getCategoryList(group): def getCategoryList(group):
category_list = [] category_list = []
...@@ -317,16 +305,15 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -317,16 +305,15 @@ class ERP5Site(FolderMixIn, CMFSite):
category_list.append(bc.getId()) category_list.append(bc.getId())
return tuple(category_list) return tuple(category_list)
getCategoryList = CachingMethod( getCategoryList getCategoryList = CachingMethod(
, id = ('_getPortalGroupedCategoryList', group) getCategoryList,
, cache_duration = 3600 id=('_getPortalGroupedCategoryList', group),
) cache_duration=3600)
return getCategoryList(group) return getCategoryList(group)
def _getPortalGroupedStateList(self, group): def _getPortalGroupedStateList(self, group):
""" """
Return a list of workflow states classified to a specific group. Return a list of workflow states classified to a specific group.
""" """
def getStateList(group): def getStateList(group):
state_dict = {} state_dict = {}
...@@ -337,28 +324,27 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -337,28 +324,27 @@ class ERP5Site(FolderMixIn, CMFSite):
state_dict[state.getId()] = None state_dict[state.getId()] = None
return tuple(state_dict.keys()) return tuple(state_dict.keys())
getStateList = CachingMethod( getStateList getStateList = CachingMethod(getStateList,
, id = ('_getPortalGroupedStateList', group) id=('_getPortalGroupedStateList', group),
, cache_duration = 3600 cache_duration=3600)
)
return getStateList(group) return getStateList(group)
security.declareProtected(Permissions.AccessContentsInformation,
security.declareProtected( Permissions.AccessContentsInformation 'getPortalDefaultSectionCategory')
, 'getPortalDefaultSectionCategory')
def getPortalDefaultSectionCategory(self): def getPortalDefaultSectionCategory(self):
""" """
Return a default section category. This method is deprecated. Return a default section category. This method is deprecated.
""" """
LOG('ERP5Site', 0, 'getPortalDefaultSectionCategory is deprecated;'+ LOG('ERP5Site', 0, 'getPortalDefaultSectionCategory is deprecated;'+
' use portal_preferences.getPreferredSectionCategory instead.') ' use portal_preferences.getPreferredSectionCategory instead.')
section_category = self.portal_preferences.getPreferredSectionCategory() section_category = self.portal_preferences.getPreferredSectionCategory()
# XXX This is only for backward-compatibility. # XXX This is only for backward-compatibility.
if not section_category: if not section_category:
section_category = self._getPortalConfiguration( section_category = self._getPortalConfiguration(
'portal_default_section_category') 'portal_default_section_category')
return section_category
return section_category
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalResourceTypeList') 'getPortalResourceTypeList')
...@@ -369,7 +355,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -369,7 +355,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('resource') or \ return self._getPortalGroupedTypeList('resource') or \
self._getPortalConfiguration('portal_resource_type_list') self._getPortalConfiguration('portal_resource_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalSubVariationTypeList') 'getPortalSubVariationTypeList')
def getPortalSubVariationTypeList(self): def getPortalSubVariationTypeList(self):
...@@ -378,7 +363,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -378,7 +363,6 @@ class ERP5Site(FolderMixIn, CMFSite):
""" """
return self._getPortalGroupedTypeList('sub_variation') return self._getPortalGroupedTypeList('sub_variation')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalSubVariationBaseCategoryList') 'getPortalSubVariationBaseCategoryList')
def getPortalSubVariationBaseCategoryList(self): def getPortalSubVariationBaseCategoryList(self):
...@@ -387,7 +371,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -387,7 +371,6 @@ class ERP5Site(FolderMixIn, CMFSite):
""" """
return self._getPortalGroupedCategoryList('sub_variation') return self._getPortalGroupedCategoryList('sub_variation')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalVariationTypeList') 'getPortalVariationTypeList')
def getPortalVariationTypeList(self): def getPortalVariationTypeList(self):
...@@ -397,7 +380,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -397,7 +380,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('variation') or \ return self._getPortalGroupedTypeList('variation') or \
self._getPortalConfiguration('portal_variation_type_list') self._getPortalConfiguration('portal_variation_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalNodeTypeList') 'getPortalNodeTypeList')
def getPortalNodeTypeList(self): def getPortalNodeTypeList(self):
...@@ -407,7 +389,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -407,7 +389,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('node') or \ return self._getPortalGroupedTypeList('node') or \
self._getPortalConfiguration('portal_node_type_list') self._getPortalConfiguration('portal_node_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalPaymentNodeTypeList') 'getPortalPaymentNodeTypeList')
def getPortalPaymentNodeTypeList(self): def getPortalPaymentNodeTypeList(self):
...@@ -417,7 +398,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -417,7 +398,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('payment_node') or \ return self._getPortalGroupedTypeList('payment_node') or \
self._getPortalConfiguration('portal_payment_node_type_list') self._getPortalConfiguration('portal_payment_node_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalInvoiceTypeList') 'getPortalInvoiceTypeList')
def getPortalInvoiceTypeList(self): def getPortalInvoiceTypeList(self):
...@@ -427,7 +407,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -427,7 +407,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('invoice') or \ return self._getPortalGroupedTypeList('invoice') or \
self._getPortalConfiguration('portal_invoice_type_list') self._getPortalConfiguration('portal_invoice_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalOrderTypeList') 'getPortalOrderTypeList')
def getPortalOrderTypeList(self): def getPortalOrderTypeList(self):
...@@ -437,7 +416,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -437,7 +416,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('order') or \ return self._getPortalGroupedTypeList('order') or \
self._getPortalConfiguration('portal_order_type_list') self._getPortalConfiguration('portal_order_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalDeliveryTypeList') 'getPortalDeliveryTypeList')
def getPortalDeliveryTypeList(self): def getPortalDeliveryTypeList(self):
...@@ -447,7 +425,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -447,7 +425,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('delivery') or \ return self._getPortalGroupedTypeList('delivery') or \
self._getPortalConfiguration('portal_delivery_type_list') self._getPortalConfiguration('portal_delivery_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalTransformationTypeList') 'getPortalTransformationTypeList')
def getPortalTransformationTypeList(self): def getPortalTransformationTypeList(self):
...@@ -457,7 +434,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -457,7 +434,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('transformation') or \ return self._getPortalGroupedTypeList('transformation') or \
self._getPortalConfiguration('portal_transformation_type_list') self._getPortalConfiguration('portal_transformation_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalVariationBaseCategoryList') 'getPortalVariationBaseCategoryList')
def getPortalVariationBaseCategoryList(self): def getPortalVariationBaseCategoryList(self):
...@@ -467,7 +443,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -467,7 +443,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedCategoryList('variation') or \ return self._getPortalGroupedCategoryList('variation') or \
self._getPortalConfiguration('portal_variation_base_category_list') self._getPortalConfiguration('portal_variation_base_category_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalOptionBaseCategoryList') 'getPortalOptionBaseCategoryList')
def getPortalOptionBaseCategoryList(self): def getPortalOptionBaseCategoryList(self):
...@@ -477,7 +452,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -477,7 +452,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedCategoryList('option') or \ return self._getPortalGroupedCategoryList('option') or \
self._getPortalConfiguration('portal_option_base_category_list') self._getPortalConfiguration('portal_option_base_category_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalInvoiceMovementTypeList') 'getPortalInvoiceMovementTypeList')
def getPortalInvoiceMovementTypeList(self): def getPortalInvoiceMovementTypeList(self):
...@@ -487,7 +461,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -487,7 +461,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('invoice_movement') or \ return self._getPortalGroupedTypeList('invoice_movement') or \
self._getPortalConfiguration('portal_invoice_movement_type_list') self._getPortalConfiguration('portal_invoice_movement_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalOrderMovementTypeList') 'getPortalOrderMovementTypeList')
def getPortalOrderMovementTypeList(self): def getPortalOrderMovementTypeList(self):
...@@ -497,7 +470,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -497,7 +470,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('order_movement') or \ return self._getPortalGroupedTypeList('order_movement') or \
self._getPortalConfiguration('portal_order_movement_type_list') self._getPortalConfiguration('portal_order_movement_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalDeliveryMovementTypeList') 'getPortalDeliveryMovementTypeList')
def getPortalDeliveryMovementTypeList(self): def getPortalDeliveryMovementTypeList(self):
...@@ -507,9 +479,8 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -507,9 +479,8 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('delivery_movement') or \ return self._getPortalGroupedTypeList('delivery_movement') or \
self._getPortalConfiguration('portal_delivery_movement_type_list') self._getPortalConfiguration('portal_delivery_movement_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalSupplyTypeList') 'getPortalSupplyTypeList')
def getPortalSupplyTypeList(self): def getPortalSupplyTypeList(self):
""" """
Return supply types. Return supply types.
...@@ -517,9 +488,8 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -517,9 +488,8 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('supply') or \ return self._getPortalGroupedTypeList('supply') or \
self._getPortalConfiguration('portal_supply_type_list') self._getPortalConfiguration('portal_supply_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalSupplyPathTypeList') 'getPortalSupplyPathTypeList')
def getPortalSupplyPathTypeList(self): def getPortalSupplyPathTypeList(self):
""" """
Return supply movement types. Return supply movement types.
...@@ -527,7 +497,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -527,7 +497,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('supply_path') or \ return self._getPortalGroupedTypeList('supply_path') or \
self._getPortalConfiguration('portal_supply_path_type_list') self._getPortalConfiguration('portal_supply_path_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalAcquisitionMovementTypeList') 'getPortalAcquisitionMovementTypeList')
def getPortalAcquisitionMovementTypeList(self): def getPortalAcquisitionMovementTypeList(self):
...@@ -538,7 +507,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -538,7 +507,6 @@ class ERP5Site(FolderMixIn, CMFSite):
list(self.getPortalDeliveryMovementTypeList()) + list(self.getPortalDeliveryMovementTypeList()) +
list(self.getPortalInvoiceMovementTypeList())) list(self.getPortalInvoiceMovementTypeList()))
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalMovementTypeList') 'getPortalMovementTypeList')
def getPortalMovementTypeList(self): def getPortalMovementTypeList(self):
...@@ -548,8 +516,7 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -548,8 +516,7 @@ class ERP5Site(FolderMixIn, CMFSite):
return tuple(list(self.getPortalOrderMovementTypeList()) + return tuple(list(self.getPortalOrderMovementTypeList()) +
list(self.getPortalDeliveryMovementTypeList()) + list(self.getPortalDeliveryMovementTypeList()) +
list(self.getPortalInvoiceMovementTypeList()) + list(self.getPortalInvoiceMovementTypeList()) +
['Simulation Movement']) ['Simulation Movement'])
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalSimulatedMovementTypeList') 'getPortalSimulatedMovementTypeList')
...@@ -558,8 +525,7 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -558,8 +525,7 @@ class ERP5Site(FolderMixIn, CMFSite):
Return simulated movement types. Return simulated movement types.
""" """
return tuple([x for x in self.getPortalMovementTypeList() \ return tuple([x for x in self.getPortalMovementTypeList() \
if x not in self.getPortalContainerTypeList()]) if x not in self.getPortalContainerTypeList()])
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalContainerTypeList') 'getPortalContainerTypeList')
...@@ -570,7 +536,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -570,7 +536,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('container') or \ return self._getPortalGroupedTypeList('container') or \
self._getPortalConfiguration('portal_container_type_list') self._getPortalConfiguration('portal_container_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalContainerLineTypeList') 'getPortalContainerLineTypeList')
def getPortalContainerLineTypeList(self): def getPortalContainerLineTypeList(self):
...@@ -580,7 +545,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -580,7 +545,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('container_line') or \ return self._getPortalGroupedTypeList('container_line') or \
self._getPortalConfiguration('portal_container_line_type_list') self._getPortalConfiguration('portal_container_line_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalItemTypeList') 'getPortalItemTypeList')
def getPortalItemTypeList(self): def getPortalItemTypeList(self):
...@@ -590,7 +554,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -590,7 +554,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('item') or \ return self._getPortalGroupedTypeList('item') or \
self._getPortalConfiguration('portal_item_type_list') self._getPortalConfiguration('portal_item_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalDiscountTypeList') 'getPortalDiscountTypeList')
def getPortalDiscountTypeList(self): def getPortalDiscountTypeList(self):
...@@ -600,7 +563,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -600,7 +563,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('discount') or \ return self._getPortalGroupedTypeList('discount') or \
self._getPortalConfiguration('portal_discount_type_list') self._getPortalConfiguration('portal_discount_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalAlarmTypeList') 'getPortalAlarmTypeList')
def getPortalAlarmTypeList(self): def getPortalAlarmTypeList(self):
...@@ -610,7 +572,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -610,7 +572,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('alarm') or \ return self._getPortalGroupedTypeList('alarm') or \
self._getPortalConfiguration('portal_alarm_type_list') self._getPortalConfiguration('portal_alarm_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalPaymentConditionTypeList') 'getPortalPaymentConditionTypeList')
def getPortalPaymentConditionTypeList(self): def getPortalPaymentConditionTypeList(self):
...@@ -620,7 +581,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -620,7 +581,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedTypeList('payment_condition') or \ return self._getPortalGroupedTypeList('payment_condition') or \
self._getPortalConfiguration('portal_payment_condition_type_list') self._getPortalConfiguration('portal_payment_condition_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalBalanceTransactionLineTypeList') 'getPortalBalanceTransactionLineTypeList')
def getPortalBalanceTransactionLineTypeList(self): def getPortalBalanceTransactionLineTypeList(self):
...@@ -628,8 +588,8 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -628,8 +588,8 @@ class ERP5Site(FolderMixIn, CMFSite):
Return balance transaction line types. Return balance transaction line types.
""" """
return self._getPortalGroupedTypeList('balance_transaction_line') or \ return self._getPortalGroupedTypeList('balance_transaction_line') or \
self._getPortalConfiguration('portal_balance_transaction_line_type_list') self._getPortalConfiguration(
'portal_balance_transaction_line_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalCurrentInventoryStateList') 'getPortalCurrentInventoryStateList')
...@@ -640,7 +600,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -640,7 +600,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedStateList('current_inventory') or \ return self._getPortalGroupedStateList('current_inventory') or \
self._getPortalConfiguration('portal_current_inventory_state_list') self._getPortalConfiguration('portal_current_inventory_state_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalDraftOrderStateList') 'getPortalDraftOrderStateList')
def getPortalDraftOrderStateList(self): def getPortalDraftOrderStateList(self):
...@@ -650,7 +609,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -650,7 +609,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedStateList('draft_order') or \ return self._getPortalGroupedStateList('draft_order') or \
self._getPortalConfiguration('portal_draft_order_state_list') self._getPortalConfiguration('portal_draft_order_state_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalPlannedOrderStateList') 'getPortalPlannedOrderStateList')
def getPortalPlannedOrderStateList(self): def getPortalPlannedOrderStateList(self):
...@@ -660,7 +618,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -660,7 +618,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedStateList('planned_order') or \ return self._getPortalGroupedStateList('planned_order') or \
self._getPortalConfiguration('portal_planned_order_state_list') self._getPortalConfiguration('portal_planned_order_state_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalReservedInventoryStateList') 'getPortalReservedInventoryStateList')
def getPortalReservedInventoryStateList(self): def getPortalReservedInventoryStateList(self):
...@@ -668,8 +625,7 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -668,8 +625,7 @@ class ERP5Site(FolderMixIn, CMFSite):
Return reserved inventory states. Return reserved inventory states.
""" """
return self._getPortalGroupedStateList('reserved_inventory') or \ return self._getPortalGroupedStateList('reserved_inventory') or \
self._getPortalConfiguration('portal_reserved_inventory_state_list') self._getPortalConfiguration('portal_reserved_inventory_state_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalFutureInventoryStateList') 'getPortalFutureInventoryStateList')
...@@ -680,14 +636,15 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -680,14 +636,15 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedStateList('future_inventory') or \ return self._getPortalGroupedStateList('future_inventory') or \
self._getPortalConfiguration('portal_future_inventory_state_list') self._getPortalConfiguration('portal_future_inventory_state_list')
security.declareProtected(Permissions.AccessContentsInformation,
security.declareProtected(Permissions.AccessContentsInformation, 'getPortalUpdatableAmortisationTransactionStateList') 'getPortalUpdatableAmortisationTransactionStateList')
def getPortalUpdatableAmortisationTransactionStateList(self): def getPortalUpdatableAmortisationTransactionStateList(self):
""" """
Return states when Amortisation Transaction can be updated by amortisation_transaction_builder. Return states when Amortisation Transaction can be updated
by amortisation_transaction_builder.
""" """
return self._getPortalConfiguration('portal_updatable_amortisation_transaction_state_list') return self._getPortalConfiguration(
'portal_updatable_amortisation_transaction_state_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalColumnBaseCategoryList') 'getPortalColumnBaseCategoryList')
...@@ -698,7 +655,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -698,7 +655,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedCategoryList('column') or \ return self._getPortalGroupedCategoryList('column') or \
self._getPortalConfiguration('portal_column_base_category_list') self._getPortalConfiguration('portal_column_base_category_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalLineBaseCategoryList') 'getPortalLineBaseCategoryList')
def getPortalLineBaseCategoryList(self): def getPortalLineBaseCategoryList(self):
...@@ -708,7 +664,6 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -708,7 +664,6 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedCategoryList('line') or \ return self._getPortalGroupedCategoryList('line') or \
self._getPortalConfiguration('portal_line_base_category_list') self._getPortalConfiguration('portal_line_base_category_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalTabBaseCategoryList') 'getPortalTabBaseCategoryList')
def getPortalTabBaseCategoryList(self): def getPortalTabBaseCategoryList(self):
...@@ -718,58 +673,56 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -718,58 +673,56 @@ class ERP5Site(FolderMixIn, CMFSite):
return self._getPortalGroupedCategoryList('tab') or \ return self._getPortalGroupedCategoryList('tab') or \
self._getPortalConfiguration('portal_tab_base_category_list') self._getPortalConfiguration('portal_tab_base_category_list')
def getPortalDefaultGapRoot(self): def getPortalDefaultGapRoot(self):
""" """
Return the Accounting Plan to use by default (return the root node) Return the Accounting Plan to use by default (return the root node)
""" """
LOG('ERP5Site', 0, 'getPortalDefaultGapRoot is deprecated;'+ LOG('ERP5Site', 0,
' use portal_preferences.getPreferredAccountingTransactionGap instead.') 'getPortalDefaultGapRoot is deprecated; ' \
'use portal_preferences.getPreferredAccountingTransactionGap instead.')
return self.portal_preferences.getPreferredAccountingTransactionGap() or \ return self.portal_preferences.getPreferredAccountingTransactionGap() or \
self._getPortalConfiguration('portal_default_gap_root') self._getPortalConfiguration('portal_default_gap_root')
def getPortalAccountingMovementTypeList(self) : def getPortalAccountingMovementTypeList(self) :
""" """
Return accounting movement type list. Return accounting movement type list.
""" """
return self._getPortalGroupedTypeList('accounting_movement') or \ return self._getPortalGroupedTypeList('accounting_movement') or \
self._getPortalConfiguration('portal_accounting_movement_type_list') self._getPortalConfiguration('portal_accounting_movement_type_list')
def getPortalAccountingTransactionTypeList(self) : def getPortalAccountingTransactionTypeList(self) :
""" """
Return accounting transaction movement type list. Return accounting transaction movement type list.
""" """
return self._getPortalGroupedTypeList('accounting_transaction') or \ return self._getPortalGroupedTypeList('accounting_transaction') or \
self._getPortalConfiguration('portal_accounting_transaction_type_list') self._getPortalConfiguration('portal_accounting_transaction_type_list')
def getPortalAssignmentBaseCategoryList(self): def getPortalAssignmentBaseCategoryList(self):
""" """
Return List of category values to generate security groups. Return List of category values to generate security groups.
""" """
return self._getPortalGroupedCategoryList('assignment') or \ return self._getPortalGroupedCategoryList('assignment') or \
self._getPortalConfiguration('portal_assignment_base_category_list') self._getPortalConfiguration('portal_assignment_base_category_list')
security.declareProtected(Permissions.AccessContentsInformation, 'getPortalTicketTypeList') security.declareProtected(Permissions.AccessContentsInformation,
'getPortalTicketTypeList')
def getPortalTicketTypeList(self): def getPortalTicketTypeList(self):
""" """
Return ticket types. Return ticket types.
""" """
return self._getPortalGroupedTypeList('ticket') return self._getPortalGroupedTypeList('ticket')
security.declareProtected(Permissions.AccessContentsInformation,
security.declareProtected(Permissions.AccessContentsInformation, 'getPortalEventTypeList') 'getPortalEventTypeList')
def getPortalEventTypeList(self): def getPortalEventTypeList(self):
""" """
Return event types. Return event types.
""" """
return self._getPortalGroupedTypeList('event') return self._getPortalGroupedTypeList('event')
security.declareProtected(Permissions.AccessContentsInformation,
security.declareProtected(Permissions.AccessContentsInformation, 'getDefaultModuleId') 'getDefaultModuleId')
def getDefaultModuleId(self, portal_type, default=MARKER): def getDefaultModuleId(self, portal_type, default=MARKER):
""" """
Return default module id where a object with portal_type can Return default module id where a object with portal_type can
...@@ -784,19 +737,20 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -784,19 +737,20 @@ class ERP5Site(FolderMixIn, CMFSite):
if default is not MARKER: if default is not MARKER:
return default return default
LOG('ERP5Site, getDefaultModuleId', 0, LOG('ERP5Site, getDefaultModuleId', 0,
'Unable to find default module for portal_type: %s' % portal_type) 'Unable to find default module for portal_type: %s' % \
raise ValueError, 'Unable to find module for portal_type: %s' % portal_type portal_type)
raise ValueError, 'Unable to find module for portal_type: %s' % \
portal_type
return module_name return module_name
security.declareProtected(Permissions.AccessContentsInformation,
security.declareProtected(Permissions.AccessContentsInformation, 'getDefaultModule') 'getDefaultModule')
def getDefaultModule(self, portal_type): def getDefaultModule(self, portal_type):
""" """
Return default module where a object with portal_type can be created Return default module where a object with portal_type can be created
""" """
return getattr(self, self.getDefaultModuleId(portal_type), None) return getattr(self, self.getDefaultModuleId(portal_type), None)
security.declareProtected(Permissions.AddPortalContent, 'newContent') security.declareProtected(Permissions.AddPortalContent, 'newContent')
def newContent(self, id=None, portal_type=None, immediate_reindex=0, **kw): def newContent(self, id=None, portal_type=None, immediate_reindex=0, **kw):
""" """
...@@ -806,10 +760,10 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -806,10 +760,10 @@ class ERP5Site(FolderMixIn, CMFSite):
raise ValueError, 'The id should not be None' raise ValueError, 'The id should not be None'
if portal_type is None: if portal_type is None:
raise ValueError, 'The portal_type should not be None' raise ValueError, 'The portal_type should not be None'
self.portal_types.constructContent( type_name = portal_type self.portal_types.constructContent(type_name=portal_type,
, container = self container=self,
, id = id id=id,
) # **kw) removed due to CMF bug ) # **kw) removed due to CMF bug
new_instance = self[id] new_instance = self[id]
if kw is not None: if kw is not None:
new_instance._edit(force_update=1, **kw) new_instance._edit(force_update=1, **kw)
...@@ -817,15 +771,13 @@ class ERP5Site(FolderMixIn, CMFSite): ...@@ -817,15 +771,13 @@ class ERP5Site(FolderMixIn, CMFSite):
new_instance.immediateReindexObject() new_instance.immediateReindexObject()
return new_instance return new_instance
def log(self,description,content): def log(self,description,content):
""" """
Put a log message Put a log message
""" """
LOG(description, 0, content) LOG(description, 0, content)
Globals.InitializeClass(ERP5Site) Globals.InitializeClass(ERP5Site)
class ERP5Generator(PortalGenerator): class ERP5Generator(PortalGenerator):
...@@ -839,48 +791,54 @@ class ERP5Generator(PortalGenerator): ...@@ -839,48 +791,54 @@ class ERP5Generator(PortalGenerator):
product_path = package_home(globals()) product_path = package_home(globals())
return os.path.join(product_path, 'bootstrap') return os.path.join(product_path, 'bootstrap')
def create(self,
def create( self parent,
, parent id,
, id create_userfolder,
, create_userfolder erp5_sql_connection_type,
, erp5_sql_connection_type erp5_sql_connection_string,
, erp5_sql_connection_string erp5_sql_deferred_connection_type,
, erp5_sql_deferred_connection_type erp5_sql_deferred_connection_string,
, erp5_sql_deferred_connection_string cmf_activity_sql_connection_type,
, cmf_activity_sql_connection_type cmf_activity_sql_connection_string,
, cmf_activity_sql_connection_string create_activities=1,
, create_activities=1 reindex=1,
, reindex=1 **kw):
, **kw
):
LOG('setupTools, create', 0, kw) LOG('setupTools, create', 0, kw)
id = str(id) id = str(id)
portal = self.klass(id=id) portal = self.klass(id=id)
# Make sure reindex will not be called until business templates will be installed # Make sure reindex will not be called until business templates
# will be installed
setattr(portal, 'isIndexable', 0) setattr(portal, 'isIndexable', 0)
parent._setObject(id, portal) parent._setObject(id, portal)
# Return the fully wrapped object. # Return the fully wrapped object.
p = parent.this()._getOb(id) p = parent.this()._getOb(id)
p._setProperty('erp5_sql_connection_type', erp5_sql_connection_type, 'string') p._setProperty('erp5_sql_connection_type',
p._setProperty('erp5_sql_connection_string', erp5_sql_connection_string, 'string') erp5_sql_connection_type, 'string')
p._setProperty('erp5_sql_deferred_connection_type', erp5_sql_deferred_connection_type, 'string') p._setProperty('erp5_sql_connection_string',
p._setProperty('erp5_sql_deferred_connection_string', erp5_sql_deferred_connection_string, 'string') erp5_sql_connection_string, 'string')
p._setProperty('cmf_activity_sql_connection_type', cmf_activity_sql_connection_type, 'string') p._setProperty('erp5_sql_deferred_connection_type',
p._setProperty('cmf_activity_sql_connection_string', cmf_activity_sql_connection_string, 'string') erp5_sql_deferred_connection_type, 'string')
p._setProperty('erp5_sql_deferred_connection_string',
erp5_sql_deferred_connection_string, 'string')
p._setProperty('cmf_activity_sql_connection_type',
cmf_activity_sql_connection_type, 'string')
p._setProperty('cmf_activity_sql_connection_string',
cmf_activity_sql_connection_string, 'string')
# XXX hardcoded charset
p._setProperty('management_page_charset', 'UTF-8', 'string') p._setProperty('management_page_charset', 'UTF-8', 'string')
self.setup(p, create_userfolder, create_activities=create_activities, **kw) self.setup(p, create_userfolder,
create_activities=create_activities, **kw)
return p return p
def setupLastTools(self, p, **kw): def setupLastTools(self, p, **kw):
""" """
Set up finals tools Set up finals tools
We want to set the activity tool only at the end to We want to set the activity tool only at the end to
make sure that we do not put un the queue the full reindexation make sure that we do not put un the queue the full reindexation
""" """
# Add Activity Tool # Add Activity Tool
if kw.get('create_activities', 0): if kw.has_key('create_activities') and int(kw['create_activities'])==1:
if not p.hasObject('portal_activities'): if not p.hasObject('portal_activities'):
addTool = p.manage_addProduct['CMFActivity'].manage_addTool addTool = p.manage_addProduct['CMFActivity'].manage_addTool
addTool('CMF Activity Tool', None) # Allow user to select active/passive addTool('CMF Activity Tool', None) # Allow user to select active/passive
...@@ -893,10 +851,9 @@ class ERP5Generator(PortalGenerator): ...@@ -893,10 +851,9 @@ class ERP5Generator(PortalGenerator):
keep = 0 keep = 0
portal_activities.manageClearActivities(keep=keep) portal_activities.manageClearActivities(keep=keep)
def setupTemplateTool(self, p, **kw): def setupTemplateTool(self, p, **kw):
""" """
Setup the Template Tool. Security must be set strictly. Setup the Template Tool. Security must be set strictly.
""" """
addTool = p.manage_addProduct['ERP5'].manage_addTool addTool = p.manage_addProduct['ERP5'].manage_addTool
addTool('ERP5 Template Tool', None) addTool('ERP5 Template Tool', None)
...@@ -905,20 +862,22 @@ class ERP5Generator(PortalGenerator): ...@@ -905,20 +862,22 @@ class ERP5Generator(PortalGenerator):
for permission in permission_list: for permission in permission_list:
context.manage_permission(permission, ['Manager'], 0) context.manage_permission(permission, ['Manager'], 0)
def setupTools(self, p,**kw): def setupTools(self, p,**kw):
""" """
Set up initial tools Set up initial tools.
""" """
if not 'portal_actions' in p.objectIds(): if not 'portal_actions' in p.objectIds():
PortalGenerator.setupTools(self, p) PortalGenerator.setupTools(self, p)
# It is better to remove portal_catalog which is ZCatalog as soon as possible, # It is better to remove portal_catalog
# because the API is not the completely same as ERP5Catalog, and ZCatalog is # which is ZCatalog as soon as possible,
# useless for ERP5 after all. # because the API is not the completely same as ERP5Catalog,
# and ZCatalog is useless for ERP5 after all.
update = kw.get('update', 0) update = kw.get('update', 0)
portal_catalog = getToolByName(p, 'portal_catalog', None) portal_catalog = getToolByName(p, 'portal_catalog', None)
if portal_catalog is not None and portal_catalog.meta_type != 'ZSQLCatalog' and not update: if portal_catalog is not None and \
portal_catalog.meta_type != 'ZSQLCatalog' and \
not update:
p._delObject('portal_catalog') p._delObject('portal_catalog')
# Add CMF Report Tool # Add CMF Report Tool
...@@ -950,14 +909,14 @@ class ERP5Generator(PortalGenerator): ...@@ -950,14 +909,14 @@ class ERP5Generator(PortalGenerator):
addTool('ERP5 Order Tool', None) addTool('ERP5 Order Tool', None)
if not p.hasObject('portal_tests'): if not p.hasObject('portal_tests'):
addTool('ERP5 Test Tool', None) addTool('ERP5 Test Tool', None)
try: try:
addTool = p.manage_addProduct['ERP5Subversion'].manage_addTool addTool = p.manage_addProduct['ERP5Subversion'].manage_addTool
if not p.hasObject('portal_subversion'): if not p.hasObject('portal_subversion'):
addTool('ERP5 Subversion Tool', None) addTool('ERP5 Subversion Tool', None)
except AttributeError: except AttributeError:
pass pass
# Add ERP5Type Tools # Add ERP5Type Tools
addTool = p.manage_addProduct['ERP5Type'].manage_addTool addTool = p.manage_addProduct['ERP5Type'].manage_addTool
if not p.hasObject('portal_classes'): if not p.hasObject('portal_classes'):
...@@ -970,41 +929,54 @@ class ERP5Generator(PortalGenerator): ...@@ -970,41 +929,54 @@ class ERP5Generator(PortalGenerator):
addTool = p.manage_addProduct['ERP5Catalog'].manage_addTool addTool = p.manage_addProduct['ERP5Catalog'].manage_addTool
if not p.hasObject('portal_catalog'): if not p.hasObject('portal_catalog'):
addTool('ERP5 Catalog', None) addTool('ERP5 Catalog', None)
# Add Default SQL connection # Add Default SQL connection
if p.erp5_sql_connection_type == 'Z MySQL Database Connection': if p.erp5_sql_connection_type == 'Z MySQL Database Connection':
if not p.hasObject('erp5_sql_connection'): if not p.hasObject('erp5_sql_connection'):
addSQLConnection = p.manage_addProduct['ZMySQLDA'].manage_addZMySQLConnection addSQLConnection = p.manage_addProduct['ZMySQLDA'].\
addSQLConnection('erp5_sql_connection', 'ERP5 SQL Server Connection', p.erp5_sql_connection_string) manage_addZMySQLConnection
addSQLConnection('erp5_sql_connection',
'ERP5 SQL Server Connection',
p.erp5_sql_connection_string)
elif p.erp5_sql_connection_type == 'Z Gadfly': elif p.erp5_sql_connection_type == 'Z Gadfly':
pass pass
# Add Deferred SQL Connections # Add Deferred SQL Connections
if p.erp5_sql_deferred_connection_type == 'Z MySQL Deferred Database Connection': if p.erp5_sql_deferred_connection_type == \
'Z MySQL Deferred Database Connection':
if not p.hasObject('erp5_sql_deferred_connection'): if not p.hasObject('erp5_sql_deferred_connection'):
addSQLConnection = p.manage_addProduct['ZMySQLDDA'].manage_addZMySQLDeferredConnection addSQLConnection = p.manage_addProduct['ZMySQLDDA'].\
addSQLConnection('erp5_sql_deferred_connection', 'ERP5 SQL Server Deferred Connection', p.erp5_sql_deferred_connection_string) manage_addZMySQLDeferredConnection
addSQLConnection('erp5_sql_deferred_connection',
'ERP5 SQL Server Deferred Connection',
p.erp5_sql_deferred_connection_string)
elif p.erp5_sql_deferred_connection_type == 'Z Gadfly': elif p.erp5_sql_deferred_connection_type == 'Z Gadfly':
pass pass
# Add Activity SQL Connections # Add Activity SQL Connections
if p.cmf_activity_sql_connection_type == 'Z MySQL Database Connection': if p.cmf_activity_sql_connection_type == 'Z MySQL Database Connection':
if not p.hasObject('cmf_activity_sql_connection'): if not p.hasObject('cmf_activity_sql_connection'):
addSQLConnection = p.manage_addProduct['ZMySQLDA'].manage_addZMySQLConnection addSQLConnection = p.manage_addProduct['ZMySQLDA'].\
addSQLConnection('cmf_activity_sql_connection', 'CMF Activity SQL Server Connection', p.cmf_activity_sql_connection_string) manage_addZMySQLConnection
addSQLConnection('cmf_activity_sql_connection',
'CMF Activity SQL Server Connection',
p.cmf_activity_sql_connection_string)
elif p.cmf_activity_sql_connection_type == 'Z Gadfly': elif p.cmf_activity_sql_connection_type == 'Z Gadfly':
pass pass
portal_catalog = getToolByName(p, 'portal_catalog') portal_catalog = getToolByName(p, 'portal_catalog')
if not portal_catalog.getSQLCatalog('erp5_mysql') and not update: if (not update) and (not portal_catalog.getSQLCatalog('erp5_mysql')):
# Add a default SQL Catalog
portal_catalog.addDefaultSQLMethods() portal_catalog.addDefaultSQLMethods()
portal_catalog.manage_catalogClear() if (p.erp5_sql_connection_type is not None):
# TODO: Replace previous lines with the commented below (not working actually). portal_catalog.manage_catalogClear()
# The goal is to delete addDefaultSQLMethods() method and duplicated zsql # TODO: Replace previous lines with the commented below
# method from /ERP5Catalog/sql/mysql_erp5. # (not working actually).
# addSQLCatalog = portal_catalog.manage_addProduct['ZSQLCatalog'].manage_addSQLCatalog # The goal is to delete addDefaultSQLMethods() method and duplicated zsql
# addSQLCatalog('erp5_mysql', '') # method from /ERP5Catalog/sql/mysql_erp5.
# portal_catalog.default_sql_catalog_id = 'erp5_mysql' #addSQLCatalog = portal_catalog.manage_addProduct['ZSQLCatalog']\
# .manage_addSQLCatalog
#addSQLCatalog('erp5_mysql', '')
#portal_catalog.default_sql_catalog_id = 'erp5_mysql'
# Add ERP5Form Tools # Add ERP5Form Tools
addTool = p.manage_addProduct['ERP5Form'].manage_addTool addTool = p.manage_addProduct['ERP5Form'].manage_addTool
...@@ -1023,22 +995,22 @@ class ERP5Generator(PortalGenerator): ...@@ -1023,22 +995,22 @@ class ERP5Generator(PortalGenerator):
addLocalizer = p.manage_addProduct['Localizer'].manage_addLocalizer addLocalizer = p.manage_addProduct['Localizer'].manage_addLocalizer
addLocalizer('', ('en',)) addLocalizer('', ('en',))
localizer = getToolByName(p, 'Localizer') localizer = getToolByName(p, 'Localizer')
addMessageCatalog = localizer.manage_addProduct['Localizer'].manage_addMessageCatalog addMessageCatalog = localizer.manage_addProduct['Localizer']\
.manage_addMessageCatalog
if 'erp5_ui' not in localizer.objectIds(): if 'erp5_ui' not in localizer.objectIds():
if 'default' in localizer.objectIds(): if 'default' in localizer.objectIds():
localizer.manage_delObjects('default') localizer.manage_delObjects('default')
addMessageCatalog('default' , 'ERP5 Localized Messages' , ('en',)) addMessageCatalog('default', 'ERP5 Localized Messages', ('en',))
addMessageCatalog('erp5_ui' , 'ERP5 Localized Interface', ('en',)) addMessageCatalog('erp5_ui', 'ERP5 Localized Interface', ('en',))
addMessageCatalog('erp5_content', 'ERP5 Localized Content' , ('en',)) addMessageCatalog('erp5_content', 'ERP5 Localized Content', ('en',))
def setupMembersFolder(self, p): def setupMembersFolder(self, p):
""" """
ERP5 is not a CMS ERP5 is not a CMS
""" """
pass pass
def setupDefaultSkins(self, p): def setupDefaultSkins(self, p):
from Products.CMFCore.DirectoryView import addDirectoryViews from Products.CMFCore.DirectoryView import addDirectoryViews
from Products.CMFDefault import cmfdefault_globals from Products.CMFDefault import cmfdefault_globals
...@@ -1049,7 +1021,7 @@ class ERP5Generator(PortalGenerator): ...@@ -1049,7 +1021,7 @@ class ERP5Generator(PortalGenerator):
ps.manage_addProduct['OFSP'].manage_addFolder(id='external_method') ps.manage_addProduct['OFSP'].manage_addFolder(id='external_method')
ps.manage_addProduct['OFSP'].manage_addFolder(id='custom') ps.manage_addProduct['OFSP'].manage_addFolder(id='custom')
# Set the 'custom' layer a high priority, so it remains the first # Set the 'custom' layer a high priority, so it remains the first
# layer when installing new business templates # layer when installing new business templates
ps['custom'].manage_addProperty( ps['custom'].manage_addProperty(
"business_template_skin_layer_priority", 100.0, "float") "business_template_skin_layer_priority", 100.0, "float")
ps.addSkinSelection('View', 'custom, external_method, activity, ' ps.addSkinSelection('View', 'custom, external_method, activity, '
...@@ -1066,30 +1038,31 @@ class ERP5Generator(PortalGenerator): ...@@ -1066,30 +1038,31 @@ class ERP5Generator(PortalGenerator):
make_default=0) make_default=0)
p.setupCurrentSkin() p.setupCurrentSkin()
def setupWorkflow(self, p): def setupWorkflow(self, p):
""" """
Set up workflows for business templates Set up workflows for business templates
""" """
tool = getToolByName(p, 'portal_workflow', None) tool = getToolByName(p, 'portal_workflow', None)
if tool is None: if tool is None:
return return
for wf_id in ('business_template_building_workflow', 'business_template_installation_workflow'): for wf_id in ('business_template_building_workflow',
'business_template_installation_workflow'):
if wf_id in tool.objectIds(): if wf_id in tool.objectIds():
tool.manage_delObjects([wf_id]) tool.manage_delObjects([wf_id])
bootstrap_dir = self.getBootstrapDirectory() bootstrap_dir = self.getBootstrapDirectory()
business_template_building_workflow = os.path.join(bootstrap_dir, business_template_building_workflow = os.path.join(
'business_template_building_workflow.xml') bootstrap_dir,
'business_template_building_workflow.xml')
tool._importObjectFromFile(business_template_building_workflow) tool._importObjectFromFile(business_template_building_workflow)
business_template_installation_workflow = os.path.join(bootstrap_dir, business_template_installation_workflow = os.path.join(
'business_template_installation_workflow.xml') bootstrap_dir,
'business_template_installation_workflow.xml')
tool._importObjectFromFile(business_template_installation_workflow) tool._importObjectFromFile(business_template_installation_workflow)
tool.setChainForPortalTypes( ( 'Business Template', ), tool.setChainForPortalTypes( ( 'Business Template', ),
( 'business_template_building_workflow', ( 'business_template_building_workflow',
'business_template_installation_workflow' ) ) 'business_template_installation_workflow' ) )
pass pass
def setupIndex(self, p, **kw): def setupIndex(self, p, **kw):
# Make sure all tools and folders have been indexed # Make sure all tools and folders have been indexed
if kw.has_key('reindex') and kw['reindex']==0: if kw.has_key('reindex') and kw['reindex']==0:
...@@ -1097,11 +1070,13 @@ class ERP5Generator(PortalGenerator): ...@@ -1097,11 +1070,13 @@ class ERP5Generator(PortalGenerator):
skins_tool = getToolByName(p, 'portal_skins', None) skins_tool = getToolByName(p, 'portal_skins', None)
if skins_tool is None: if skins_tool is None:
return return
setattr(p, 'isIndexable', 1) # When no SQL connection was define on the site,
portal_catalog = p.portal_catalog # we don't want to make it crash
portal_catalog.manage_catalogClear() if p.erp5_sql_connection_type is not None:
skins_tool["erp5_core"].ERP5Site_reindexAll() setattr(p, 'isIndexable', 1)
portal_catalog = p.portal_catalog
portal_catalog.manage_catalogClear()
skins_tool["erp5_core"].ERP5Site_reindexAll()
def setupUserFolder(self, p): def setupUserFolder(self, p):
# We use if possible ERP5Security, then NuxUserGroups # We use if possible ERP5Security, then NuxUserGroups
...@@ -1149,7 +1124,6 @@ class ERP5Generator(PortalGenerator): ...@@ -1149,7 +1124,6 @@ class ERP5Generator(PortalGenerator):
# Standard user folder # Standard user folder
PortalGenerator.setupUserFolder(self, p) PortalGenerator.setupUserFolder(self, p)
def setupPermissions(self, p): def setupPermissions(self, p):
permission_dict = { permission_dict = {
'Access Transient Objects' : ('Manager', 'Anonymous'), 'Access Transient Objects' : ('Manager', 'Anonymous'),
...@@ -1172,7 +1146,8 @@ class ERP5Generator(PortalGenerator): ...@@ -1172,7 +1146,8 @@ class ERP5Generator(PortalGenerator):
'Set own password' : ('Manager',), 'Set own password' : ('Manager',),
'Set own properties' : ('Manager', 'Member'), 'Set own properties' : ('Manager', 'Member'),
'Undo changes' : ('Manager', 'Owner'), 'Undo changes' : ('Manager', 'Owner'),
'View' : ('Manager', 'Member', 'Owner', 'Anonymous'), 'View' : ('Manager', 'Member',
'Owner', 'Anonymous'),
'View management screens' : ('Manager', 'Owner') 'View management screens' : ('Manager', 'Owner')
} }
...@@ -1181,7 +1156,6 @@ class ERP5Generator(PortalGenerator): ...@@ -1181,7 +1156,6 @@ class ERP5Generator(PortalGenerator):
role_list = permission_dict.get(name, ('Manager',)) role_list = permission_dict.get(name, ('Manager',))
p.manage_permission(name, roles=role_list, acquire=0) p.manage_permission(name, roles=role_list, acquire=0)
def setup(self, p, create_userfolder, **kw): def setup(self, p, create_userfolder, **kw):
update = kw.get('update', 0) update = kw.get('update', 0)
...@@ -1191,7 +1165,7 @@ class ERP5Generator(PortalGenerator): ...@@ -1191,7 +1165,7 @@ class ERP5Generator(PortalGenerator):
self.setupMailHost(p) self.setupMailHost(p)
if int(create_userfolder) != 0 and not p.hasObject('acl_users'): if int(create_userfolder) != 0 and not p.hasObject('acl_users'):
self.setupUserFolder(p) self.setupUserFolder(p)
if not p.hasObject('cookie_authentication'): if not p.hasObject('cookie_authentication'):
self.setupCookieAuth(p) self.setupCookieAuth(p)
...@@ -1226,10 +1200,9 @@ class ERP5Generator(PortalGenerator): ...@@ -1226,10 +1200,9 @@ class ERP5Generator(PortalGenerator):
if not update: if not update:
self.setupIndex(p, **kw) self.setupIndex(p, **kw)
def setupBusinessTemplate(self,p): def setupBusinessTemplate(self,p):
""" """
Install the portal_type of Business Template Install the portal_type of Business Template
""" """
tool = getToolByName(p, 'portal_types', None) tool = getToolByName(p, 'portal_types', None)
if tool is None: if tool is None:
...@@ -1239,10 +1212,9 @@ class ERP5Generator(PortalGenerator): ...@@ -1239,10 +1212,9 @@ class ERP5Generator(PortalGenerator):
ti = apply(ERP5TypeInformation, (), t) ti = apply(ERP5TypeInformation, (), t)
tool._setObject(t['id'], ti) tool._setObject(t['id'], ti)
def setupERP5Core(self,p,**kw):
def setupERP5Core(self, p, **kw):
""" """
Install the core part of ERP5 Install the core part of ERP5
""" """
template_tool = getToolByName(p, 'portal_templates', None) template_tool = getToolByName(p, 'portal_templates', None)
if template_tool is None: if template_tool is None:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment