Commit 1fc5eef0 authored by Kevin Deldycke's avatar Kevin Deldycke

Add ZMySQLDA deferred connection.

Force installation of activities.
Setup last tool at the very end of the setup process.
Code clean-up.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@8081 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 32129f06
...@@ -36,7 +36,8 @@ from zLOG import LOG ...@@ -36,7 +36,8 @@ from zLOG import LOG
from string import join from string import join
import os import os
MARKER=[] MARKER = []
# Site Creation DTML # Site Creation DTML
...@@ -44,38 +45,54 @@ manage_addERP5SiteForm = Globals.HTMLFile('dtml/addERP5Site', globals()) ...@@ -44,38 +45,54 @@ manage_addERP5SiteForm = Globals.HTMLFile('dtml/addERP5Site', globals())
manage_addERP5SiteForm.__name__ = 'addERP5Site' manage_addERP5SiteForm.__name__ = 'addERP5Site'
# ERP5Site Constructor # ERP5Site Constructor
def manage_addERP5Site(self, id, title='ERP5', description='', def manage_addERP5Site( self
create_userfolder=1, , id
create_activities=1, , title = 'ERP5'
email_from_address='postmaster@localhost', , description = ''
email_from_name='Portal Administrator', , create_userfolder = 1
validate_email=0, , create_activities = 1
erp5_sql_connection_type='Z MySQL Database Connection', , email_from_address = 'postmaster@localhost'
erp5_sql_connection_string='test test', , email_from_name = 'Portal Administrator'
cmf_activity_sql_connection_type='Z MySQL Database Connection', , validate_email = 0
cmf_activity_sql_connection_string='test test', , erp5_sql_connection_type = 'Z MySQL Database Connection'
light_install=0,reindex=1, , erp5_sql_connection_string = 'test test'
RESPONSE=None): , erp5_sql_deferred_connection_type = 'Z MySQL Deferred Database Connection'
, erp5_sql_deferred_connection_string = 'test test'
, cmf_activity_sql_connection_type = 'Z MySQL Database Connection'
, cmf_activity_sql_connection_string = 'test test'
, reindex = 1
, RESPONSE = None
):
""" """
Adds a portal instance. Adds a portal instance.
""" """
#LOG('manage_addERP5Site, create_activities',0,create_activities)
#LOG('manage_addERP5Site, create_activities==1',0,create_activities==1)
gen = ERP5Generator() gen = ERP5Generator()
from string import strip id = str(id).strip()
id = strip(id) p = gen.create( self
p = gen.create(self, id, create_userfolder, , id
erp5_sql_connection_type,erp5_sql_connection_string, , create_userfolder
cmf_activity_sql_connection_type,cmf_activity_sql_connection_string, , erp5_sql_connection_type
create_activities=create_activities,light_install=light_install, , erp5_sql_connection_string
reindex=reindex) , erp5_sql_deferred_connection_type
gen.setupDefaultProperties(p, title, description, , erp5_sql_deferred_connection_string
email_from_address, email_from_name, , cmf_activity_sql_connection_type
validate_email) , cmf_activity_sql_connection_string
, create_activities
, reindex
)
gen.setupDefaultProperties( p
, title
, description
, email_from_address
, email_from_name
, 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.
...@@ -86,9 +103,12 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -86,9 +103,12 @@ class ERP5Site ( FolderMixIn, CMFSite ):
last_id = 0 last_id = 0
icon = 'portal.gif' icon = 'portal.gif'
_properties = ( _properties = ( { 'id' : 'title'
{'id':'title', 'type':'string'}, , 'type': 'string'
{'id':'description', 'type':'text'}, }
, { 'id' : 'description'
, 'type': 'text'
}
) )
title = '' title = ''
description = '' description = ''
...@@ -97,6 +117,7 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -97,6 +117,7 @@ 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):
""" """
...@@ -105,15 +126,19 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -105,15 +126,19 @@ 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, 'getPortalObject') security.declareProtected(Permissions.AccessContentsInformation, 'getPortalObject')
def getPortalObject(self): def getPortalObject(self):
return self return self
security.declareProtected(Permissions.AccessContentsInformation, 'getTitle') security.declareProtected(Permissions.AccessContentsInformation, 'getTitle')
def getTitle(self): def getTitle(self):
""" """
...@@ -121,6 +146,7 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -121,6 +146,7 @@ class ERP5Site ( FolderMixIn, CMFSite ):
""" """
return self.title return self.title
security.declareProtected(Permissions.AccessContentsInformation, 'getUid') security.declareProtected(Permissions.AccessContentsInformation, 'getUid')
def getUid(self): def getUid(self):
""" """
...@@ -130,10 +156,9 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -130,10 +156,9 @@ class ERP5Site ( FolderMixIn, CMFSite ):
WARNING : must be updates for circular references issues WARNING : must be updates for circular references issues
""" """
#if not hasattr(self, 'uid'):
# self.reindexObject()
return getattr(self, 'uid', 0) return getattr(self, 'uid', 0)
security.declareProtected(Permissions.AccessContentsInformation, 'getParentUid') security.declareProtected(Permissions.AccessContentsInformation, 'getParentUid')
def getParentUid(self): def getParentUid(self):
""" """
...@@ -141,16 +166,19 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -141,16 +166,19 @@ class ERP5Site ( FolderMixIn, CMFSite ):
""" """
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):
""" """
...@@ -158,6 +186,7 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -158,6 +186,7 @@ class ERP5Site ( FolderMixIn, CMFSite ):
""" """
return join(self.getPhysicalPath(),'/') return join(self.getPhysicalPath(),'/')
security.declareProtected(Permissions.AccessContentsInformation, 'searchFolder') security.declareProtected(Permissions.AccessContentsInformation, 'searchFolder')
def searchFolder(self, **kw): def searchFolder(self, **kw):
""" """
...@@ -167,17 +196,16 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -167,17 +196,16 @@ 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 # Remove useless matter before calling the catalog. In particular, consider empty
# catalog. In particular, consider empty # strings as None values.
# strings as None values
for cname in kw.keys(): for cname in kw.keys():
if kw[cname] != '' and kw[cname]!=None: if kw[cname] not in ('', None):
kw2[cname] = kw[cname] kw2[cname] = kw[cname]
# The method to call to search the folder # The method to call to search the folder content has to be called z_search_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):
""" """
...@@ -187,33 +215,27 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -187,33 +215,27 @@ 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 # Remove useless matter before calling the catalog. In particular, consider empty
# catalog. In particular, consider empty
# strings as None values # strings as None values
for cname in kw.keys(): for cname in kw.keys():
if kw[cname] != '' and kw[cname]!=None: if kw[cname] not in ('', None):
kw2[cname] = kw[cname] kw2[cname] = kw[cname]
# The method to call to search the folder # The method to call to search the folder content has to be called z_search_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()
# Make sure fixConsistency is recursive - ERROR - this creates recursion errors
# checkConsistency = Folder.checkConsistency
# fixConsistency = Folder.fixConsistency
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
""" """
#LOG("getOrderedGlobalActionList", 0, str(action_list))
sorted_workflow_actions = {} sorted_workflow_actions = {}
sorted_global_actions = [] sorted_global_actions = []
other_global_actions = [] other_global_actions = []
...@@ -234,6 +256,7 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -234,6 +256,7 @@ 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
...@@ -242,6 +265,7 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -242,6 +265,7 @@ class ERP5Site ( FolderMixIn, CMFSite ):
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 parameters
# for customization. In the past, we used global parameters, but it was not very good # for customization. In the past, we used global parameters, but it was not very good
# because it was very difficult to customize the settings for each portal site. # because it was very difficult to customize the settings for each portal site.
...@@ -261,8 +285,10 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -261,8 +285,10 @@ 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 = []
...@@ -271,12 +297,16 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -271,12 +297,16 @@ 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), cache_duration=3600) , id = ('_getPortalGroupedTypeList', group)
, 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 = []
...@@ -285,12 +315,16 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -285,12 +315,16 @@ 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( getCategoryList
id=('_getPortalGroupedCategoryList', group), 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 = {}
...@@ -301,12 +335,15 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -301,12 +335,15 @@ 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), cache_duration=3600) , id = ('_getPortalGroupedStateList', group)
, cache_duration = 3600
)
return getStateList(group) return getStateList(group)
security.declareProtected(Permissions.AccessContentsInformation,
'getPortalDefaultSectionCategory') security.declareProtected( Permissions.AccessContentsInformation
, '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.
...@@ -314,23 +351,23 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -314,23 +351,23 @@ class ERP5Site ( FolderMixIn, CMFSite ):
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')
def getPortalResourceTypeList(self): def getPortalResourceTypeList(self):
""" """
Return resource types. Return resource types.
""" """
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):
...@@ -339,6 +376,7 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -339,6 +376,7 @@ 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):
...@@ -347,132 +385,147 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -347,132 +385,147 @@ 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):
""" """
Return variation types. Return variation types.
""" """
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):
""" """
Return node types. Return node types.
""" """
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):
""" """
Return payment node types. Return payment node types.
""" """
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):
""" """
Return invoice types. Return invoice types.
""" """
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):
""" """
Return order types. Return order types.
""" """
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):
""" """
Return delivery types. Return delivery types.
""" """
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):
""" """
Return transformation types. Return transformation types.
""" """
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):
""" """
Return variation base categories. Return variation base categories.
""" """
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):
""" """
Return option base categories. Return option base categories.
""" """
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):
""" """
Return invoice movement types. Return invoice movement types.
""" """
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):
""" """
Return order movement types. Return order movement types.
""" """
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):
""" """
Return delivery movement types. Return delivery movement types.
""" """
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.
""" """
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.
""" """
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):
...@@ -483,6 +536,7 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -483,6 +536,7 @@ 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):
...@@ -494,78 +548,86 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -494,78 +548,86 @@ class ERP5Site ( FolderMixIn, CMFSite ):
list(self.getPortalInvoiceMovementTypeList()) + list(self.getPortalInvoiceMovementTypeList()) +
['Simulation Movement']) ['Simulation Movement'])
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalSimulatedMovementTypeList') 'getPortalSimulatedMovementTypeList')
def getPortalSimulatedMovementTypeList(self): def getPortalSimulatedMovementTypeList(self):
""" """
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')
def getPortalContainerTypeList(self): def getPortalContainerTypeList(self):
""" """
Return container types. Return container types.
""" """
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):
""" """
Return container line types. Return container line types.
""" """
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):
""" """
Return item types. Return item types.
""" """
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):
""" """
Return discount types. Return discount types.
""" """
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):
""" """
Return alarm types. Return alarm types.
""" """
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):
""" """
Return payment condition types. Return payment condition types.
""" """
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):
""" """
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( self._getPortalConfiguration('portal_balance_transaction_line_type_list')
'portal_balance_transaction_line_type_list')
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getPortalCurrentInventoryStateList') 'getPortalCurrentInventoryStateList')
...@@ -573,45 +635,50 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -573,45 +635,50 @@ class ERP5Site ( FolderMixIn, CMFSite ):
""" """
Return current inventory states. Return current inventory states.
""" """
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):
""" """
Return draft order states. Return draft order states.
""" """
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):
""" """
Return planned order states. Return planned order states.
""" """
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):
""" """
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')
def getPortalFutureInventoryStateList(self): def getPortalFutureInventoryStateList(self):
""" """
Return future inventory states. Return future inventory states.
""" """
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, 'getPortalUpdatableAmortisationTransactionStateList') security.declareProtected(Permissions.AccessContentsInformation, 'getPortalUpdatableAmortisationTransactionStateList')
def getPortalUpdatableAmortisationTransactionStateList(self): def getPortalUpdatableAmortisationTransactionStateList(self):
""" """
...@@ -619,82 +686,88 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -619,82 +686,88 @@ class ERP5Site ( FolderMixIn, CMFSite ):
""" """
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')
def getPortalColumnBaseCategoryList(self): def getPortalColumnBaseCategoryList(self):
""" """
Return column base categories. Return column base categories.
""" """
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):
""" """
Return line base categories. Return line base categories.
""" """
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):
""" """
Return tab base categories. Return tab base categories.
""" """
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, 'getPortalDefaultGapRoot is deprecated;'+
' use portal_preferences.getPreferredAccountingTransactionGap instead.') ' 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,
'getPortalEventTypeList') security.declareProtected(Permissions.AccessContentsInformation, '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,
'getDefaultModuleId') security.declareProtected(Permissions.AccessContentsInformation, '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
...@@ -709,20 +782,19 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -709,20 +782,19 @@ 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' % \ 'Unable to find default module for portal_type: %s' % portal_type)
portal_type) raise ValueError, 'Unable to find module for portal_type: %s' % portal_type
raise ValueError, 'Unable to find module for portal_type: %s' % \
portal_type
return module_name return module_name
security.declareProtected(Permissions.AccessContentsInformation,
'getDefaultModule') security.declareProtected(Permissions.AccessContentsInformation, '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):
""" """
...@@ -732,20 +804,24 @@ class ERP5Site ( FolderMixIn, CMFSite ): ...@@ -732,20 +804,24 @@ 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: new_instance._edit(force_update=1, **kw) if kw is not None:
if immediate_reindex: new_instance.immediateReindexObject() new_instance._edit(force_update=1, **kw)
if immediate_reindex:
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)
...@@ -761,27 +837,40 @@ class ERP5Generator(PortalGenerator): ...@@ -761,27 +837,40 @@ 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, parent, id, create_userfolder,
erp5_sql_connection_type, erp5_sql_connection_string, def create( self
cmf_activity_sql_connection_type,cmf_activity_sql_connection_string, , parent
reindex=1,**kw): , id
LOG('setupTools, create',0,kw) , create_userfolder
, erp5_sql_connection_type
, erp5_sql_connection_string
, erp5_sql_deferred_connection_type
, erp5_sql_deferred_connection_string
, cmf_activity_sql_connection_type
, cmf_activity_sql_connection_string
, create_activities=1
, reindex=1
, **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 # Make sure reindex will not be called until business templates will be installed
# 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', erp5_sql_connection_type, 'string')
p._setProperty('erp5_sql_connection_string', erp5_sql_connection_string, 'string') p._setProperty('erp5_sql_connection_string', erp5_sql_connection_string, 'string')
p._setProperty('erp5_sql_deferred_connection_type', 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_type', cmf_activity_sql_connection_type, 'string')
p._setProperty('cmf_activity_sql_connection_string', cmf_activity_sql_connection_string, 'string') p._setProperty('cmf_activity_sql_connection_string', cmf_activity_sql_connection_string, 'string')
p._setProperty('management_page_charset', 'UTF-8', 'string') # XXX hardcoded charset p._setProperty('management_page_charset', 'UTF-8', 'string')
self.setup(p, create_userfolder,**kw) self.setup(p, create_userfolder, **kw)
return p return p
def setupLastTools(self, p, **kw): def setupLastTools(self, p, **kw):
""" """
Set up finals tools Set up finals tools
...@@ -789,8 +878,6 @@ class ERP5Generator(PortalGenerator): ...@@ -789,8 +878,6 @@ class ERP5Generator(PortalGenerator):
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
#LOG('setupTools, kw',0,kw)
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
...@@ -803,6 +890,7 @@ class ERP5Generator(PortalGenerator): ...@@ -803,6 +890,7 @@ 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.
...@@ -814,11 +902,11 @@ class ERP5Generator(PortalGenerator): ...@@ -814,11 +902,11 @@ 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)
...@@ -877,6 +965,7 @@ class ERP5Generator(PortalGenerator): ...@@ -877,6 +965,7 @@ 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'):
...@@ -884,6 +973,16 @@ class ERP5Generator(PortalGenerator): ...@@ -884,6 +973,16 @@ class ERP5Generator(PortalGenerator):
addSQLConnection('erp5_sql_connection', 'ERP5 SQL Server Connection', p.erp5_sql_connection_string) 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
if p.erp5_sql_deferred_connection_type == 'Z MySQL Deferred Database Connection':
if not p.hasObject('erp5_sql_deferred_connection'):
addSQLConnection = p.manage_addProduct['ZSQLMethods'].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':
pass
# 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['ZSQLMethods'].manage_addZMySQLConnection addSQLConnection = p.manage_addProduct['ZSQLMethods'].manage_addZMySQLConnection
...@@ -893,13 +992,14 @@ class ERP5Generator(PortalGenerator): ...@@ -893,13 +992,14 @@ class ERP5Generator(PortalGenerator):
portal_catalog = getToolByName(p, 'portal_catalog') portal_catalog = getToolByName(p, 'portal_catalog')
if not portal_catalog.getSQLCatalog('erp5_mysql') and not update: if not portal_catalog.getSQLCatalog('erp5_mysql') and not update:
# Add a default SQL Catalog
#addSQLCatalog = portal_catalog.manage_addProduct['ZSQLCatalog']\
# .manage_addSQLCatalog
#addSQLCatalog('erp5_mysql', '')
#portal_catalog.default_sql_catalog_id = 'erp5_mysql'
portal_catalog.addDefaultSQLMethods() portal_catalog.addDefaultSQLMethods()
portal_catalog.manage_catalogClear() portal_catalog.manage_catalogClear()
# TODO: Replace previous lines with the commented below (not working actually).
# The goal is to delete addDefaultSQLMethods() method and duplicated zsql
# method from /ERP5Catalog/sql/mysql_erp5.
# 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
...@@ -918,14 +1018,13 @@ class ERP5Generator(PortalGenerator): ...@@ -918,14 +1018,13 @@ 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']\ addMessageCatalog = localizer.manage_addProduct['Localizer'].manage_addMessageCatalog
.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):
...@@ -934,19 +1033,17 @@ class ERP5Generator(PortalGenerator): ...@@ -934,19 +1033,17 @@ class ERP5Generator(PortalGenerator):
""" """
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
from Products.CMFActivity import cmfactivity_globals from Products.CMFActivity import cmfactivity_globals
ps = getToolByName(p, 'portal_skins') ps = getToolByName(p, 'portal_skins')
# Do not use filesystem skins for ERP5 any longer.
# addDirectoryViews(ps, 'skins', globals())
# addDirectoryViews(ps, path.join('skins','pro'), globals())
addDirectoryViews(ps, 'skins', cmfdefault_globals) addDirectoryViews(ps, 'skins', cmfdefault_globals)
addDirectoryViews(ps, 'skins', cmfactivity_globals) addDirectoryViews(ps, 'skins', cmfactivity_globals)
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")
...@@ -964,6 +1061,7 @@ class ERP5Generator(PortalGenerator): ...@@ -964,6 +1061,7 @@ 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
...@@ -986,6 +1084,7 @@ class ERP5Generator(PortalGenerator): ...@@ -986,6 +1084,7 @@ class ERP5Generator(PortalGenerator):
'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:
...@@ -993,11 +1092,12 @@ class ERP5Generator(PortalGenerator): ...@@ -993,11 +1092,12 @@ 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) setattr(p, 'isIndexable', 1)
portal_catalog = p.portal_catalog portal_catalog = p.portal_catalog
portal_catalog.manage_catalogClear() portal_catalog.manage_catalogClear()
skins_tool["erp5_core"].ERP5Site_reindexAll() 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
try: try:
...@@ -1018,7 +1118,7 @@ class ERP5Generator(PortalGenerator): ...@@ -1018,7 +1118,7 @@ class ERP5Generator(PortalGenerator):
p.acl_users.manage_addProduct['PluggableAuthService'].addZODBGroupManager('zodb_groups') p.acl_users.manage_addProduct['PluggableAuthService'].addZODBGroupManager('zodb_groups')
p.acl_users.manage_addProduct['PluggableAuthService'].addZODBRoleManager('zodb_roles') p.acl_users.manage_addProduct['PluggableAuthService'].addZODBRoleManager('zodb_roles')
# Add CMF Portal Roles # Add CMF Portal Roles
#XXX Maybe it will no longer be required once PAS is the standard #XXX Maybe it will be no longer required once PAS is the standard
p.acl_users.zodb_roles.addRole('Member') p.acl_users.zodb_roles.addRole('Member')
p.acl_users.zodb_roles.addRole('Reviewer') p.acl_users.zodb_roles.addRole('Reviewer')
# Register ZODB Interface # Register ZODB Interface
...@@ -1044,6 +1144,7 @@ class ERP5Generator(PortalGenerator): ...@@ -1044,6 +1144,7 @@ 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'),
...@@ -1075,6 +1176,7 @@ class ERP5Generator(PortalGenerator): ...@@ -1075,6 +1176,7 @@ 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)
...@@ -1096,8 +1198,6 @@ class ERP5Generator(PortalGenerator): ...@@ -1096,8 +1198,6 @@ class ERP5Generator(PortalGenerator):
self.setupPermissions(p) self.setupPermissions(p)
self.setupDefaultSkins(p) self.setupDefaultSkins(p)
self.setupLastTools(p, **kw)
# Finish setup # Finish setup
if not p.hasObject('Members'): if not p.hasObject('Members'):
self.setupMembersFolder(p) self.setupMembersFolder(p)
...@@ -1114,11 +1214,14 @@ class ERP5Generator(PortalGenerator): ...@@ -1114,11 +1214,14 @@ class ERP5Generator(PortalGenerator):
if not update: if not update:
self.setupERP5Core(p,**kw) self.setupERP5Core(p,**kw)
self.setupLastTools(p, **kw)
# Make sure tools are cleanly indexed with a uid before creating children # Make sure tools are cleanly indexed with a uid before creating children
# XXX for some strange reason, member was indexed 5 times # XXX for some strange reason, member was indexed 5 times
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
...@@ -1131,7 +1234,8 @@ class ERP5Generator(PortalGenerator): ...@@ -1131,7 +1234,8 @@ 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
""" """
...@@ -1140,7 +1244,7 @@ class ERP5Generator(PortalGenerator): ...@@ -1140,7 +1244,7 @@ class ERP5Generator(PortalGenerator):
return return
if template_tool.getInstalledBusinessTemplate('erp5_core') is None: if template_tool.getInstalledBusinessTemplate('erp5_core') is None:
bootstrap_dir = self.getBootstrapDirectory() bootstrap_dir = self.getBootstrapDirectory()
for bt in ('erp5_core','erp5_html_style'): for bt in ('erp5_core', 'erp5_html_style'):
template = os.path.join(bootstrap_dir, bt) template = os.path.join(bootstrap_dir, bt)
if not os.path.exists(template): if not os.path.exists(template):
template = os.path.join(bootstrap_dir, '%s.bt5' % bt) template = os.path.join(bootstrap_dir, '%s.bt5' % bt)
......
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