From c17462285b5531174952e718ad641c133b6c75bf Mon Sep 17 00:00:00 2001
From: Arnaud Fontaine <arnaud.fontaine@nexedi.com>
Date: Thu, 12 Dec 2013 11:25:50 +0100
Subject: [PATCH] Get rid of Business Template format version 0 as it's been
 deprecated for a while.

---
 product/ERP5/Document/BusinessTemplate.py     | 270 +++---------------
 product/ERP5/Tool/TemplateTool.py             |   7 +-
 .../BusinessTemplate_getDiffObjectList.xml    |   4 -
 .../ERP5/bootstrap/erp5_core/bt/change_log    |   3 +
 product/ERP5/bootstrap/erp5_core/bt/revision  |   2 +-
 .../template_format_version_property.xml      |   2 +-
 .../erp5_property_sheets/bt/change_log        |   3 +
 .../erp5_property_sheets/bt/revision          |   2 +-
 8 files changed, 55 insertions(+), 238 deletions(-)

diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py
index 205aa6e229..38073ba956 100644
--- a/product/ERP5/Document/BusinessTemplate.py
+++ b/product/ERP5/Document/BusinessTemplate.py
@@ -472,9 +472,8 @@ class BaseTemplateItem(Implicit, Persistent):
       XXX: -12 used here is -len('TemplateItem')
     """
     modified_object_list = {}
-    if context.getTemplateFormatVersion() == 1:
-      new_keys = self._objects.keys()
-      for path in new_keys:
+    if 1:
+      for path in self._objects:
         if installed_item._objects.has_key(path):
           # compare objects to see it there are changes
           new_obj_xml = self.generateXml(path=path)
@@ -487,7 +486,7 @@ class BaseTemplateItem(Implicit, Persistent):
       # list removed objects
       old_keys = installed_item._objects.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]]})
     return modified_object_list
 
@@ -818,7 +817,7 @@ class ObjectTemplateItem(BaseTemplateItem):
 
   def preinstall(self, context, installed_item, **kw):
     modified_object_list = {}
-    if context.getTemplateFormatVersion() == 1:
+    if 1:
       upgrade_list = []
       type_name = self.__class__.__name__.split('TemplateItem')[-2]
       for path, obj in self._objects.iteritems():
@@ -1000,7 +999,7 @@ class ObjectTemplateItem(BaseTemplateItem):
     self.beforeInstall()
     update_dict = kw.get('object_to_update')
     force = kw.get('force')
-    if context.getTemplateFormatVersion() == 1:
+    if 1:
       def recurse(hook, document, prefix=''):
         my_prefix = '%s/%s' % (prefix, document.id)
         if (hook(document, my_prefix)):
@@ -1326,27 +1325,7 @@ class ObjectTemplateItem(BaseTemplateItem):
             self._backupObject(action, trashbin, container_path_list,
                                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()
 
   def uninstall(self, context, **kw):
@@ -1721,11 +1700,8 @@ class SkinTemplateItem(ObjectTemplateItem):
     skin_tool = p.portal_skins
     for relative_url in self._objects.keys():
       # Do not register skin which were explicitely ask not to be installed
-      if context.getTemplateFormatVersion() == 1:
-        if update_dict.has_key(relative_url) or force:
-          if not force:
-            if update_dict[relative_url] == 'nothing':
-              continue
+      if not force and update_dict.get(relative_url)  == 'nothing':
+        continue
       folder = self.unrestrictedResolveValue(p, relative_url)
       for obj in folder.objectValues(spec=('Z SQL Method',)):
         fixZSQLMethod(p, obj)
@@ -1859,9 +1835,8 @@ class RegisteredSkinSelectionTemplateItem(BaseTemplateItem):
 
   def preinstall(self, context, installed_item, **kw):
     modified_object_list = {}
-    if context.getTemplateFormatVersion() == 1:
-      new_keys = self._objects.keys()
-      for path in new_keys:
+    if 1:
+      for path in self._objects:
         if installed_item._objects.has_key(path):
           # compare object to see it there is changes
           new_object = self._objects[path]
@@ -1873,7 +1848,7 @@ class RegisteredSkinSelectionTemplateItem(BaseTemplateItem):
       # get removed object
       old_keys = installed_item._objects.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]]})
     return modified_object_list
 
@@ -1962,9 +1937,6 @@ class RegisteredVersionPrioritySelectionTemplateItem(BaseTemplateItem):
                                    for version, priority in registered_tuple_list))
 
   def preinstall(self, context, installed_item, **kw):
-    if context.getTemplateFormatVersion() != 1:
-      return {}
-
     modified_object_list = {}
     class_name_prefix = self.__class__.__name__[:-12]
     for path, new_object in self._objects.iteritems():
@@ -2050,7 +2022,7 @@ class WorkflowTemplateItem(ObjectTemplateItem):
     return modified_workflow_dict
 
   def install(self, context, trashbin, **kw):
-    if context.getTemplateFormatVersion() == 1:
+    if 1:
       portal = context.getPortalObject()
       update_dict = kw.get('object_to_update')
       force = kw.get('force')
@@ -2084,8 +2056,6 @@ class WorkflowTemplateItem(ObjectTemplateItem):
           obj = container._getOb(object_id)
           obj.manage_afterClone(obj)
           obj.wl_clearLocks()
-    else:
-      ObjectTemplateItem.install(self, context, trashbin, **kw)
 
   def uninstall(self, context, **kw):
     object_path = kw.get('object_path', None)
@@ -2174,17 +2144,12 @@ class PortalTypeTemplateItem(ObjectTemplateItem):
     # best solution, by default it is 'default_workflow', which is
     # not very usefull
     default_chain = ''
-    if context.getTemplateFormatVersion() == 1:
-      object_list = self._objects
-    else:
-      object_list = self._archive
-    for path in object_list.keys():
+    for path, obj in self._objects.iteritems():
       if update_dict.has_key(path) or force:
         if not force:
           action = update_dict[path]
           if action == 'nothing':
             continue
-        obj = object_list[path]
         portal_type = obj.id
         if self._workflow_chain_archive.has_key(portal_type):
           chain_dict['chain_%s' % portal_type] = \
@@ -2394,8 +2359,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem):
 
   def preinstall(self, context, installed_item, **kw):
     modified_object_list = {}
-    if context.getTemplateFormatVersion() == 1:
-      new_key_list = self._objects.keys()
+    if 1:
       new_dict = PersistentMapping()
       # Fix key from installed bt if necessary
       for key, value in installed_item._objects.iteritems():
@@ -2404,7 +2368,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem):
         new_dict[key] = value
       if new_dict:
         installed_item._objects = new_dict
-      for path in new_key_list:
+      for path in self._objects:
         if path in installed_item._objects:
           # compare object to see it there is changes
           new_object = self._objects[path]
@@ -2421,7 +2385,7 @@ class PortalTypeWorkflowChainTemplateItem(BaseTemplateItem):
           modified_object_list.update({path : ['New', self.getTemplateTypeName()]})
       # get removed object
       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()]})
     return modified_object_list
 
@@ -2501,8 +2465,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem):
 
   def preinstall(self, context, installed_item, **kw):
     modified_object_list = {}
-    if context.getTemplateFormatVersion() == 1:
-      new_key_list = self._objects.keys()
+    if 1:
       new_dict = PersistentMapping()
       # fix key if necessary in installed bt for diff
       for key, value in installed_item._objects.iteritems():
@@ -2511,7 +2474,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem):
         new_dict[key] = value
       if new_dict:
         installed_item._objects = new_dict
-      for path in new_key_list:
+      for path in self._objects:
         if path in installed_item._objects:
           # compare object to see it there is changes
           new_object = self._objects[path]
@@ -2524,7 +2487,7 @@ class PortalTypeAllowedContentTypeTemplateItem(BaseTemplateItem):
           modified_object_list.update({path : ['New', self.getTemplateTypeName()]})
       # get removed object
       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()]})
     return modified_object_list
 
@@ -2756,28 +2719,17 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
     update_dict = kw.get('object_to_update')
     force = kw.get('force')
     values = []
-    new_bt_format = context.getTemplateFormatVersion()
 
     if force: # get all objects
-      if new_bt_format:
-        values = self._objects.values()
-      else:
-        values = self._archive.values()
+      values = self._objects.values()
     else: # get only selected object
-      if new_bt_format == 1:
-        keys = self._objects.keys()
-      else:
-        keys = self._archive.keys()
-      for key in keys:
+      for key, value in self._objects.iteritems():
         if update_dict.has_key(key) or force:
           if not force:
             action = update_dict[key]
             if action == 'nothing':
               continue
-          if new_bt_format:
-            values.append(self._objects[key])
-          else:
-            values.append(self._archive[key])
+          values.append(value)
 
     for obj in values:
       method_id = obj.id
@@ -2797,14 +2749,12 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
       # Restore filter
       if self._is_filtered_archive.get(method_id, 0):
         expression = self._filter_expression_archive[method_id]
-        if context.getTemplateFormatVersion() == 1:
+        if 1:
           if expression and expression.strip():
             # only compile non-empty expressions
             expr_instance = Expression(expression)
           else:
             expr_instance = None
-        else:
-          expr_instance = self._filter_expression_instance_archive[method_id]
         catalog.filter_dict[method_id] = PersistentMapping()
         catalog.filter_dict[method_id]['filtered'] = 1
         catalog.filter_dict[method_id]['expression'] = expression
@@ -2860,16 +2810,10 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
     object_path = kw.get('object_path', None)
     # get required values
     if object_path is None:
-      if context.getTemplateFormatVersion() == 1:
-        values = self._objects.values()
-      else:
-        values = self._archive.values()
+      values = self._objects.values()
     else:
       try:
-        if context.getTemplateFormatVersion() == 1:
-          value = self._objects[object_path]
-        else:
-          value = self._archive[object_path]
+        value = self._objects[object_path]
       except KeyError:
         value = None
       if value is not None:
@@ -3017,7 +2961,7 @@ class ActionTemplateItem(ObjectTemplateItem):
   def install(self, context, trashbin, **kw):
     update_dict = kw.get('object_to_update')
     force = kw.get('force')
-    if context.getTemplateFormatVersion() == 1:
+    if 1:
       portal_type_dict = {}
       p = context.getPortalObject()
       for id in self._objects.keys():
@@ -3088,39 +3032,6 @@ class ActionTemplateItem(ObjectTemplateItem):
         for name, obj in action_dict.iteritems():
           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):
     p = context.getPortalObject()
     object_path = kw.get("object_path", None)
@@ -3337,7 +3248,7 @@ class SitePropertyTemplateItem(BaseTemplateItem):
   def install(self, context, trashbin, **kw):
     update_dict = kw.get('object_to_update')
     force = kw.get('force')
-    if context.getTemplateFormatVersion() == 1:
+    if 1:
       p = context.getPortalObject()
       for path in self._objects.keys():
         if update_dict.has_key(path) or force:
@@ -3355,19 +3266,6 @@ class SitePropertyTemplateItem(BaseTemplateItem):
               p._updateProperty(id, property)
           else:
             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):
     p = context.getPortalObject()
@@ -3483,14 +3381,9 @@ class ModuleTemplateItem(BaseTemplateItem):
     portal = context.getPortalObject()
     update_dict = kw.get('object_to_update')
     force = kw.get('force')
-    if context.getTemplateFormatVersion() == 1:
-      items = self._objects
-    else:
-      items = self._archive
-
     valid_permissions = dict.fromkeys([x[0] for x in
                                        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 not force:
           action = update_dict[path]
@@ -3598,8 +3491,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
 
   def preinstall(self, context, installed_item, **kw):
     modified_object_list = {}
-    if context.getTemplateFormatVersion() == 1:
-      new_keys = self._objects.keys()
+    if 1:
       # fix key if necessary in installed bt for diff
       extra_prefix = self.__class__.__name__ + '/'
       for key in installed_item._objects.keys():
@@ -3607,7 +3499,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
           new_key = key[len(extra_prefix):]
           installed_item._objects[new_key] = 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):
           # compare object to see if there is changes
           new_obj_code = self._objects[path]
@@ -3623,7 +3515,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
           # get removed object
       old_keys = installed_item._objects.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
           modified_object_list.update(
                 {self._getKey(path) : ['Removed', self.__class__.__name__[:-12]]})
@@ -3647,7 +3539,7 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
   def install(self, context, trashbin, **kw):
     update_dict = kw.get('object_to_update')
     force = kw.get('force')
-    if context.getTemplateFormatVersion() == 1:
+    if 1:
       need_reset = isinstance(self, FilesystemDocumentTemplateItem)
       for key in self._objects.keys():
         # to achieve non data migration fresh installation parameters
@@ -3676,14 +3568,6 @@ class FilesystemDocumentTemplateItem(BaseTemplateItem):
             self._resetDynamicModules()
             need_reset = False
           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):
     """Conversion of magically uniqued paths to real ones"""
@@ -3939,19 +3823,7 @@ class FilesystemToZodbTemplateItem(FilesystemDocumentTemplateItem,
         getattr(context.getPortalObject(), self._tool_id, None) is None):
       return FilesystemDocumentTemplateItem.install(self, context, **kw)
 
-    # With format 0 of Business Template, the objects are stored in
-    # '_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()):
+    if not self._is_already_migrated(self._objects.keys()):
       self._migrateAllFromFilesystem(context,
                                      self._objects,
                                      self._archive,
@@ -4173,10 +4045,7 @@ class DocumentTemplateItem(FilesystemToZodbTemplateItem):
     automatically as the version must be set manually. This should not be an
     issue as there are not so many Documents in bt5...
     """
-    object_list = list(self._objects if context.getTemplateFormatVersion() == 1
-                                     else self._archive)
-
-    if self._is_already_migrated(object_list):
+    if self._is_already_migrated(self._objects.keys()):
       ObjectTemplateItem.install(self, context, **kw)
       self.portal_components.reset(force=True,
                                    reset_portal_type_at_transaction_boundary=True)
@@ -4243,15 +4112,14 @@ class RoleTemplateItem(BaseTemplateItem):
 
   def preinstall(self, context, installed_item, **kw):
     modified_object_list = {}
-    if context.getTemplateFormatVersion() == 1:
-      new_roles = self._objects.keys()
+    if 1:
       # BBB it might be necessary to change the data structure.
       obsolete_key = self.__class__.__name__ + '/role_list'
       if obsolete_key in installed_item._objects:
         for role in installed_item._objects[obsolete_key]:
           installed_item._objects[role] = 1
         del installed_item._objects[obsolete_key]
-      for role in new_roles:
+      for role in self._objects:
         if installed_item._objects.has_key(role):
           continue
         else: # only show new roles
@@ -4259,17 +4127,14 @@ class RoleTemplateItem(BaseTemplateItem):
       # get removed roles
       old_roles = installed_item._objects.keys()
       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]]})
     return modified_object_list
 
   def install(self, context, trashbin, **kw):
     p = context.getPortalObject()
     # get roles
-    if context.getTemplateFormatVersion() == 1:
-      role_set = set(self._objects)
-    else:
-      role_set = set(self._archive)
+    role_set = set(self._objects)
     # set roles in PAS
     if p.acl_users.meta_type == 'Pluggable Auth Service':
       role_manager_list = p.acl_users.objectValues('ZODB Role Manager')
@@ -4370,14 +4235,12 @@ class CatalogKeyTemplateItemBase(BaseTemplateItem):
       return
 
     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()
         return
       keys = []
       for k in self._objects.values().pop(): # because of list of list
         keys.append(k)
-    else:
-      keys = self._archive.keys()
     update_dict = kw.get('object_to_update')
     force = kw.get('force')
     if force or self._getUpdateDictAction(update_dict) != 'nothing':
@@ -4545,9 +4408,8 @@ class MessageTranslationTemplateItem(BaseTemplateItem):
 
   def preinstall(self, context, installed_item, **kw):
     modified_object_list = {}
-    if context.getTemplateFormatVersion() == 1:
-      new_keys = self._objects.keys()
-      for path in new_keys:
+    if 1:
+      for path in self._objects:
         if installed_item._objects.has_key(path):
           # compare object to see if there is changes
           new_obj_code = self._objects[path]
@@ -4559,7 +4421,7 @@ class MessageTranslationTemplateItem(BaseTemplateItem):
       # get removed object
       old_keys = installed_item._objects.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]]})
     return modified_object_list
 
@@ -4592,7 +4454,7 @@ class MessageTranslationTemplateItem(BaseTemplateItem):
       localizer = context.getPortalObject().Localizer
     update_dict = kw.get('object_to_update', {})
     force = kw.get('force')
-    if context.getTemplateFormatVersion() == 1:
+    if 1:
       for key in sorted(self._objects.keys()):
         if update_dict.has_key(key) or force:
           if not force:
@@ -4623,13 +4485,6 @@ class MessageTranslationTemplateItem(BaseTemplateItem):
             if lang not in localizer.get_languages():
               localizer.manage_addLanguage(lang)
             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):
     if not remove_translations:
@@ -4976,18 +4831,6 @@ Business Template is a set of definitions, such as skins, portal types and categ
       XMLObject.__init__(self, *args, **kw)
       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')
     def manage_afterAdd(self, item, container):
       """
@@ -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()
       my_catalog = _getCatalogValue(self)
       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():
           # It is needed to update the catalog only if the default SQLCatalog is modified.
           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
         installed_bt = bt2
       else:
         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
       # 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
         else:
           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:
         new_item = getattr(self, 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
                                                            self.getTitle())
       # When reinstalling, installation state should not change to replaced
       if installed_bt not in [None, self]:
-        if installed_bt.getTemplateFormatVersion() == 0:
-          force = 1
         if site.portal_workflow.isTransitionPossible(
             installed_bt, 'replace'):
           installed_bt.replace(self)
 
       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'
 
-      # Check the format of business template, if old, force install
-      if self.getTemplateFormatVersion() == 0:
-        force = 1
-
       if not force:
         self.checkDependencies()
 
diff --git a/product/ERP5/Tool/TemplateTool.py b/product/ERP5/Tool/TemplateTool.py
index 3088fc50e4..f0d831674e 100644
--- a/product/ERP5/Tool/TemplateTool.py
+++ b/product/ERP5/Tool/TemplateTool.py
@@ -307,12 +307,7 @@ class TemplateTool (BaseTool):
         file.seek(0)
         magic = file.read(5)
 
-      if magic == '<?xml': # old version
-        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
+      if 1:
         # XXX: should really check for a magic and offer a falback if it
         # doens't correspond to anything handled.
         tar = tarfile.open(path, 'r:gz')
diff --git a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_getDiffObjectList.xml b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_getDiffObjectList.xml
index 3d2f68ca74..b7827c9bad 100644
--- a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_getDiffObjectList.xml
+++ b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_getDiffObjectList.xml
@@ -68,16 +68,12 @@ if len(uids) > 2:\n
 bt1 = context.portal_catalog.getObject(uids[0])\n
 if bt1.getBuildingState() != \'built\':\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
 # check if there is a second bt or if we compare to installed one\n
 if len(uids) == 2:\n
   bt2 = context.portal_catalog.getObject(uids[1])\n
   if bt2.getBuildingState() != \'built\':\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
   # compare to objects in ZODB\n
   bt2 = bt1\n
diff --git a/product/ERP5/bootstrap/erp5_core/bt/change_log b/product/ERP5/bootstrap/erp5_core/bt/change_log
index 24c4daf673..7f173b7dd8 100644
--- a/product/ERP5/bootstrap/erp5_core/bt/change_log
+++ b/product/ERP5/bootstrap/erp5_core/bt/change_log
@@ -1,3 +1,6 @@
+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
 * SelectionTool: Changing storage or memcached settings were not taken into effect until restart.
 
diff --git a/product/ERP5/bootstrap/erp5_core/bt/revision b/product/ERP5/bootstrap/erp5_core/bt/revision
index c7fcb94291..041b8beb7a 100644
--- a/product/ERP5/bootstrap/erp5_core/bt/revision
+++ b/product/ERP5/bootstrap/erp5_core/bt/revision
@@ -1 +1 @@
-41144
\ No newline at end of file
+41145
\ No newline at end of file
diff --git a/product/ERP5/bootstrap/erp5_property_sheets/PropertySheetTemplateItem/portal_property_sheets/BusinessTemplate/template_format_version_property.xml b/product/ERP5/bootstrap/erp5_property_sheets/PropertySheetTemplateItem/portal_property_sheets/BusinessTemplate/template_format_version_property.xml
index f04b5da93f..6cff98bab0 100644
--- a/product/ERP5/bootstrap/erp5_property_sheets/PropertySheetTemplateItem/portal_property_sheets/BusinessTemplate/template_format_version_property.xml
+++ b/product/ERP5/bootstrap/erp5_property_sheets/PropertySheetTemplateItem/portal_property_sheets/BusinessTemplate/template_format_version_property.xml
@@ -49,7 +49,7 @@
         </item>
         <item>
             <key> <string>property_default</string> </key>
-            <value> <string>python: 0</string> </value>
+            <value> <string>python: 1</string> </value>
         </item>
       </dictionary>
     </pickle>
diff --git a/product/ERP5/bootstrap/erp5_property_sheets/bt/change_log b/product/ERP5/bootstrap/erp5_property_sheets/bt/change_log
index f39eb306c3..b422bf7f4c 100644
--- a/product/ERP5/bootstrap/erp5_property_sheets/bt/change_log
+++ b/product/ERP5/bootstrap/erp5_property_sheets/bt/change_log
@@ -1,3 +1,6 @@
+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
 * Arrow: Add {source,destination}_{decision,carrier,section}_administration categories
 
diff --git a/product/ERP5/bootstrap/erp5_property_sheets/bt/revision b/product/ERP5/bootstrap/erp5_property_sheets/bt/revision
index 8c0474e323..d7765fe47e 100644
--- a/product/ERP5/bootstrap/erp5_property_sheets/bt/revision
+++ b/product/ERP5/bootstrap/erp5_property_sheets/bt/revision
@@ -1 +1 @@
-69
\ No newline at end of file
+70
\ No newline at end of file
-- 
2.30.9