Commit c1746228 authored by Arnaud Fontaine's avatar Arnaud Fontaine

Get rid of Business Template format version 0 as it's been deprecated for a while.

parent 394054e6
...@@ -472,9 +472,8 @@ class BaseTemplateItem(Implicit, Persistent): ...@@ -472,9 +472,8 @@ class BaseTemplateItem(Implicit, Persistent):
XXX: -12 used here is -len('TemplateItem') XXX: -12 used here is -len('TemplateItem')
""" """
modified_object_list = {} modified_object_list = {}
if context.getTemplateFormatVersion() == 1: if 1:
new_keys = self._objects.keys() for path in self._objects:
for path in new_keys:
if installed_item._objects.has_key(path): if installed_item._objects.has_key(path):
# compare objects to see it there are changes # compare objects to see it there are changes
new_obj_xml = self.generateXml(path=path) new_obj_xml = self.generateXml(path=path)
...@@ -487,7 +486,7 @@ class BaseTemplateItem(Implicit, Persistent): ...@@ -487,7 +486,7 @@ class BaseTemplateItem(Implicit, Persistent):
# list removed objects # list removed objects
old_keys = installed_item._objects.keys() old_keys = installed_item._objects.keys()
for path in old_keys: for path in old_keys:
if path not in new_keys: if path not in self._objects:
modified_object_list.update({path : ['Removed', self.__class__.__name__[:-12]]}) modified_object_list.update({path : ['Removed', self.__class__.__name__[:-12]]})
return modified_object_list return modified_object_list
...@@ -818,7 +817,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -818,7 +817,7 @@ class ObjectTemplateItem(BaseTemplateItem):
def preinstall(self, context, installed_item, **kw): def preinstall(self, context, installed_item, **kw):
modified_object_list = {} modified_object_list = {}
if context.getTemplateFormatVersion() == 1: if 1:
upgrade_list = [] upgrade_list = []
type_name = self.__class__.__name__.split('TemplateItem')[-2] type_name = self.__class__.__name__.split('TemplateItem')[-2]
for path, obj in self._objects.iteritems(): for path, obj in self._objects.iteritems():
...@@ -1000,7 +999,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -1000,7 +999,7 @@ class ObjectTemplateItem(BaseTemplateItem):
self.beforeInstall() self.beforeInstall()
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
force = kw.get('force') force = kw.get('force')
if context.getTemplateFormatVersion() == 1: if 1:
def recurse(hook, document, prefix=''): def recurse(hook, document, prefix=''):
my_prefix = '%s/%s' % (prefix, document.id) my_prefix = '%s/%s' % (prefix, document.id)
if (hook(document, my_prefix)): if (hook(document, my_prefix)):
...@@ -1326,27 +1325,7 @@ class ObjectTemplateItem(BaseTemplateItem): ...@@ -1326,27 +1325,7 @@ class ObjectTemplateItem(BaseTemplateItem):
self._backupObject(action, trashbin, container_path_list, self._backupObject(action, trashbin, container_path_list,
document_id) document_id)
parent.manage_delObjects([document_id]) parent.manage_delObjects([document_id])
else:
# for old business template format
BaseTemplateItem.install(self, context, trashbin, **kw)
portal = context.getPortalObject()
for relative_url in self._archive.keys():
obj = self._archive[relative_url]
container_path = relative_url.split('/')[0:-1]
object_id = relative_url.split('/')[-1]
container = portal.unrestrictedTraverse(container_path)
container_ids = container.objectIds()
if object_id in container_ids: # Object already exists
self._backupObject('backup', trashbin, container_path, object_id)
container.manage_delObjects([object_id])
# Set a hard link
obj = obj._getCopy(container)
container._setObject(object_id, obj)
obj = container._getOb(object_id)
obj.manage_afterClone(obj)
obj.wl_clearLocks()
if obj.meta_type in ('Z SQL Method',):
fixZSQLMethod(portal, obj)
self.afterInstall() self.afterInstall()
def uninstall(self, context, **kw): def uninstall(self, context, **kw):
...@@ -1721,11 +1700,8 @@ class SkinTemplateItem(ObjectTemplateItem): ...@@ -1721,11 +1700,8 @@ class SkinTemplateItem(ObjectTemplateItem):
skin_tool = p.portal_skins skin_tool = p.portal_skins
for relative_url in self._objects.keys(): for relative_url in self._objects.keys():
# Do not register skin which were explicitely ask not to be installed # Do not register skin which were explicitely ask not to be installed
if context.getTemplateFormatVersion() == 1: if not force and update_dict.get(relative_url) == 'nothing':
if update_dict.has_key(relative_url) or force: continue
if not force:
if update_dict[relative_url] == 'nothing':
continue
folder = self.unrestrictedResolveValue(p, relative_url) folder = self.unrestrictedResolveValue(p, relative_url)
for obj in folder.objectValues(spec=('Z SQL Method',)): for obj in folder.objectValues(spec=('Z SQL Method',)):
fixZSQLMethod(p, obj) fixZSQLMethod(p, obj)
...@@ -1859,9 +1835,8 @@ class RegisteredSkinSelectionTemplateItem(BaseTemplateItem): ...@@ -1859,9 +1835,8 @@ class RegisteredSkinSelectionTemplateItem(BaseTemplateItem):
def preinstall(self, context, installed_item, **kw): def preinstall(self, context, installed_item, **kw):
modified_object_list = {} modified_object_list = {}
if context.getTemplateFormatVersion() == 1: if 1:
new_keys = self._objects.keys() for path in self._objects:
for path in new_keys:
if installed_item._objects.has_key(path): if installed_item._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]
...@@ -1873,7 +1848,7 @@ class RegisteredSkinSelectionTemplateItem(BaseTemplateItem): ...@@ -1873,7 +1848,7 @@ class RegisteredSkinSelectionTemplateItem(BaseTemplateItem):
# get removed object # get removed object
old_keys = installed_item._objects.keys() old_keys = installed_item._objects.keys()
for path in old_keys: for path in old_keys:
if path not in new_keys: if path not in self._objects:
modified_object_list.update({path : ['Removed', self.__class__.__name__[:-12]]}) modified_object_list.update({path : ['Removed', self.__class__.__name__[:-12]]})
return modified_object_list return modified_object_list
...@@ -1962,9 +1937,6 @@ class RegisteredVersionPrioritySelectionTemplateItem(BaseTemplateItem): ...@@ -1962,9 +1937,6 @@ class RegisteredVersionPrioritySelectionTemplateItem(BaseTemplateItem):
for version, priority in registered_tuple_list)) for version, priority in registered_tuple_list))
def preinstall(self, context, installed_item, **kw): def preinstall(self, context, installed_item, **kw):
if context.getTemplateFormatVersion() != 1:
return {}
modified_object_list = {} modified_object_list = {}
class_name_prefix = self.__class__.__name__[:-12] class_name_prefix = self.__class__.__name__[:-12]
for path, new_object in self._objects.iteritems(): for path, new_object in self._objects.iteritems():
...@@ -2050,7 +2022,7 @@ class WorkflowTemplateItem(ObjectTemplateItem): ...@@ -2050,7 +2022,7 @@ class WorkflowTemplateItem(ObjectTemplateItem):
return modified_workflow_dict return modified_workflow_dict
def install(self, context, trashbin, **kw): def install(self, context, trashbin, **kw):
if context.getTemplateFormatVersion() == 1: if 1:
portal = context.getPortalObject() portal = context.getPortalObject()
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
force = kw.get('force') force = kw.get('force')
...@@ -2084,8 +2056,6 @@ class WorkflowTemplateItem(ObjectTemplateItem): ...@@ -2084,8 +2056,6 @@ class WorkflowTemplateItem(ObjectTemplateItem):
obj = container._getOb(object_id) obj = container._getOb(object_id)
obj.manage_afterClone(obj) obj.manage_afterClone(obj)
obj.wl_clearLocks() obj.wl_clearLocks()
else:
ObjectTemplateItem.install(self, context, trashbin, **kw)
def uninstall(self, context, **kw): def uninstall(self, context, **kw):
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
...@@ -2174,17 +2144,12 @@ class PortalTypeTemplateItem(ObjectTemplateItem): ...@@ -2174,17 +2144,12 @@ class PortalTypeTemplateItem(ObjectTemplateItem):
# best solution, by default it is 'default_workflow', which is # best solution, by default it is 'default_workflow', which is
# not very usefull # not very usefull
default_chain = '' default_chain = ''
if context.getTemplateFormatVersion() == 1: for path, obj in self._objects.iteritems():
object_list = self._objects
else:
object_list = self._archive
for path in object_list.keys():
if update_dict.has_key(path) or force: if update_dict.has_key(path) or force:
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]
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):
chain_dict['chain_%s' % portal_type] = \ chain_dict['chain_%s' % portal_type] = \
...@@ -2394,8 +2359,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem): ...@@ -2394,8 +2359,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem):
def preinstall(self, context, installed_item, **kw): def preinstall(self, context, installed_item, **kw):
modified_object_list = {} modified_object_list = {}
if context.getTemplateFormatVersion() == 1: if 1:
new_key_list = self._objects.keys()
new_dict = PersistentMapping() new_dict = PersistentMapping()
# Fix key from installed bt if necessary # Fix key from installed bt if necessary
for key, value in installed_item._objects.iteritems(): for key, value in installed_item._objects.iteritems():
...@@ -2404,7 +2368,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem): ...@@ -2404,7 +2368,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem):
new_dict[key] = value new_dict[key] = value
if new_dict: if new_dict:
installed_item._objects = new_dict installed_item._objects = new_dict
for path in new_key_list: for path in self._objects:
if path in installed_item._objects: if path in installed_item._objects:
# 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]
...@@ -2421,7 +2385,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem): ...@@ -2421,7 +2385,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem):
modified_object_list.update({path : ['New', self.getTemplateTypeName()]}) modified_object_list.update({path : ['New', self.getTemplateTypeName()]})
# get removed object # get removed object
for path in installed_item._objects: for path in installed_item._objects:
if path not in new_key_list: if path not in self._objects:
modified_object_list.update({path : ['Removed', self.getTemplateTypeName()]}) modified_object_list.update({path : ['Removed', self.getTemplateTypeName()]})
return modified_object_list return modified_object_list
...@@ -2501,8 +2465,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem): ...@@ -2501,8 +2465,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem):
def preinstall(self, context, installed_item, **kw): def preinstall(self, context, installed_item, **kw):
modified_object_list = {} modified_object_list = {}
if context.getTemplateFormatVersion() == 1: if 1:
new_key_list = self._objects.keys()
new_dict = PersistentMapping() new_dict = PersistentMapping()
# fix key if necessary in installed bt for diff # fix key if necessary in installed bt for diff
for key, value in installed_item._objects.iteritems(): for key, value in installed_item._objects.iteritems():
...@@ -2511,7 +2474,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem): ...@@ -2511,7 +2474,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem):
new_dict[key] = value new_dict[key] = value
if new_dict: if new_dict:
installed_item._objects = new_dict installed_item._objects = new_dict
for path in new_key_list: for path in self._objects:
if path in installed_item._objects: if path in installed_item._objects:
# 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]
...@@ -2524,7 +2487,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem): ...@@ -2524,7 +2487,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem):
modified_object_list.update({path : ['New', self.getTemplateTypeName()]}) modified_object_list.update({path : ['New', self.getTemplateTypeName()]})
# get removed object # get removed object
for path in installed_item._objects: for path in installed_item._objects:
if path not in new_key_list: if path not in self._objects:
modified_object_list.update({path : ['Removed', self.getTemplateTypeName()]}) modified_object_list.update({path : ['Removed', self.getTemplateTypeName()]})
return modified_object_list return modified_object_list
...@@ -2756,28 +2719,17 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): ...@@ -2756,28 +2719,17 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
force = kw.get('force') force = kw.get('force')
values = [] values = []
new_bt_format = context.getTemplateFormatVersion()
if force: # get all objects if force: # get all objects
if new_bt_format: values = self._objects.values()
values = self._objects.values()
else:
values = self._archive.values()
else: # get only selected object else: # get only selected object
if new_bt_format == 1: for key, value in self._objects.iteritems():
keys = self._objects.keys()
else:
keys = self._archive.keys()
for key in keys:
if update_dict.has_key(key) or force: if update_dict.has_key(key) or force:
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: values.append(value)
values.append(self._objects[key])
else:
values.append(self._archive[key])
for obj in values: for obj in values:
method_id = obj.id method_id = obj.id
...@@ -2797,14 +2749,12 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): ...@@ -2797,14 +2749,12 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
# Restore filter # Restore filter
if self._is_filtered_archive.get(method_id, 0): if self._is_filtered_archive.get(method_id, 0):
expression = self._filter_expression_archive[method_id] expression = self._filter_expression_archive[method_id]
if context.getTemplateFormatVersion() == 1: if 1:
if expression and expression.strip(): if expression and expression.strip():
# only compile non-empty expressions # only compile non-empty expressions
expr_instance = Expression(expression) expr_instance = Expression(expression)
else: else:
expr_instance = None expr_instance = None
else:
expr_instance = self._filter_expression_instance_archive[method_id]
catalog.filter_dict[method_id] = PersistentMapping() catalog.filter_dict[method_id] = PersistentMapping()
catalog.filter_dict[method_id]['filtered'] = 1 catalog.filter_dict[method_id]['filtered'] = 1
catalog.filter_dict[method_id]['expression'] = expression catalog.filter_dict[method_id]['expression'] = expression
...@@ -2860,16 +2810,10 @@ class CatalogMethodTemplateItem(ObjectTemplateItem): ...@@ -2860,16 +2810,10 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
object_path = kw.get('object_path', None) object_path = kw.get('object_path', None)
# get required values # get required values
if object_path is None: if object_path is None:
if context.getTemplateFormatVersion() == 1: values = self._objects.values()
values = self._objects.values()
else:
values = self._archive.values()
else: else:
try: try:
if context.getTemplateFormatVersion() == 1: value = self._objects[object_path]
value = self._objects[object_path]
else:
value = self._archive[object_path]
except KeyError: except KeyError:
value = None value = None
if value is not None: if value is not None:
...@@ -3017,7 +2961,7 @@ class ActionTemplateItem(ObjectTemplateItem): ...@@ -3017,7 +2961,7 @@ class ActionTemplateItem(ObjectTemplateItem):
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')
if context.getTemplateFormatVersion() == 1: if 1:
portal_type_dict = {} portal_type_dict = {}
p = context.getPortalObject() p = context.getPortalObject()
for id in self._objects.keys(): for id in self._objects.keys():
...@@ -3088,39 +3032,6 @@ class ActionTemplateItem(ObjectTemplateItem): ...@@ -3088,39 +3032,6 @@ class ActionTemplateItem(ObjectTemplateItem):
for name, obj in action_dict.iteritems(): for name, obj in action_dict.iteritems():
container._importOldAction(obj).aq_base container._importOldAction(obj).aq_base
else:
BaseTemplateItem.install(self, context, trashbin, **kw)
p = context.getPortalObject()
for id in self._archive.keys():
action = self._archive[id]
relative_url, key, value = self._splitPath(id)
obj = p.unrestrictedTraverse(relative_url)
for ai in obj.listActions():
if getattr(ai, key) == value:
raise TemplateConflictError, 'the portal type %s already has the action %s' % (obj.id, value)
action_text = action.action
if isinstance(action_text, Expression):
action_text = action_text.text
obj.addAction(
id = action.id
, name = action.title
, action = action_text
, condition = action.getCondition()
, permission = action.permissions
, category = action.category
, visible = action.visible
, icon = getattr(action, 'icon', None) \
and action.icon.text or ''
)
new_priority = action.priority
action_list = obj.listActions()
move_down_list = []
for index in range(len(action_list)):
action = action_list[index]
if action.priority > new_priority:
move_down_list.append(str(index))
obj.moveDownActions(selections=tuple(move_down_list))
def uninstall(self, context, **kw): def uninstall(self, context, **kw):
p = context.getPortalObject() p = context.getPortalObject()
object_path = kw.get("object_path", None) object_path = kw.get("object_path", None)
...@@ -3337,7 +3248,7 @@ class SitePropertyTemplateItem(BaseTemplateItem): ...@@ -3337,7 +3248,7 @@ class SitePropertyTemplateItem(BaseTemplateItem):
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')
if context.getTemplateFormatVersion() == 1: if 1:
p = context.getPortalObject() p = context.getPortalObject()
for path in self._objects.keys(): for path in self._objects.keys():
if update_dict.has_key(path) or force: if update_dict.has_key(path) or force:
...@@ -3355,19 +3266,6 @@ class SitePropertyTemplateItem(BaseTemplateItem): ...@@ -3355,19 +3266,6 @@ class SitePropertyTemplateItem(BaseTemplateItem):
p._updateProperty(id, property) p._updateProperty(id, property)
else: else:
p._setProperty(id, property, type=prop_type) p._setProperty(id, property, type=prop_type)
else:
BaseTemplateItem.install(self, context, trashbin, **kw)
p = context.getPortalObject()
for id, property in self._archive.keys():
property = self._archive[id]
if p.hasProperty(id):
if p.getPropertyType(id) != property['type']:
p._delProperty(id)
p._setProperty(id, property['value'], type=property['type'])
else:
p._updateProperty(id, property['value'])
else:
p._setProperty(id, property['value'], type=property['type'])
def uninstall(self, context, **kw): def uninstall(self, context, **kw):
p = context.getPortalObject() p = context.getPortalObject()
...@@ -3483,14 +3381,9 @@ class ModuleTemplateItem(BaseTemplateItem): ...@@ -3483,14 +3381,9 @@ class ModuleTemplateItem(BaseTemplateItem):
portal = context.getPortalObject() portal = context.getPortalObject()
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
force = kw.get('force') force = kw.get('force')
if context.getTemplateFormatVersion() == 1:
items = self._objects
else:
items = self._archive
valid_permissions = dict.fromkeys([x[0] for x in valid_permissions = dict.fromkeys([x[0] for x in
context.ac_inherited_permissions(all=1)]) context.ac_inherited_permissions(all=1)])
for path, mapping in items.iteritems(): for path, mapping in self._objects.iteritems():
if update_dict.has_key(path) or force: if update_dict.has_key(path) or force:
if not force: if not force:
action = update_dict[path] action = update_dict[path]
...@@ -3598,8 +3491,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem): ...@@ -3598,8 +3491,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
def preinstall(self, context, installed_item, **kw): def preinstall(self, context, installed_item, **kw):
modified_object_list = {} modified_object_list = {}
if context.getTemplateFormatVersion() == 1: if 1:
new_keys = self._objects.keys()
# fix key if necessary in installed bt for diff # fix key if necessary in installed bt for diff
extra_prefix = self.__class__.__name__ + '/' extra_prefix = self.__class__.__name__ + '/'
for key in installed_item._objects.keys(): for key in installed_item._objects.keys():
...@@ -3607,7 +3499,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem): ...@@ -3607,7 +3499,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
new_key = key[len(extra_prefix):] new_key = key[len(extra_prefix):]
installed_item._objects[new_key] = installed_item._objects[key] installed_item._objects[new_key] = installed_item._objects[key]
del installed_item._objects[key] del installed_item._objects[key]
for path in new_keys: for path in self._objects:
if installed_item._objects.has_key(path): if installed_item._objects.has_key(path):
# compare object to see if there is changes # compare object to see if there is changes
new_obj_code = self._objects[path] new_obj_code = self._objects[path]
...@@ -3623,7 +3515,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem): ...@@ -3623,7 +3515,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
# get removed object # get removed object
old_keys = installed_item._objects.keys() old_keys = installed_item._objects.keys()
for path in old_keys: for path in old_keys:
if path not in new_keys: if path not in self._objects:
# Note: Magical way to have unique paths # Note: Magical way to have unique paths
modified_object_list.update( modified_object_list.update(
{self._getKey(path) : ['Removed', self.__class__.__name__[:-12]]}) {self._getKey(path) : ['Removed', self.__class__.__name__[:-12]]})
...@@ -3647,7 +3539,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem): ...@@ -3647,7 +3539,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
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')
if context.getTemplateFormatVersion() == 1: if 1:
need_reset = isinstance(self, FilesystemDocumentTemplateItem) need_reset = isinstance(self, FilesystemDocumentTemplateItem)
for key in self._objects.keys(): for key in self._objects.keys():
# to achieve non data migration fresh installation parameters # to achieve non data migration fresh installation parameters
...@@ -3676,14 +3568,6 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem): ...@@ -3676,14 +3568,6 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
self._resetDynamicModules() self._resetDynamicModules()
need_reset = False need_reset = False
self.local_file_importer_name(name) self.local_file_importer_name(name)
else:
BaseTemplateItem.install(self, context, trashbin, **kw)
for key in self._archive.keys():
text = self._archive[key]
# This raises an exception if the file exists.
self.local_file_writer_name(key, text, create=1)
if self.local_file_importer_name is not None:
self.local_file_importer_name(key)
def remove(self, context, **kw): def remove(self, context, **kw):
"""Conversion of magically uniqued paths to real ones""" """Conversion of magically uniqued paths to real ones"""
...@@ -3939,19 +3823,7 @@ class FilesystemToZodbTemplateItem(FilesystemDocumentTemplateItem, ...@@ -3939,19 +3823,7 @@ class FilesystemToZodbTemplateItem(FilesystemDocumentTemplateItem,
getattr(context.getPortalObject(), self._tool_id, None) is None): getattr(context.getPortalObject(), self._tool_id, None) is None):
return FilesystemDocumentTemplateItem.install(self, context, **kw) return FilesystemDocumentTemplateItem.install(self, context, **kw)
# With format 0 of Business Template, the objects are stored in if not self._is_already_migrated(self._objects.keys()):
# '_archive' whereas they are stored in '_objects' with format
# version 1
bt_format_version = context.getTemplateFormatVersion()
if bt_format_version == 0 and \
not self._is_already_migrated(self._archive.keys()):
self._migrateAllFromFilesystem(context,
self._archive,
self._objects,
kw.get('object_to_update'))
elif bt_format_version == 1 and \
not self._is_already_migrated(self._objects.keys()):
self._migrateAllFromFilesystem(context, self._migrateAllFromFilesystem(context,
self._objects, self._objects,
self._archive, self._archive,
...@@ -4173,10 +4045,7 @@ class DocumentTemplateItem(FilesystemToZodbTemplateItem): ...@@ -4173,10 +4045,7 @@ class DocumentTemplateItem(FilesystemToZodbTemplateItem):
automatically as the version must be set manually. This should not be an automatically as the version must be set manually. This should not be an
issue as there are not so many Documents in bt5... issue as there are not so many Documents in bt5...
""" """
object_list = list(self._objects if context.getTemplateFormatVersion() == 1 if self._is_already_migrated(self._objects.keys()):
else self._archive)
if self._is_already_migrated(object_list):
ObjectTemplateItem.install(self, context, **kw) ObjectTemplateItem.install(self, context, **kw)
self.portal_components.reset(force=True, self.portal_components.reset(force=True,
reset_portal_type_at_transaction_boundary=True) reset_portal_type_at_transaction_boundary=True)
...@@ -4243,15 +4112,14 @@ class RoleTemplateItem(BaseTemplateItem): ...@@ -4243,15 +4112,14 @@ class RoleTemplateItem(BaseTemplateItem):
def preinstall(self, context, installed_item, **kw): def preinstall(self, context, installed_item, **kw):
modified_object_list = {} modified_object_list = {}
if context.getTemplateFormatVersion() == 1: if 1:
new_roles = self._objects.keys()
# BBB it might be necessary to change the data structure. # BBB it might be necessary to change the data structure.
obsolete_key = self.__class__.__name__ + '/role_list' obsolete_key = self.__class__.__name__ + '/role_list'
if obsolete_key in installed_item._objects: if obsolete_key in installed_item._objects:
for role in installed_item._objects[obsolete_key]: for role in installed_item._objects[obsolete_key]:
installed_item._objects[role] = 1 installed_item._objects[role] = 1
del installed_item._objects[obsolete_key] del installed_item._objects[obsolete_key]
for role in new_roles: for role in self._objects:
if installed_item._objects.has_key(role): if installed_item._objects.has_key(role):
continue continue
else: # only show new roles else: # only show new roles
...@@ -4259,17 +4127,14 @@ class RoleTemplateItem(BaseTemplateItem): ...@@ -4259,17 +4127,14 @@ class RoleTemplateItem(BaseTemplateItem):
# get removed roles # get removed roles
old_roles = installed_item._objects.keys() old_roles = installed_item._objects.keys()
for role in old_roles: for role in old_roles:
if role not in new_roles: if role not in self._objects:
modified_object_list.update({role : ['Removed', self.__class__.__name__[:-12]]}) modified_object_list.update({role : ['Removed', self.__class__.__name__[:-12]]})
return modified_object_list return modified_object_list
def install(self, context, trashbin, **kw): def install(self, context, trashbin, **kw):
p = context.getPortalObject() p = context.getPortalObject()
# get roles # get roles
if context.getTemplateFormatVersion() == 1: role_set = set(self._objects)
role_set = set(self._objects)
else:
role_set = set(self._archive)
# set roles in PAS # set roles in PAS
if p.acl_users.meta_type == 'Pluggable Auth Service': if p.acl_users.meta_type == 'Pluggable Auth Service':
role_manager_list = p.acl_users.objectValues('ZODB Role Manager') role_manager_list = p.acl_users.objectValues('ZODB Role Manager')
...@@ -4370,14 +4235,12 @@ class CatalogKeyTemplateItemBase(BaseTemplateItem): ...@@ -4370,14 +4235,12 @@ class CatalogKeyTemplateItemBase(BaseTemplateItem):
return return
catalog_key_list = list(getattr(catalog, self.key_list_attr, [])) catalog_key_list = list(getattr(catalog, self.key_list_attr, []))
if context.getTemplateFormatVersion() == 1: if 1:
if len(self._objects.keys()) == 0: # needed because of pop() if len(self._objects.keys()) == 0: # needed because of pop()
return return
keys = [] keys = []
for k in self._objects.values().pop(): # because of list of list for k in self._objects.values().pop(): # because of list of list
keys.append(k) keys.append(k)
else:
keys = self._archive.keys()
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
force = kw.get('force') force = kw.get('force')
if force or self._getUpdateDictAction(update_dict) != 'nothing': if force or self._getUpdateDictAction(update_dict) != 'nothing':
...@@ -4545,9 +4408,8 @@ class MessageTranslationTemplateItem(BaseTemplateItem): ...@@ -4545,9 +4408,8 @@ class MessageTranslationTemplateItem(BaseTemplateItem):
def preinstall(self, context, installed_item, **kw): def preinstall(self, context, installed_item, **kw):
modified_object_list = {} modified_object_list = {}
if context.getTemplateFormatVersion() == 1: if 1:
new_keys = self._objects.keys() for path in self._objects:
for path in new_keys:
if installed_item._objects.has_key(path): if installed_item._objects.has_key(path):
# compare object to see if there is changes # compare object to see if there is changes
new_obj_code = self._objects[path] new_obj_code = self._objects[path]
...@@ -4559,7 +4421,7 @@ class MessageTranslationTemplateItem(BaseTemplateItem): ...@@ -4559,7 +4421,7 @@ class MessageTranslationTemplateItem(BaseTemplateItem):
# get removed object # get removed object
old_keys = installed_item._objects.keys() old_keys = installed_item._objects.keys()
for path in old_keys: for path in old_keys:
if path not in new_keys: if path not in self._objects:
modified_object_list.update({path : ['Removed', self.__class__.__name__[:-12]]}) modified_object_list.update({path : ['Removed', self.__class__.__name__[:-12]]})
return modified_object_list return modified_object_list
...@@ -4592,7 +4454,7 @@ class MessageTranslationTemplateItem(BaseTemplateItem): ...@@ -4592,7 +4454,7 @@ class MessageTranslationTemplateItem(BaseTemplateItem):
localizer = context.getPortalObject().Localizer localizer = context.getPortalObject().Localizer
update_dict = kw.get('object_to_update', {}) update_dict = kw.get('object_to_update', {})
force = kw.get('force') force = kw.get('force')
if context.getTemplateFormatVersion() == 1: if 1:
for key in sorted(self._objects.keys()): for key in sorted(self._objects.keys()):
if update_dict.has_key(key) or force: if update_dict.has_key(key) or force:
if not force: if not force:
...@@ -4623,13 +4485,6 @@ class MessageTranslationTemplateItem(BaseTemplateItem): ...@@ -4623,13 +4485,6 @@ class MessageTranslationTemplateItem(BaseTemplateItem):
if lang not in localizer.get_languages(): if lang not in localizer.get_languages():
localizer.manage_addLanguage(lang) localizer.manage_addLanguage(lang)
self._importCatalogLanguage(localizer, catalog, lang, po) self._importCatalogLanguage(localizer, catalog, lang, po)
else:
BaseTemplateItem.install(self, context, trashbin, **kw)
for lang, catalogs in self._archive.iteritems():
if lang not in localizer.get_languages():
localizer.manage_addLanguage(lang)
for catalog, po in catalogs.items():
self._importCatalogLanguage(catalog, lang, po)
def uninstall(self, context, remove_translations=False, **kw): def uninstall(self, context, remove_translations=False, **kw):
if not remove_translations: if not remove_translations:
...@@ -4976,18 +4831,6 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -4976,18 +4831,6 @@ Business Template is a set of definitions, such as skins, portal types and categ
XMLObject.__init__(self, *args, **kw) XMLObject.__init__(self, *args, **kw)
self._clean() self._clean()
def getTemplateFormatVersion(self, **kw):
"""This is a workaround, because template_format_version was not set even for the new format.
"""
if self.hasProperty('template_format_version'):
self._baseGetTemplateFormatVersion()
# the attribute _objects in BaseTemplateItem was added in the new format.
if hasattr(self._path_item, '_objects'):
return 1
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):
""" """
...@@ -5194,7 +5037,7 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -5194,7 +5037,7 @@ Business Template is a set of definitions, such as skins, portal types and categ
default_catalog = self.getPortalObject().portal_catalog.getSQLCatalog() default_catalog = self.getPortalObject().portal_catalog.getSQLCatalog()
my_catalog = _getCatalogValue(self) my_catalog = _getCatalogValue(self)
if default_catalog is not None and my_catalog is not None \ if default_catalog is not None and my_catalog is not None \
and catalog_method is not None and self.getTemplateFormatVersion() == 1: and catalog_method is not None:
if default_catalog.getId() == my_catalog.getId(): if default_catalog.getId() == my_catalog.getId():
# It is needed to update the catalog only if the default SQLCatalog is modified. # It is needed to update the catalog only if the default SQLCatalog is modified.
for method_id in catalog_method._objects.keys(): for method_id in catalog_method._objects.keys():
...@@ -5223,10 +5066,6 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -5223,10 +5066,6 @@ Business Template is a set of definitions, such as skins, portal types and categ
installed_bt = bt2 installed_bt = bt2
else: else:
installed_bt = self.portal_templates.getInstalledBusinessTemplate(title=bt_title) installed_bt = self.portal_templates.getInstalledBusinessTemplate(title=bt_title)
if installed_bt is None:
installed_bt_format = 0 # that will not check for modification
else:
installed_bt_format = installed_bt.getTemplateFormatVersion()
# 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.
...@@ -5245,19 +5084,6 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -5245,19 +5084,6 @@ Business Template is a set of definitions, such as skins, portal types and categ
else: else:
installed_bt = self.portal_templates._getOb(INSTALLED_BT_FOR_DIFF) installed_bt = self.portal_templates._getOb(INSTALLED_BT_FOR_DIFF)
new_bt_format = self.getTemplateFormatVersion()
if installed_bt_format == 0 and new_bt_format == 0:
# still use old format, so install everything, no choice
return modified_object_list
elif installed_bt_format == 0 and new_bt_format == 1:
# return list of all object in bt
for item_name in self._item_name_list:
item = getattr(self, item_name, None)
if item is not None:
for path in item._objects.keys():
modified_object_list.update({path : ['New', item.__class__.__name__[:-12]]})
return modified_object_list
for item_name in self._item_name_list: for item_name in self._item_name_list:
new_item = getattr(self, item_name, None) new_item = getattr(self, item_name, None)
installed_item = getattr(installed_bt, item_name, None) installed_item = getattr(installed_bt, item_name, None)
...@@ -5293,20 +5119,14 @@ Business Template is a set of definitions, such as skins, portal types and categ ...@@ -5293,20 +5119,14 @@ Business Template is a set of definitions, such as skins, portal types and categ
self.getTitle()) self.getTitle())
# When reinstalling, installation state should not change to replaced # When reinstalling, installation state should not change to replaced
if installed_bt not in [None, self]: if installed_bt not in [None, self]:
if installed_bt.getTemplateFormatVersion() == 0:
force = 1
if site.portal_workflow.isTransitionPossible( if site.portal_workflow.isTransitionPossible(
installed_bt, 'replace'): installed_bt, 'replace'):
installed_bt.replace(self) installed_bt.replace(self)
trash_tool = getToolByName(site, 'portal_trash', None) trash_tool = getToolByName(site, 'portal_trash', None)
if trash_tool is None and self.getTemplateFormatVersion() == 1: if trash_tool is None:
raise AttributeError, 'Trash Tool is not installed' raise AttributeError, 'Trash Tool is not installed'
# Check the format of business template, if old, force install
if self.getTemplateFormatVersion() == 0:
force = 1
if not force: if not force:
self.checkDependencies() self.checkDependencies()
......
...@@ -307,12 +307,7 @@ class TemplateTool (BaseTool): ...@@ -307,12 +307,7 @@ class TemplateTool (BaseTool):
file.seek(0) file.seek(0)
magic = file.read(5) magic = file.read(5)
if magic == '<?xml': # old version if 1:
self._importObjectFromFile(path, id=id)
bt = self[id]
bt.id = id # Make sure id is consistent
bt.setProperty('template_format_version', 0, type='int')
else: # new version
# XXX: should really check for a magic and offer a falback if it # XXX: should really check for a magic and offer a falback if it
# doens't correspond to anything handled. # doens't correspond to anything handled.
tar = tarfile.open(path, 'r:gz') tar = tarfile.open(path, 'r:gz')
......
...@@ -68,16 +68,12 @@ if len(uids) > 2:\n ...@@ -68,16 +68,12 @@ if len(uids) > 2:\n
bt1 = context.portal_catalog.getObject(uids[0])\n bt1 = context.portal_catalog.getObject(uids[0])\n
if bt1.getBuildingState() != \'built\':\n if bt1.getBuildingState() != \'built\':\n
raise TemplateConditionError(\'Business Template must be built to make diff\')\n raise TemplateConditionError(\'Business Template must be built to make diff\')\n
if (getattr(bt1, \'template_format_version\', 0)) != 1:\n
raise TemplateConditionError(\'Business Template must be in new format\')\n
\n \n
# check if there is a second bt or if we compare to installed one\n # check if there is a second bt or if we compare to installed one\n
if len(uids) == 2:\n if len(uids) == 2:\n
bt2 = context.portal_catalog.getObject(uids[1])\n bt2 = context.portal_catalog.getObject(uids[1])\n
if bt2.getBuildingState() != \'built\':\n if bt2.getBuildingState() != \'built\':\n
raise TemplateConditionError(\'Business Template must be built to make diff\')\n raise TemplateConditionError(\'Business Template must be built to make diff\')\n
if (getattr(bt2, \'template_format_version\', 0)) != 1:\n
raise TemplateConditionError(\'Business Template must be in new format\')\n
else:\n else:\n
# compare to objects in ZODB\n # compare to objects in ZODB\n
bt2 = bt1\n bt2 = bt1\n
......
2013-12-12 arnaud.fontaine
* Get rid of Business Template format version 0 as it's been deprecated for a while.
2013-11-07 arnaud.fontaine 2013-11-07 arnaud.fontaine
* SelectionTool: Changing storage or memcached settings were not taken into effect until restart. * SelectionTool: Changing storage or memcached settings were not taken into effect until restart.
......
41144 41145
\ No newline at end of file \ No newline at end of file
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
</item> </item>
<item> <item>
<key> <string>property_default</string> </key> <key> <string>property_default</string> </key>
<value> <string>python: 0</string> </value> <value> <string>python: 1</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
2013-12-12 arnaud.fontaine
* Get rid of Business Template format version 0 as it's been deprecated for a while.
2013-10-17 tatuya 2013-10-17 tatuya
* Arrow: Add {source,destination}_{decision,carrier,section}_administration categories * Arrow: Add {source,destination}_{decision,carrier,section}_administration categories
......
69 70
\ No newline at end of file \ No newline at end of file
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