diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py index 464f65d69c7a4f556a230507b1ca314dbdb364ce..a9516a0b2ca99007a848ea7ac287d1d45671401e 100755 --- a/product/ERP5/Document/BusinessTemplate.py +++ b/product/ERP5/Document/BusinessTemplate.py @@ -885,75 +885,46 @@ class SkinTemplateItem(ObjectTemplateItem): ObjectTemplateItem.__init__(self, id_list, tool_id=tool_id, **kw) def install(self, context, trashbin, **kw): + ObjectTemplateItem.install(self, context, trashbin, **kw) update_dict = kw.get('object_to_update') force = kw.get('force') - if (getattr(self, 'template_format_version', 0)) == 1: - ObjectTemplateItem.install(self, context, trashbin, **kw) - p = context.getPortalObject() - ps = p.portal_skins - for skin_name, selection in ps.getSkinPaths(): - new_selection = [] - selection = selection.split(',') - for relative_url in self._objects.keys(): + p = context.getPortalObject() + # It is necessary to make sure that the sql connections in Z SQL Methods are valid. + sql_connection_list = p.objectIds(spec=('Z MySQL Database Connection',)) + for relative_url in self._archive.keys(): + folder = p.unrestrictedTraverse(relative_url) + for object in folder.objectValues(spec=('Z SQL Method',)): + if object.connection_id not in sql_connection_list: + object.connection_id = sql_connection_list[0] + # Add new folders into skin paths. + ps = p.portal_skins + for skin_name, selection in ps.getSkinPaths(): + new_selection = [] + selection = selection.split(',') + for relative_url in self._archive.keys(): + if (getattr(self, 'template_format_version', 0)) == 1: if update_dict.has_key(relative_url) or force: if not force: - action = update_dict[relative_url] - if action == 'nothing': + if update_dict[relative_url] == 'nothing': continue - object_path = relative_url.split('/') - if len(object_path) > 2: - continue # not a skin folder - object = self._objects[relative_url] - skin_id = object_path[1] - if hasattr(aq_base(object), 'getProperty'): - selection_list = object.getProperty('business_template_registered_skin_selections', None) - else: - continue - if selection_list is None or skin_name in selection_list: - if skin_id not in selection and skin_id not in new_selection: - new_selection.append(skin_id) - new_selection.extend(selection) - # sort the layer according to skin priorities - new_selection.sort(lambda a, b : cmp( # separate functions here - b in ps.objectIds() and ps[b].getProperty( - 'business_template_skin_layer_priority', 0) or 0, - a in ps.objectIds() and ps[a].getProperty( - 'business_template_skin_layer_priority', 0) or 0)) - ps.manage_skinLayers(skinpath = tuple(new_selection), skinname = skin_name, add_skin = 1) - # Make sure that skin data is up-to-date (see CMFCore/Skinnable.py). - p.changeSkin(None) - else: - ObjectTemplateItem.install(self, context, trashbin, **kw) - p = context.getPortalObject() - # It is necessary to make sure that the sql connections in Z SQL Methods are valid. - sql_connection_list = p.objectIds(spec=('Z MySQL Database Connection',)) - for relative_url in self._archive.keys(): - folder = p.unrestrictedTraverse(relative_url) - for object in folder.objectValues(spec=('Z SQL Method',)): - if object.connection_id not in sql_connection_list: - object.connection_id = sql_connection_list[0] - # Add new folders into skin paths. - ps = p.portal_skins - for skin_name, selection in ps.getSkinPaths(): - new_selection = [] - selection = selection.split(',') - for relative_url in self._archive.keys(): + object = self._objects[relative_url] + else: object = self._archive[relative_url] - skin_id = relative_url.split('/')[-1] - selection_list = object.getProperty('business_template_registered_skin_selections', None) - if selection_list is None or skin_name in selection_list: - if skin_id not in selection: - new_selection.append(skin_id) - new_selection.extend(selection) - # sort the layer according to skin priorities - new_selection.sort(lambda a, b : cmp( - b in ps.objectIds() and ps[b].getProperty( - 'business_template_skin_layer_priority', 0) or 0, - a in ps.objectIds() and ps[a].getProperty( - 'business_template_skin_layer_priority', 0) or 0)) - ps.manage_skinLayers(skinpath = tuple(new_selection), skinname = skin_name, add_skin = 1) - # Make sure that skin data is up-to-date (see CMFCore/Skinnable.py). - p.changeSkin(None) + skin_id = relative_url.split('/')[-1] + selection_list = object.getProperty('business_template_registered_skin_selections', None) + if selection_list is None or skin_name in selection_list: + if skin_id not in selection: + new_selection.append(skin_id) + new_selection.extend(selection) + # sort the layer according to skin priorities + new_selection.sort(lambda a, b : cmp( + b in ps.objectIds() and ps[b].getProperty( + 'business_template_skin_layer_priority', 0) or 0, + a in ps.objectIds() and ps[a].getProperty( + 'business_template_skin_layer_priority', 0) or 0)) + ps.manage_skinLayers(skinpath = tuple(new_selection), skinname = skin_name, add_skin = 1) + # Make sure that skin data is up-to-date (see CMFCore/Skinnable.py). + p.changeSkin(None) def uninstall(self, context, **kw): # Remove folders from skin paths.