diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py index fd68e599383114fc5acf87c7faf6c1320b5270be..7708e41753617edbd86c330e393525f26e5175d6 100755 --- a/product/ERP5/Document/BusinessTemplate.py +++ b/product/ERP5/Document/BusinessTemplate.py @@ -1972,7 +1972,9 @@ class RoleTemplateItem(BaseTemplateItem): if installed_bt.id == 'installed_bt_for_diff': #must rename keys in dict if reinstall new_dict = PersistentMapping() - old_keys = installed_bt._objects.values()[0] + old_keys = () + if len(installed_bt._objects.values()) > 0: + old_keys = installed_bt._objects.values()[0] for key in old_keys: new_dict[key] = '' installed_bt._objects = new_dict @@ -3207,7 +3209,8 @@ 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 and the one installed if exists - """ + """ + modified_object_list = {} bt_title = self.getTitle() installed_bt = self.portal_templates.getInstalledBusinessTemplate(title=bt_title) @@ -3227,6 +3230,11 @@ Business Template is a set of definitions, such as skins, portal types and categ bt2.edit(description='tmp bt generated for diff') bt2.build() installed_bt = bt2 + + # can be call to diff two Business Template in template tool + bt2 = kw.get('compare_to', None) + if bt2 is not None: + installed_bt = bt2 new_bt_format = self.getTemplateFormatVersion() if installed_bt_format == 0 and new_bt_format == 0: @@ -3705,7 +3713,7 @@ Business Template is a set of definitions, such as skins, portal types and categ getattr(self, item_name).importFile(bta) - def diffObject(self, REQUEST): + def diffObject(self, REQUEST, **kw): """ Make a diff between an object in the Business Template and the same in the Business Template installed in the site @@ -3746,10 +3754,17 @@ Business Template is a set of definitions, such as skins, portal types and categ object_class = REQUEST.object_class # get objects item_name = class_name_dict[object_class] + new_bt =self installed_bt = self.getInstalledBusinessTemplate(title=self.getTitle()) if installed_bt == new_bt: return 'No diff at reinstall' + + # compare with a given business template + bt2_id = kw.get('compare_with', None) + if bt2_id is not None: + installed_bt = self.portal_templates._getOb(bt2_id) + new_item = getattr(new_bt, item_name) installed_item = getattr(installed_bt, item_name) new_object = new_item._objects[object_id] @@ -3781,6 +3796,7 @@ Business Template is a set of definitions, such as skins, portal types and categ diff_msg += '\n'.join(diff_list) else: diff_msg = 'No diff' + elif item_name in item_list_2: new_obj_xml = new_item.generateXml(path= object_id) installed_obj_xml = installed_item.generateXml(path= object_id) @@ -3792,6 +3808,7 @@ Business Template is a set of definitions, such as skins, portal types and categ diff_msg += '\n'.join(diff_list) else: diff_msg = 'No diff' + elif item_name in item_list_3: new_obj_lines = new_object.splitlines() installed_obj_lines = installed_object.splitlines()