Commit 567f065d authored by Kevin Deldycke's avatar Kevin Deldycke

* Mark ERP5 Form objects as modified when one of its widget is modified. This...

* Mark ERP5 Form objects as modified when one of its widget is modified. This will keep the layout and the widget order when update.
* Auto-clean the code.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@5762 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 7ecbfc6f
...@@ -304,7 +304,7 @@ class BaseTemplateItem(Implicit, Persistent): ...@@ -304,7 +304,7 @@ class BaseTemplateItem(Implicit, Persistent):
modified_object_list = {} modified_object_list = {}
if context.getTemplateFormatVersion() == 1: if context.getTemplateFormatVersion() == 1:
new_keys = self._objects.keys() new_keys = self._objects.keys()
for path in new_keys: for path in new_keys:
if installed_bt._objects.has_key(path): if installed_bt._objects.has_key(path):
# compare object to see it there is changes # compare object to see it there is changes
new_obj_xml = self.generateXml(path=path) new_obj_xml = self.generateXml(path=path)
...@@ -341,7 +341,7 @@ class BaseTemplateItem(Implicit, Persistent): ...@@ -341,7 +341,7 @@ class BaseTemplateItem(Implicit, Persistent):
self.uninstall(context, trash=1, object_path=path, **kw) self.uninstall(context, trash=1, object_path=path, **kw)
elif action == 'remove': elif action == 'remove':
self.uninstall(context, trash=0, object_path=path, **kw) self.uninstall(context, trash=0, object_path=path, **kw)
def trash(self, context, new_item, **kw): def trash(self, context, new_item, **kw):
# trash is quite similar to uninstall. # trash is quite similar to uninstall.
...@@ -356,7 +356,7 @@ class BaseTemplateItem(Implicit, Persistent): ...@@ -356,7 +356,7 @@ class BaseTemplateItem(Implicit, Persistent):
def removeProperties(self, obj): def removeProperties(self, obj):
""" """
Remove unneeded properties for export Remove unneeded properties for export
""" """
if hasattr(obj, '__ac_local_roles__'): if hasattr(obj, '__ac_local_roles__'):
# remove local roles # remove local roles
obj.__ac_local_roles__ = None obj.__ac_local_roles__ = None
...@@ -496,7 +496,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -496,7 +496,7 @@ class ObjectTemplateItem(BaseTemplateItem):
subobject_path = object_path + [subobject_id] subobject_path = object_path + [subobject_id]
subobject = self.unrestrictedTraverse(subobject_path) subobject = self.unrestrictedTraverse(subobject_path)
subobject_copy = subobject._p_jar.exportFile(subobject._p_oid) subobject_copy = subobject._p_jar.exportFile(subobject._p_oid)
subobjects_dict[subobject_id] = subobject_copy subobjects_dict[subobject_id] = subobject_copy
return subobjects_dict return subobjects_dict
# XXX btsave is for backward compatibility # XXX btsave is for backward compatibility
if action == 'backup' or action == 'btsave': if action == 'backup' or action == 'btsave':
...@@ -504,7 +504,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -504,7 +504,7 @@ class ObjectTemplateItem(BaseTemplateItem):
elif action == 'install': elif action == 'install':
subobjects_dict = self.portal_trash.backupObject(trashbin, container_path, object_id, save=0) subobjects_dict = self.portal_trash.backupObject(trashbin, container_path, object_id, save=0)
return subobjects_dict return subobjects_dict
def install(self, context, trashbin, **kw): def install(self, context, trashbin, **kw):
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
force = kw.get('force') force = kw.get('force')
...@@ -530,7 +530,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -530,7 +530,7 @@ class ObjectTemplateItem(BaseTemplateItem):
container = portal.unrestrictedTraverse(container_path) container = portal.unrestrictedTraverse(container_path)
except KeyError: except KeyError:
# parent object can be set to nothing, in this case just go on # parent object can be set to nothing, in this case just go on
container_url = '/'.join(container_path) container_url = '/'.join(container_path)
if update_dict.has_key(container_url): if update_dict.has_key(container_url):
if update_dict[container_url] == 'nothing': if update_dict[container_url] == 'nothing':
continue continue
...@@ -542,7 +542,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -542,7 +542,7 @@ class ObjectTemplateItem(BaseTemplateItem):
subobjects_dict = self._backupObject(action, trashbin, container_path, object_id) subobjects_dict = self._backupObject(action, trashbin, container_path, object_id)
container.manage_delObjects([object_id]) container.manage_delObjects([object_id])
# install object # install object
obj = self._objects[path] obj = self._objects[path]
if getattr(obj, 'meta_type', None) == 'Script (Python)': if getattr(obj, 'meta_type', None) == 'Script (Python)':
if getattr(obj, '_code') is None: if getattr(obj, '_code') is None:
obj._compile() obj._compile()
...@@ -580,7 +580,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -580,7 +580,7 @@ class ObjectTemplateItem(BaseTemplateItem):
chain_dict = getChainByType(context)[1] chain_dict = getChainByType(context)[1]
default_chain = '' default_chain = ''
chain_dict['chain_%s' %(object_id)] = wf_chain chain_dict['chain_%s' %(object_id)] = wf_chain
context.portal_workflow.manage_changeWorkflows(default_chain, props=chain_dict) context.portal_workflow.manage_changeWorkflows(default_chain, props=chain_dict)
# import sub objects if there is # import sub objects if there is
elif len(subobjects_dict) > 0: elif len(subobjects_dict) > 0:
# get a jar # get a jar
...@@ -595,7 +595,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -595,7 +595,7 @@ class ObjectTemplateItem(BaseTemplateItem):
subobject_data.seek(0) subobject_data.seek(0)
subobject = connection.importFile(subobject_data) subobject = connection.importFile(subobject_data)
if subobject_id not in obj.objectIds(): if subobject_id not in obj.objectIds():
obj._setObject(subobject_id, subobject) obj._setObject(subobject_id, subobject)
if obj.meta_type in ('Z SQL Method',): if obj.meta_type in ('Z SQL Method',):
# It is necessary to make sure that the sql connection # It is necessary to make sure that the sql connection
# in this method is valid. # in this method is valid.
...@@ -616,7 +616,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -616,7 +616,7 @@ class ObjectTemplateItem(BaseTemplateItem):
object_id = relative_url.split('/')[-1] object_id = relative_url.split('/')[-1]
container = portal.unrestrictedTraverse(container_path) container = portal.unrestrictedTraverse(container_path)
container_ids = container.objectIds() container_ids = container.objectIds()
if object_id in container_ids: # Object already exists if object_id in container_ids: # Object already exists
self._backupObject('backup', trashbin, container_path, object_id) self._backupObject('backup', trashbin, container_path, object_id)
container.manage_delObjects([object_id]) container.manage_delObjects([object_id])
# Set a hard link # Set a hard link
...@@ -645,7 +645,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -645,7 +645,7 @@ class ObjectTemplateItem(BaseTemplateItem):
for relative_url in object_keys: for relative_url in object_keys:
container_path = relative_url.split('/')[0:-1] container_path = relative_url.split('/')[0:-1]
object_id = relative_url.split('/')[-1] object_id = relative_url.split('/')[-1]
try: try:
container = portal.unrestrictedTraverse(container_path) container = portal.unrestrictedTraverse(container_path)
if trash and trashbin is not None: if trash and trashbin is not None:
self.portal_trash.backupObject(trashbin, container_path, object_id, save=1, keep_subobjects=1) self.portal_trash.backupObject(trashbin, container_path, object_id, save=1, keep_subobjects=1)
...@@ -683,7 +683,7 @@ class PathTemplateItem(ObjectTemplateItem): ...@@ -683,7 +683,7 @@ class PathTemplateItem(ObjectTemplateItem):
object_keys.reverse() object_keys.reverse()
for path in object_keys: for path in object_keys:
for relative_url in self._resolvePath(p, [], path.split('/')): for relative_url in self._resolvePath(p, [], path.split('/')):
try: try:
container_path = relative_url.split('/')[0:-1] container_path = relative_url.split('/')[0:-1]
object_id = relative_url.split('/')[-1] object_id = relative_url.split('/')[-1]
container = portal.unrestrictedTraverse(container_path) container = portal.unrestrictedTraverse(container_path)
...@@ -720,7 +720,7 @@ class PathTemplateItem(ObjectTemplateItem): ...@@ -720,7 +720,7 @@ class PathTemplateItem(ObjectTemplateItem):
BaseTemplateItem.build(self, context, **kw) BaseTemplateItem.build(self, context, **kw)
p = context.getPortalObject() p = context.getPortalObject()
keys = self._path_archive.keys() keys = self._path_archive.keys()
keys.sort() keys.sort()
for path in keys: for path in keys:
include_subobjects = 0 include_subobjects = 0
if '**' in path: if '**' in path:
...@@ -741,7 +741,7 @@ class PathTemplateItem(ObjectTemplateItem): ...@@ -741,7 +741,7 @@ class PathTemplateItem(ObjectTemplateItem):
obj.groups = groups obj.groups = groups
self._objects[relative_url] = obj self._objects[relative_url] = obj
obj.wl_clearLocks() obj.wl_clearLocks()
class CategoryTemplateItem(ObjectTemplateItem): class CategoryTemplateItem(ObjectTemplateItem):
def __init__(self, id_list, tool_id='portal_categories', **kw): def __init__(self, id_list, tool_id='portal_categories', **kw):
...@@ -777,7 +777,7 @@ class CategoryTemplateItem(ObjectTemplateItem): ...@@ -777,7 +777,7 @@ class CategoryTemplateItem(ObjectTemplateItem):
obj.manage_delObjects(list(id_list)) obj.manage_delObjects(list(id_list))
self._objects[relative_url] = obj self._objects[relative_url] = obj
obj.wl_clearLocks() obj.wl_clearLocks()
def install(self, context, trashbin, light_install = 0, **kw): def install(self, context, trashbin, light_install = 0, **kw):
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
force = kw.get('force') force = kw.get('force')
...@@ -807,12 +807,12 @@ class CategoryTemplateItem(ObjectTemplateItem): ...@@ -807,12 +807,12 @@ class CategoryTemplateItem(ObjectTemplateItem):
container = category_tool.unrestrictedTraverse(container_path) container = category_tool.unrestrictedTraverse(container_path)
except KeyError: except KeyError:
# parent object can be set to nothing, in this case just go on # parent object can be set to nothing, in this case just go on
container_url = '/'.join(container_path) container_url = '/'.join(container_path)
if update_dict.has_key(container_url): if update_dict.has_key(container_url):
if update_dict[container_url] == 'nothing': if update_dict[container_url] == 'nothing':
continue continue
raise raise
container_ids = container.objectIds() container_ids = container.objectIds()
# Object already exists # Object already exists
if category_id in container_ids: if category_id in container_ids:
subobjects_dict = self._backupObject(action, trashbin, container_path, category_id) subobjects_dict = self._backupObject(action, trashbin, container_path, category_id)
...@@ -882,6 +882,21 @@ class SkinTemplateItem(ObjectTemplateItem): ...@@ -882,6 +882,21 @@ class SkinTemplateItem(ObjectTemplateItem):
def __init__(self, id_list, tool_id='portal_skins', **kw): def __init__(self, id_list, tool_id='portal_skins', **kw):
ObjectTemplateItem.__init__(self, id_list, tool_id=tool_id, **kw) ObjectTemplateItem.__init__(self, id_list, tool_id=tool_id, **kw)
def preinstall(self, context, installed_bt, **kw):
modified_object_list = ObjectTemplateItem.preinstall(self, context, installed_bt, **kw)
# We must install/update an ERP5 Form if one of its widget is modified.
# This allow to keep the widget order and the form layout after an update
# from a BT to another one.
for (bt_obj_path, bt_obj) in self._objects.items():
if getattr(bt_obj, 'meta_type', None) == 'ERP5 Form':
# search sub-objects of ERP5 Forms that are marked as "modified"
for upd_obj_path in modified_object_list.keys():
if upd_obj_path.startswith(bt_obj_path):
# a child of the ERP5 Form must be updated, so the form too
if not modified_object_list.has_key(bt_obj_path):
modified_object_list.update({bt_obj_path: ['Modified', self.__class__.__name__[:-12]]})
return modified_object_list
def install(self, context, trashbin, **kw): def install(self, context, trashbin, **kw):
ObjectTemplateItem.install(self, context, trashbin, **kw) ObjectTemplateItem.install(self, context, trashbin, **kw)
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
...@@ -930,7 +945,7 @@ class SkinTemplateItem(ObjectTemplateItem): ...@@ -930,7 +945,7 @@ class SkinTemplateItem(ObjectTemplateItem):
if object_path is not None: if object_path is not None:
object_keys = [object_path] object_keys = [object_path]
else: else:
object_keys = self._archive.keys() object_keys = self._archive.keys()
ps = context.portal_skins ps = context.portal_skins
skin_id_list = [relative_url.split('/')[-1] for relative_url in object_keys] skin_id_list = [relative_url.split('/')[-1] for relative_url in object_keys]
for skin_name, selection in ps.getSkinPaths(): for skin_name, selection in ps.getSkinPaths():
...@@ -956,7 +971,7 @@ class WorkflowTemplateItem(ObjectTemplateItem): ...@@ -956,7 +971,7 @@ class WorkflowTemplateItem(ObjectTemplateItem):
portal = context.getPortalObject() portal = context.getPortalObject()
new_keys = self._objects.keys() new_keys = self._objects.keys()
for path in new_keys: for path in new_keys:
if installed_bt._objects.has_key(path): if installed_bt._objects.has_key(path):
# compare object to see it there is changes # compare object to see it there is changes
new_object = self._objects[path] new_object = self._objects[path]
old_object = installed_bt._objects[path] old_object = installed_bt._objects[path]
...@@ -1003,7 +1018,7 @@ class WorkflowTemplateItem(ObjectTemplateItem): ...@@ -1003,7 +1018,7 @@ class WorkflowTemplateItem(ObjectTemplateItem):
container = portal.unrestrictedTraverse(container_path) container = portal.unrestrictedTraverse(container_path)
except KeyError: except KeyError:
# parent object can be set to nothing, in this case just go on # parent object can be set to nothing, in this case just go on
container_url = '/'.join(container_path) container_url = '/'.join(container_path)
if update_dict.has_key(container_url): if update_dict.has_key(container_url):
if update_dict[container_url] == 'nothing': if update_dict[container_url] == 'nothing':
continue continue
...@@ -1078,7 +1093,7 @@ class PortalTypeTemplateItem(ObjectTemplateItem): ...@@ -1078,7 +1093,7 @@ class PortalTypeTemplateItem(ObjectTemplateItem):
if not force: if not force:
action = update_dict[path] action = update_dict[path]
if action == 'nothing': if action == 'nothing':
continue continue
obj = object_list[path] obj = object_list[path]
portal_type = obj.id portal_type = obj.id
if self._workflow_chain_archive.has_key(portal_type): if self._workflow_chain_archive.has_key(portal_type):
...@@ -1170,7 +1185,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem): ...@@ -1170,7 +1185,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem):
if not force: if not force:
action = update_dict[path] action = update_dict[path]
if action == 'nothing': if action == 'nothing':
continue continue
portal_type = path.split('/', 1)[1] portal_type = path.split('/', 1)[1]
if chain_dict.has_key('chain_%s' % portal_type): if chain_dict.has_key('chain_%s' % portal_type):
old_chain_dict = chain_dict['chain_%s' % portal_type] old_chain_dict = chain_dict['chain_%s' % portal_type]
...@@ -1339,7 +1354,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem): ...@@ -1339,7 +1354,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem):
if id in original_property_list: if id in original_property_list:
original_property_list.remove(id) original_property_list.remove(id)
setattr(portal_type, self.class_property, list(original_property_list)) setattr(portal_type, self.class_property, list(original_property_list))
class PortalTypeHiddenContentTypeTemplateItem(PortalTypeAllowedContentTypeTemplateItem): class PortalTypeHiddenContentTypeTemplateItem(PortalTypeAllowedContentTypeTemplateItem):
xml_tag = 'hidden_content_type_list' xml_tag = 'hidden_content_type_list'
...@@ -1467,7 +1482,7 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): ...@@ -1467,7 +1482,7 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
if not force: if not force:
action = update_dict[key] action = update_dict[key]
if action == 'nothing': if action == 'nothing':
continue continue
if new_bt_format: if new_bt_format:
values.append(self._objects[key]) values.append(self._objects[key])
else: else:
...@@ -1526,7 +1541,7 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): ...@@ -1526,7 +1541,7 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
if catalog is None: if catalog is None:
LOG('BusinessTemplate', 0, 'no SQL catalog was available') LOG('BusinessTemplate', 0, 'no SQL catalog was available')
return return
values = [] values = []
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
# get required values # get required values
...@@ -1544,7 +1559,7 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): ...@@ -1544,7 +1559,7 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
sql_uncatalog_object = list(catalog.sql_uncatalog_object) sql_uncatalog_object = list(catalog.sql_uncatalog_object)
sql_clear_catalog = list(catalog.sql_clear_catalog) sql_clear_catalog = list(catalog.sql_clear_catalog)
for obj in values: for obj in values:
method_id = obj.id method_id = obj.id
if method_id in sql_catalog_object_list: if method_id in sql_catalog_object_list:
sql_catalog_object_list.remove(method_id) sql_catalog_object_list.remove(method_id)
...@@ -1554,7 +1569,7 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): ...@@ -1554,7 +1569,7 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
sql_clear_catalog.remove(method_id) sql_clear_catalog.remove(method_id)
if catalog.filter_dict.has_key(method_id): if catalog.filter_dict.has_key(method_id):
del catalog.filter_dict[method_id] del catalog.filter_dict[method_id]
catalog.sql_catalog_object_list = tuple(sql_catalog_object_list) catalog.sql_catalog_object_list = tuple(sql_catalog_object_list)
catalog.sql_uncatalog_object = tuple(sql_uncatalog_object) catalog.sql_uncatalog_object = tuple(sql_uncatalog_object)
catalog.sql_clear_catalog = tuple(sql_clear_catalog) catalog.sql_clear_catalog = tuple(sql_clear_catalog)
...@@ -1662,7 +1677,7 @@ class ActionTemplateItem(ObjectTemplateItem): ...@@ -1662,7 +1677,7 @@ class ActionTemplateItem(ObjectTemplateItem):
obj = p.unrestrictedTraverse(path[:-1]) obj = p.unrestrictedTraverse(path[:-1])
action_list = obj.listActions() action_list = obj.listActions()
for index in range(len(action_list)): for index in range(len(action_list)):
if getattr(action_list[index], 'id') == path[-1]: if getattr(action_list[index], 'id') == path[-1]:
# remove previous action # remove previous action
obj.deleteActions(selections=(index,)) obj.deleteActions(selections=(index,))
action = self._objects[id] action = self._objects[id]
...@@ -1797,7 +1812,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem): ...@@ -1797,7 +1812,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
xml_data += os.linesep+" </role>" xml_data += os.linesep+" </role>"
xml_data += os.linesep+'</type_roles>' xml_data += os.linesep+'</type_roles>'
return xml_data return xml_data
def export(self, context, bta, **kw): def export(self, context, bta, **kw):
if len(self._objects.keys()) == 0: if len(self._objects.keys()) == 0:
return return
...@@ -1811,7 +1826,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem): ...@@ -1811,7 +1826,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
def _importFile(self, file_name, file): def _importFile(self, file_name, file):
type_roles_list = [] type_roles_list = []
xml = parse(file) xml = parse(file)
xml_type_roles_list = xml.getElementsByTagName('role') xml_type_roles_list = xml.getElementsByTagName('role')
for role in xml_type_roles_list: for role in xml_type_roles_list:
id = role.getAttribute('id') id = role.getAttribute('id')
type_role_property_dict = {'id':id} type_role_property_dict = {'id':id}
...@@ -1905,7 +1920,7 @@ class SitePropertyTemplateItem(BaseTemplateItem): ...@@ -1905,7 +1920,7 @@ class SitePropertyTemplateItem(BaseTemplateItem):
if not force: if not force:
action = update_dict[path] action = update_dict[path]
if action == 'nothing': if action == 'nothing':
continue continue
dir, id = os.path.split(path) dir, id = os.path.split(path)
if p.hasProperty(id): if p.hasProperty(id):
continue continue
...@@ -2036,7 +2051,7 @@ class ModuleTemplateItem(BaseTemplateItem): ...@@ -2036,7 +2051,7 @@ class ModuleTemplateItem(BaseTemplateItem):
path, id = os.path.split(id) path, id = os.path.split(id)
if id in portal.objectIds(): if id in portal.objectIds():
module = portal._getOb(id) module = portal._getOb(id)
module.portal_type = str(mapping['portal_type']) module.portal_type = str(mapping['portal_type'])
else: else:
module = portal.newContent(id=id, portal_type=str(mapping['portal_type'])) module = portal.newContent(id=id, portal_type=str(mapping['portal_type']))
module.setTitle(str(mapping['title'])) module.setTitle(str(mapping['title']))
...@@ -2165,7 +2180,7 @@ class DocumentTemplateItem(BaseTemplateItem): ...@@ -2165,7 +2180,7 @@ class DocumentTemplateItem(BaseTemplateItem):
globals()[self.local_file_importer_name](id) globals()[self.local_file_importer_name](id)
def uninstall(self, context, **kw): def uninstall(self, context, **kw):
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
if object_path is not None: if object_path is not None:
object_keys = [object_path] object_keys = [object_path]
else: else:
...@@ -2239,7 +2254,7 @@ class RoleTemplateItem(BaseTemplateItem): ...@@ -2239,7 +2254,7 @@ class RoleTemplateItem(BaseTemplateItem):
old_keys = installed_bt._objects.values()[0] old_keys = installed_bt._objects.values()[0]
for key in old_keys: for key in old_keys:
new_dict[key] = '' new_dict[key] = ''
installed_bt._objects = new_dict installed_bt._objects = new_dict
for role in new_roles: for role in new_roles:
if installed_bt._objects.has_key(role): if installed_bt._objects.has_key(role):
continue continue
...@@ -2497,7 +2512,7 @@ class CatalogRelatedKeyTemplateItem(BaseTemplateItem): ...@@ -2497,7 +2512,7 @@ class CatalogRelatedKeyTemplateItem(BaseTemplateItem):
LOG('BusinessTemplate', 0, 'no SQL catalog was available') LOG('BusinessTemplate', 0, 'no SQL catalog was available')
return return
sql_catalog_related_keys = list(catalog.sql_catalog_related_keys) sql_catalog_related_keys = list(catalog.sql_catalog_related_keys)
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
if object_path is not None: if object_path is not None:
object_keys = [object_path] object_keys = [object_path]
else: else:
...@@ -2596,7 +2611,7 @@ class CatalogResultTableTemplateItem(BaseTemplateItem): ...@@ -2596,7 +2611,7 @@ class CatalogResultTableTemplateItem(BaseTemplateItem):
LOG('BusinessTemplate', 0, 'no SQL catalog was available') LOG('BusinessTemplate', 0, 'no SQL catalog was available')
return return
sql_search_tables = list(catalog.sql_search_tables) sql_search_tables = list(catalog.sql_search_tables)
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
if object_path is not None: if object_path is not None:
object_keys = [object_path] object_keys = [object_path]
else: else:
...@@ -2613,7 +2628,7 @@ class CatalogResultTableTemplateItem(BaseTemplateItem): ...@@ -2613,7 +2628,7 @@ class CatalogResultTableTemplateItem(BaseTemplateItem):
obj.sort() obj.sort()
for key in obj: for key in obj:
xml_data += os.linesep+' <key>%s</key>' %(key) xml_data += os.linesep+' <key>%s</key>' %(key)
xml_data += os.linesep+'</key_list>' xml_data += os.linesep+'</key_list>'
return xml_data return xml_data
def export(self, context, bta, **kw): def export(self, context, bta, **kw):
...@@ -2624,7 +2639,7 @@ class CatalogResultTableTemplateItem(BaseTemplateItem): ...@@ -2624,7 +2639,7 @@ class CatalogResultTableTemplateItem(BaseTemplateItem):
for path in self._objects.keys(): for path in self._objects.keys():
xml_data = self.generateXml(path=path) xml_data = self.generateXml(path=path)
bta.addObject(obj=xml_data, name=path, path=None) bta.addObject(obj=xml_data, name=path, path=None)
# keyword # keyword
class CatalogKeywordKeyTemplateItem(BaseTemplateItem): class CatalogKeywordKeyTemplateItem(BaseTemplateItem):
...@@ -2696,7 +2711,7 @@ class CatalogKeywordKeyTemplateItem(BaseTemplateItem): ...@@ -2696,7 +2711,7 @@ class CatalogKeywordKeyTemplateItem(BaseTemplateItem):
LOG('BusinessTemplate', 0, 'no SQL catalog was available') LOG('BusinessTemplate', 0, 'no SQL catalog was available')
return return
sql_keyword_keys = list(catalog.sql_catalog_keyword_search_keys) sql_keyword_keys = list(catalog.sql_catalog_keyword_search_keys)
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
if object_path is not None: if object_path is not None:
object_keys = [object_path] object_keys = [object_path]
else: else:
...@@ -2796,7 +2811,7 @@ class CatalogFullTextKeyTemplateItem(BaseTemplateItem): ...@@ -2796,7 +2811,7 @@ class CatalogFullTextKeyTemplateItem(BaseTemplateItem):
LOG('BusinessTemplate', 0, 'no SQL catalog was available') LOG('BusinessTemplate', 0, 'no SQL catalog was available')
return return
sql_full_text_keys = list(catalog.sql_catalog_full_text_search_keys) sql_full_text_keys = list(catalog.sql_catalog_full_text_search_keys)
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
if object_path is not None: if object_path is not None:
object_keys = [object_path] object_keys = [object_path]
else: else:
...@@ -2897,7 +2912,7 @@ class CatalogRequestKeyTemplateItem(BaseTemplateItem): ...@@ -2897,7 +2912,7 @@ class CatalogRequestKeyTemplateItem(BaseTemplateItem):
LOG('BusinessTemplate', 0, 'no SQL catalog was available') LOG('BusinessTemplate', 0, 'no SQL catalog was available')
return return
sql_catalog_request_keys = list(catalog.sql_catalog_request_keys) sql_catalog_request_keys = list(catalog.sql_catalog_request_keys)
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
if object_path is not None: if object_path is not None:
object_keys = [object_path] object_keys = [object_path]
else: else:
...@@ -2996,7 +3011,7 @@ class CatalogMultivalueKeyTemplateItem(BaseTemplateItem): ...@@ -2996,7 +3011,7 @@ class CatalogMultivalueKeyTemplateItem(BaseTemplateItem):
LOG('BusinessTemplate', 0, 'no SQL catalog was available') LOG('BusinessTemplate', 0, 'no SQL catalog was available')
return return
sql_catalog_multivalue_keys = list(catalog.sql_catalog_multivalue_keys) sql_catalog_multivalue_keys = list(catalog.sql_catalog_multivalue_keys)
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
if object_path is not None: if object_path is not None:
object_keys = [object_path] object_keys = [object_path]
else: else:
...@@ -3096,7 +3111,7 @@ class CatalogTopicKeyTemplateItem(BaseTemplateItem): ...@@ -3096,7 +3111,7 @@ class CatalogTopicKeyTemplateItem(BaseTemplateItem):
LOG('BusinessTemplate', 0, 'no SQL catalog was available') LOG('BusinessTemplate', 0, 'no SQL catalog was available')
return return
sql_catalog_topic_search_keys = list(catalog.sql_catalog_topic_search_keys) sql_catalog_topic_search_keys = list(catalog.sql_catalog_topic_search_keys)
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
if object_path is not None: if object_path is not None:
object_keys = [object_path] object_keys = [object_path]
else: else:
...@@ -3167,7 +3182,7 @@ class MessageTranslationTemplateItem(BaseTemplateItem): ...@@ -3167,7 +3182,7 @@ class MessageTranslationTemplateItem(BaseTemplateItem):
if not force: if not force:
action = update_dict[path] action = update_dict[path]
if action == 'nothing': if action == 'nothing':
continue continue
path = string.split(path, '/') path = string.split(path, '/')
lang = path[-3] lang = path[-3]
catalog = path[-2] catalog = path[-2]
...@@ -3248,7 +3263,7 @@ class LocalRolesTemplateItem(BaseTemplateItem): ...@@ -3248,7 +3263,7 @@ class LocalRolesTemplateItem(BaseTemplateItem):
xml_data += os.linesep+' </group_local_roles>' xml_data += os.linesep+' </group_local_roles>'
xml_data += os.linesep+'</local_roles_item>' xml_data += os.linesep+'</local_roles_item>'
return xml_data return xml_data
def export(self, context, bta, **kw): def export(self, context, bta, **kw):
if len(self._objects.keys()) == 0: if len(self._objects.keys()) == 0:
return return
...@@ -3264,7 +3279,7 @@ class LocalRolesTemplateItem(BaseTemplateItem): ...@@ -3264,7 +3279,7 @@ class LocalRolesTemplateItem(BaseTemplateItem):
encode_folders.append(pathname2url(folder)) encode_folders.append(pathname2url(folder))
else: else:
encode_folders.append(folder) encode_folders.append(folder)
path = os.path.join(root_path, (os.sep).join(encode_folders)) path = os.path.join(root_path, (os.sep).join(encode_folders))
bta.addFolder(name=path) bta.addFolder(name=path)
bta.addObject(obj=xml_data, name=id, path=path) bta.addObject(obj=xml_data, name=id, path=path)
...@@ -3272,7 +3287,7 @@ class LocalRolesTemplateItem(BaseTemplateItem): ...@@ -3272,7 +3287,7 @@ class LocalRolesTemplateItem(BaseTemplateItem):
xml = parse(file) xml = parse(file)
# local roles # local roles
local_roles = xml.getElementsByTagName('local_roles')[0] local_roles = xml.getElementsByTagName('local_roles')[0]
local_roles_list = local_roles.getElementsByTagName('role') local_roles_list = local_roles.getElementsByTagName('role')
local_roles_dict = {} local_roles_dict = {}
for role in local_roles_list: for role in local_roles_list:
id = role.getAttribute('id') id = role.getAttribute('id')
...@@ -3283,7 +3298,7 @@ class LocalRolesTemplateItem(BaseTemplateItem): ...@@ -3283,7 +3298,7 @@ class LocalRolesTemplateItem(BaseTemplateItem):
local_roles_dict[id] = item_type_list local_roles_dict[id] = item_type_list
# group local roles # group local roles
group_local_roles = xml.getElementsByTagName('group_local_roles')[0] group_local_roles = xml.getElementsByTagName('group_local_roles')[0]
local_roles_list = group_local_roles.getElementsByTagName('role') local_roles_list = group_local_roles.getElementsByTagName('role')
group_local_roles_dict = {} group_local_roles_dict = {}
for role in local_roles_list: for role in local_roles_list:
id = role.getAttribute('id') id = role.getAttribute('id')
...@@ -3317,7 +3332,7 @@ class LocalRolesTemplateItem(BaseTemplateItem): ...@@ -3317,7 +3332,7 @@ class LocalRolesTemplateItem(BaseTemplateItem):
obj = p.unrestrictedTraverse(path) obj = p.unrestrictedTraverse(path)
setattr(obj, '__ac_local_roles__', {}) setattr(obj, '__ac_local_roles__', {})
setattr(obj, '__ac_local_group_roles__', {}) setattr(obj, '__ac_local_group_roles__', {})
class BusinessTemplate(XMLObject): class BusinessTemplate(XMLObject):
""" """
A business template allows to construct ERP5 modules A business template allows to construct ERP5 modules
...@@ -3463,9 +3478,9 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3463,9 +3478,9 @@ Business Template is a set of definitions, such as skins, portal types and categ
# the attribute _objects in BaseTemplateItem was added in the new format. # the attribute _objects in BaseTemplateItem was added in the new format.
if hasattr(self._path_item, '_objects'): if hasattr(self._path_item, '_objects'):
return 1 return 1
return 0 return 0
security.declareProtected(Permissions.ManagePortal, 'manage_afterAdd') security.declareProtected(Permissions.ManagePortal, 'manage_afterAdd')
def manage_afterAdd(self, item, container): def manage_afterAdd(self, item, container):
""" """
...@@ -3487,7 +3502,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3487,7 +3502,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
Copy existing portal objects to self Copy existing portal objects to self
""" """
if no_action: return # this is use at import of Business Template to get the status built if no_action: return # this is use at import of Business Template to get the status built
# Make sure that everything is sane. # Make sure that everything is sane.
self.clean() self.clean()
...@@ -3557,23 +3572,23 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3557,23 +3572,23 @@ Business Template is a set of definitions, such as skins, portal types and categ
PathTemplateItem(self.getTemplatePathList()) PathTemplateItem(self.getTemplatePathList())
self._catalog_keyword_key_item = \ self._catalog_keyword_key_item = \
CatalogKeywordKeyTemplateItem( CatalogKeywordKeyTemplateItem(
self.getTemplateCatalogKeywordKeyList()) self.getTemplateCatalogKeywordKeyList())
self._catalog_full_text_key_item = \ self._catalog_full_text_key_item = \
CatalogFullTextKeyTemplateItem( CatalogFullTextKeyTemplateItem(
self.getTemplateCatalogFullTextKeyList()) self.getTemplateCatalogFullTextKeyList())
self._catalog_request_key_item = \ self._catalog_request_key_item = \
CatalogRequestKeyTemplateItem( CatalogRequestKeyTemplateItem(
self.getTemplateCatalogRequestKeyList()) self.getTemplateCatalogRequestKeyList())
self._catalog_multivalue_key_item = \ self._catalog_multivalue_key_item = \
CatalogMultivalueKeyTemplateItem( CatalogMultivalueKeyTemplateItem(
self.getTemplateCatalogMultivalueKeyList()) self.getTemplateCatalogMultivalueKeyList())
self._catalog_topic_key_item = \ self._catalog_topic_key_item = \
CatalogTopicKeyTemplateItem( CatalogTopicKeyTemplateItem(
self.getTemplateCatalogTopicKeyList()) self.getTemplateCatalogTopicKeyList())
self._local_roles_item = \ self._local_roles_item = \
LocalRolesTemplateItem( LocalRolesTemplateItem(
self.getTemplateLocalRolesList()) self.getTemplateLocalRolesList())
# Build each part # Build each part
for item_name in self._item_name_list: for item_name in self._item_name_list:
getattr(self, item_name).build(self) getattr(self, item_name).build(self)
...@@ -3598,7 +3613,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3598,7 +3613,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
Return the list of modified/new/removed object between a Business Template Return the list of modified/new/removed object between a Business Template
and the one installed if exists and the one installed if exists
""" """
modified_object_list = {} modified_object_list = {}
bt_title = self.getTitle() bt_title = self.getTitle()
...@@ -3616,7 +3631,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3616,7 +3631,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
# if reinstall business template, must compare to object in ZODB # if reinstall business template, must compare to object in ZODB
# and not to those in the installed Business Template because it is itself. # and not to those in the installed Business Template because it is itself.
# same if we make a diff and selected only one business template # same if we make a diff and selected only one business template
reinstall = 0 reinstall = 0
if installed_bt == self: if installed_bt == self:
reinstall = 1 reinstall = 1
bt2 = self.portal_templates.manage_clone(ob=installed_bt, id='installed_bt_for_diff') bt2 = self.portal_templates.manage_clone(ob=installed_bt, id='installed_bt_for_diff')
...@@ -3625,7 +3640,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3625,7 +3640,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
bt2.edit(description='tmp bt generated for diff') bt2.edit(description='tmp bt generated for diff')
bt2.build() bt2.build()
installed_bt = bt2 installed_bt = bt2
new_bt_format = self.getTemplateFormatVersion() new_bt_format = self.getTemplateFormatVersion()
if installed_bt_format == 0 and new_bt_format == 0: if installed_bt_format == 0 and new_bt_format == 0:
# still use old format, so install everything, no choice # still use old format, so install everything, no choice
...@@ -3656,7 +3671,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3656,7 +3671,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
if reinstall: if reinstall:
self.portal_templates.manage_delObjects(ids=['installed_bt_for_diff']) self.portal_templates.manage_delObjects(ids=['installed_bt_for_diff'])
return modified_object_list return modified_object_list
def _install(self, force=1, object_to_update={}, **kw): def _install(self, force=1, object_to_update={}, **kw):
...@@ -3664,10 +3679,10 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3664,10 +3679,10 @@ Business Template is a set of definitions, such as skins, portal types and categ
Install a new Business Template, if force, all we be upgrade or installed Install a new Business Template, if force, all we be upgrade or installed
otherwise depends of dict object_to_update otherwise depends of dict object_to_update
""" """
installed_bt = self.portal_templates.getInstalledBusinessTemplate( installed_bt = self.portal_templates.getInstalledBusinessTemplate(
self.getTitle()) self.getTitle())
if installed_bt is not None: if installed_bt is not None:
if installed_bt.getTemplateFormatVersion() == 0: if installed_bt.getTemplateFormatVersion() == 0:
force = 1 force = 1
installed_bt.replace(self) installed_bt.replace(self)
...@@ -3679,14 +3694,14 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3679,14 +3694,14 @@ Business Template is a set of definitions, such as skins, portal types and categ
# Check the format of business template, if old, force install # Check the format of business template, if old, force install
if self.getTemplateFormatVersion() == 0: if self.getTemplateFormatVersion() == 0:
force = 1 force = 1
site = self.getPortalObject() site = self.getPortalObject()
from Products.ERP5.ERP5Site import ERP5Generator from Products.ERP5.ERP5Site import ERP5Generator
gen = ERP5Generator() gen = ERP5Generator()
# update activity tool first if necessary # update activity tool first if necessary
if self.getTitle() == 'erp5_core' and self.getTemplateUpdateTool(): if self.getTitle() == 'erp5_core' and self.getTemplateUpdateTool():
LOG('Business Template', 0, 'Updating Activity Tool') LOG('Business Template', 0, 'Updating Activity Tool')
gen.setupLastTools(site, update=1, create_activities=1) gen.setupLastTools(site, update=1, create_activities=1)
if not force: if not force:
if len(object_to_update) == 0: if len(object_to_update) == 0:
# check if we have to update tools # check if we have to update tools
...@@ -3716,7 +3731,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3716,7 +3731,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
if 'related' not in id: if 'related' not in id:
# must update catalog # must update catalog
update_catalog = 1 update_catalog = 1
break break
if update_catalog: if update_catalog:
catalog = local_configuration.portal_catalog.getSQLCatalog() catalog = local_configuration.portal_catalog.getSQLCatalog()
if catalog is None: if catalog is None:
...@@ -3725,14 +3740,14 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3725,14 +3740,14 @@ Business Template is a set of definitions, such as skins, portal types and categ
else: else:
LOG('Business Template', 0, 'Updating SQL Catalog') LOG('Business Template', 0, 'Updating SQL Catalog')
catalog.manage_catalogClear() catalog.manage_catalogClear()
# always created a trash bin because we may to save object already present # always created a trash bin because we may to save object already present
# but not in a previous business templates apart at creation of a new site # but not in a previous business templates apart at creation of a new site
if trash_tool is not None and (len(object_to_update) > 0 or len(self.portal_templates.objectIds()) > 1): if trash_tool is not None and (len(object_to_update) > 0 or len(self.portal_templates.objectIds()) > 1):
trashbin = trash_tool.newTrashBin(self.getTitle(), self) trashbin = trash_tool.newTrashBin(self.getTitle(), self)
else: else:
trashbin = None trashbin = None
# Install everything # Install everything
if len(object_to_update) > 0 or force: if len(object_to_update) > 0 or force:
for item_name in self._item_name_list: for item_name in self._item_name_list:
...@@ -3771,7 +3786,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3771,7 +3786,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
if update_catalog: if update_catalog:
site.ERP5Site_reindexAll() site.ERP5Site_reindexAll()
# It is better to clear cache because the installation of a template # It is better to clear cache because the installation of a template
# adds many new things into the portal. # adds many new things into the portal.
clearCache() clearCache()
...@@ -3780,7 +3795,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3780,7 +3795,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
def install(self, **kw): def install(self, **kw):
""" """
For install based on paramaters provided in **kw For install based on paramaters provided in **kw
""" """
return self._install(**kw) return self._install(**kw)
install = WorkflowMethod(install) install = WorkflowMethod(install)
...@@ -3952,7 +3967,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -3952,7 +3967,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
ordered list ordered list
""" """
return self._getOrderedList('template_portal_type_allowed_content_type') return self._getOrderedList('template_portal_type_allowed_content_type')
def getTemplatePortalTypeHiddenContentTypeList(self): def getTemplatePortalTypeHiddenContentTypeList(self):
""" """
We have to set this method because we want an We have to set this method because we want an
...@@ -4016,7 +4031,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4016,7 +4031,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
""" """
if self.getBuildingState() != 'built': if self.getBuildingState() != 'built':
raise TemplateConditionError, 'Business Template must be build before export' raise TemplateConditionError, 'Business Template must be build before export'
if local: if local:
# we export into a folder tree # we export into a folder tree
bta = BusinessTemplateFolder(creation=1, path=path) bta = BusinessTemplateFolder(creation=1, path=path)
...@@ -4042,7 +4057,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4042,7 +4057,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
# Export each part # Export each part
for item_name in self._item_name_list: for item_name in self._item_name_list:
getattr(self, item_name).export(context=self, bta=bta) getattr(self, item_name).export(context=self, bta=bta)
return bta.finishCreation() return bta.finishCreation()
security.declareProtected(Permissions.ManagePortal, 'importFile') security.declareProtected(Permissions.ManagePortal, 'importFile')
...@@ -4117,23 +4132,23 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4117,23 +4132,23 @@ Business Template is a set of definitions, such as skins, portal types and categ
self.getTemplatePortalTypeBaseCategoryList()) self.getTemplatePortalTypeBaseCategoryList())
self._catalog_keyword_key_item = \ self._catalog_keyword_key_item = \
CatalogKeywordKeyTemplateItem( CatalogKeywordKeyTemplateItem(
self.getTemplateCatalogKeywordKeyList()) self.getTemplateCatalogKeywordKeyList())
self._catalog_full_text_key_item = \ self._catalog_full_text_key_item = \
CatalogFullTextKeyTemplateItem( CatalogFullTextKeyTemplateItem(
self.getTemplateCatalogFullTextKeyList()) self.getTemplateCatalogFullTextKeyList())
self._catalog_request_key_item = \ self._catalog_request_key_item = \
CatalogRequestKeyTemplateItem( CatalogRequestKeyTemplateItem(
self.getTemplateCatalogRequestKeyList()) self.getTemplateCatalogRequestKeyList())
self._catalog_multivalue_key_item = \ self._catalog_multivalue_key_item = \
CatalogMultivalueKeyTemplateItem( CatalogMultivalueKeyTemplateItem(
self.getTemplateCatalogMultivalueKeyList()) self.getTemplateCatalogMultivalueKeyList())
self._catalog_topic_key_item = \ self._catalog_topic_key_item = \
CatalogTopicKeyTemplateItem( CatalogTopicKeyTemplateItem(
self.getTemplateCatalogTopicKeyList()) self.getTemplateCatalogTopicKeyList())
self._local_roles_item = \ self._local_roles_item = \
LocalRolesTemplateItem( LocalRolesTemplateItem(
self.getTemplateLocalRolesList()) self.getTemplateLocalRolesList())
for item_name in self._item_name_list: for item_name in self._item_name_list:
getattr(self, item_name).importFile(bta) getattr(self, item_name).importFile(bta)
...@@ -4146,7 +4161,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4146,7 +4161,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
class_name_dict = { class_name_dict = {
'Product' : '_product_item', 'Product' : '_product_item',
'PropertySheet' : '_property_sheet_item', 'PropertySheet' : '_property_sheet_item',
'Constraint' : '_constraint_item', 'Constraint' : '_constraint_item',
'Document' : '_document_item', 'Document' : '_document_item',
'Extension' : '_extension_item', 'Extension' : '_extension_item',
...@@ -4178,7 +4193,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4178,7 +4193,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
'CatalogMultivalueKey' : '_catalog_multivalue_key_item', 'CatalogMultivalueKey' : '_catalog_multivalue_key_item',
'CatalogTopicKey' : '_catalog_topic_key_item', 'CatalogTopicKey' : '_catalog_topic_key_item',
} }
object_id = REQUEST.object_id object_id = REQUEST.object_id
object_class = REQUEST.object_class object_class = REQUEST.object_class
# get objects # get objects
...@@ -4203,7 +4218,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4203,7 +4218,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
bt2.getPortalTypesProperties() bt2.getPortalTypesProperties()
bt2.edit(description='tmp bt generated for diff') bt2.edit(description='tmp bt generated for diff')
installed_bt = bt2 installed_bt = bt2
new_item = getattr(new_bt, item_name) new_item = getattr(new_bt, item_name)
installed_item = getattr(installed_bt, item_name) installed_item = getattr(installed_bt, item_name)
if compare_to_zodb: if compare_to_zodb:
...@@ -4225,7 +4240,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4225,7 +4240,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
item_list_3 = ['_document_item', '_property_sheet_item', item_list_3 = ['_document_item', '_property_sheet_item',
'_constraint_item', '_extension_item', '_test_item', '_constraint_item', '_extension_item', '_test_item',
'_message_translation_item'] '_message_translation_item']
if item_name in item_list_1: if item_name in item_list_1:
f1 = StringIO() f1 = StringIO()
f2 = StringIO() f2 = StringIO()
...@@ -4246,7 +4261,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4246,7 +4261,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
diff_msg += '\n'.join(diff_list) diff_msg += '\n'.join(diff_list)
else: else:
diff_msg = 'No diff' diff_msg = 'No diff'
elif item_name in item_list_2: elif item_name in item_list_2:
new_obj_xml = new_item.generateXml(path= object_id) new_obj_xml = new_item.generateXml(path= object_id)
installed_obj_xml = installed_item.generateXml(path= object_id) installed_obj_xml = installed_item.generateXml(path= object_id)
...@@ -4258,7 +4273,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4258,7 +4273,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
diff_msg += '\n'.join(diff_list) diff_msg += '\n'.join(diff_list)
else: else:
diff_msg = 'No diff' diff_msg = 'No diff'
elif item_name in item_list_3: elif item_name in item_list_3:
new_obj_lines = new_object.splitlines() new_obj_lines = new_object.splitlines()
installed_obj_lines = installed_object.splitlines() installed_obj_lines = installed_object.splitlines()
...@@ -4267,13 +4282,13 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4267,13 +4282,13 @@ Business Template is a set of definitions, such as skins, portal types and categ
diff_msg += '\n\nObject %s diff :\n' %( object_id) diff_msg += '\n\nObject %s diff :\n' %( object_id)
diff_msg += '\n'.join(diff_list) diff_msg += '\n'.join(diff_list)
else: else:
diff_msg = 'No diff' diff_msg = 'No diff'
if compare_to_zodb: if compare_to_zodb:
self.portal_templates.manage_delObjects(ids=['installed_bt_for_diff']) self.portal_templates.manage_delObjects(ids=['installed_bt_for_diff'])
return diff_msg return diff_msg
def getPortalTypesProperties(self, **kw): def getPortalTypesProperties(self, **kw):
""" """
Fill field about properties for each portal type Fill field about properties for each portal type
...@@ -4294,7 +4309,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4294,7 +4309,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
chain_dict = {} chain_dict = {}
p = self.getPortalObject() p = self.getPortalObject()
for id in bt_portal_types_id_list: for id in bt_portal_types_id_list:
try: try:
portal_type = p.unrestrictedTraverse('portal_types/'+id) portal_type = p.unrestrictedTraverse('portal_types/'+id)
except KeyError: except KeyError:
...@@ -4316,34 +4331,34 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4316,34 +4331,34 @@ Business Template is a set of definitions, such as skins, portal types and categ
if hasattr(portal_type, 'property_sheet_list'): if hasattr(portal_type, 'property_sheet_list'):
property_sheet_list = portal_type.property_sheet_list property_sheet_list = portal_type.property_sheet_list
if hasattr(portal_type, 'base_category_list'): if hasattr(portal_type, 'base_category_list'):
base_category_list = portal_type.base_category_list base_category_list = portal_type.base_category_list
if hasattr(portal_type, 'listActions'): if hasattr(portal_type, 'listActions'):
action_list = [x.getId() for x in portal_type.listActions()] action_list = [x.getId() for x in portal_type.listActions()]
if chain_dict.has_key('chain_%s' % id): if chain_dict.has_key('chain_%s' % id):
chain = chain_dict['chain_%s' % id] chain = chain_dict['chain_%s' % id]
if chain != '' and chain != '(Default)': if chain != '' and chain != '(Default)':
wf_list = chain.split(', ') wf_list = chain.split(', ')
for a_id in allowed_content_type_list: for a_id in allowed_content_type_list:
allowed_id = id+' | '+a_id allowed_id = id+' | '+a_id
if allowed_id not in bt_allowed_content_type_list: if allowed_id not in bt_allowed_content_type_list:
bt_allowed_content_type_list.append(allowed_id) bt_allowed_content_type_list.append(allowed_id)
for h_id in hidden_content_type_list: for h_id in hidden_content_type_list:
hidden_id = id+' | '+h_id hidden_id = id+' | '+h_id
if hidden_id not in bt_hidden_content_type_list: if hidden_id not in bt_hidden_content_type_list:
bt_hidden_content_type_list.append(hidden_id) bt_hidden_content_type_list.append(hidden_id)
for ps_id in property_sheet_list: for ps_id in property_sheet_list:
p_sheet_id = id+' | '+ps_id p_sheet_id = id+' | '+ps_id
if p_sheet_id not in bt_property_sheet_list: if p_sheet_id not in bt_property_sheet_list:
bt_property_sheet_list.append(p_sheet_id) bt_property_sheet_list.append(p_sheet_id)
for bc_id in base_category_list: for bc_id in base_category_list:
base_cat_id = id+' | '+bc_id base_cat_id = id+' | '+bc_id
if base_cat_id not in bt_base_category_list: if base_cat_id not in bt_base_category_list:
bt_base_category_list.append(base_cat_id) bt_base_category_list.append(base_cat_id)
for act_id in action_list: for act_id in action_list:
action_id = id+' | '+act_id action_id = id+' | '+act_id
if action_id not in bt_action_list: if action_id not in bt_action_list:
...@@ -4353,7 +4368,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4353,7 +4368,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
wf_id = id+' | '+workflow_id wf_id = id+' | '+workflow_id
if wf_id not in bt_wf_chain_list: if wf_id not in bt_wf_chain_list:
bt_wf_chain_list.append(wf_id) bt_wf_chain_list.append(wf_id)
bt_allowed_content_type_list.sort() bt_allowed_content_type_list.sort()
bt_hidden_content_type_list.sort() bt_hidden_content_type_list.sort()
bt_property_sheet_list.sort() bt_property_sheet_list.sort()
...@@ -4361,13 +4376,13 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4361,13 +4376,13 @@ Business Template is a set of definitions, such as skins, portal types and categ
bt_action_list.sort() bt_action_list.sort()
bt_wf_chain_list.sort() bt_wf_chain_list.sort()
setattr(self, 'template_portal_type_workflow_chain', bt_wf_chain_list) setattr(self, 'template_portal_type_workflow_chain', bt_wf_chain_list)
setattr(self, 'template_portal_type_roles', bt_portal_type_roles_list) setattr(self, 'template_portal_type_roles', bt_portal_type_roles_list)
setattr(self, 'template_portal_type_allowed_content_type', bt_allowed_content_type_list) setattr(self, 'template_portal_type_allowed_content_type', bt_allowed_content_type_list)
setattr(self, 'template_portal_type_hidden_content_type', bt_hidden_content_type_list) setattr(self, 'template_portal_type_hidden_content_type', bt_hidden_content_type_list)
setattr(self, 'template_portal_type_property_sheet', bt_property_sheet_list) setattr(self, 'template_portal_type_property_sheet', bt_property_sheet_list)
setattr(self, 'template_portal_type_base_category', bt_base_category_list) setattr(self, 'template_portal_type_base_category', bt_base_category_list)
setattr(self, 'template_action_path', bt_action_list) setattr(self, 'template_action_path', bt_action_list)
return return
...@@ -4377,8 +4392,8 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4377,8 +4392,8 @@ Business Template is a set of definitions, such as skins, portal types and categ
""" """
bt_module_id_list = list(self.getTemplateModuleIdList()) bt_module_id_list = list(self.getTemplateModuleIdList())
if len(bt_module_id_list) == 0: if len(bt_module_id_list) == 0:
raise TemplateConditionError, 'No module defined in business template' raise TemplateConditionError, 'No module defined in business template'
bt_portal_types_id_list = list(self.getTemplatePortalTypeIdList()) bt_portal_types_id_list = list(self.getTemplatePortalTypeIdList())
def getChildPortalType(type_id): def getChildPortalType(type_id):
...@@ -4387,7 +4402,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4387,7 +4402,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
try: try:
portal_type = p.unrestrictedTraverse('portal_types/'+type_id) portal_type = p.unrestrictedTraverse('portal_types/'+type_id)
except KeyError: except KeyError:
return type_list return type_list
allowed_content_type_list = [] allowed_content_type_list = []
hidden_content_type_list = [] hidden_content_type_list = []
...@@ -4402,9 +4417,9 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4402,9 +4417,9 @@ Business Template is a set of definitions, such as skins, portal types and categ
type_list.update(getChildPortalType(allowed_ptype_id)) type_list.update(getChildPortalType(allowed_ptype_id))
for hidden_ptype_id in hidden_content_type_list: for hidden_ptype_id in hidden_content_type_list:
if hidden_ptype_id not in type_list.keys(): if hidden_ptype_id not in type_list.keys():
type_list.update(getChildPortalType(hidden_ptype_id)) type_list.update(getChildPortalType(hidden_ptype_id))
return type_list return type_list
p = self.getPortalObject() p = self.getPortalObject()
portal_dict = {} portal_dict = {}
for module_id in bt_module_id_list: for module_id in bt_module_id_list:
...@@ -4479,7 +4494,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4479,7 +4494,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
# self._update = 0 # self._update = 0
# LOG('call update of wf', 0, '') # LOG('call update of wf', 0, '')
# self._gen.setupWorkflow(self._site) # self._gen.setupWorkflow(self._site)
# def _finish(self, **kw): # def _finish(self, **kw):
# LOG('finish TM', 0, '') # LOG('finish TM', 0, '')
...@@ -4488,4 +4503,4 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4488,4 +4503,4 @@ Business Template is a set of definitions, such as skins, portal types and categ
# def _abort(self, **kw): # def _abort(self, **kw):
# LOG('abort TM', 0, '') # LOG('abort TM', 0, '')
# pass # pass
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