diff --git a/product/ERP5Type/Document/Folder.py b/product/ERP5Type/Document/Folder.py index 8dfc5ff126be87b85664fcc68dcc8202bcc9ed25..8fe8d3e9fb9cd112a9fa89c5b111ecf180552291 100755 --- a/product/ERP5Type/Document/Folder.py +++ b/product/ERP5Type/Document/Folder.py @@ -59,7 +59,7 @@ class FolderMixIn(ExtensionClass.Base): security.declareObjectProtected(Permissions.View) security.declareProtected(Permissions.AddPortalContent, 'newContent') - def newContent(self, id=None, portal_type=None, id_group=None, + def newContent(self, id=None, portal_type=None, id_group=None, default=None, method=None, immediate_reindex=0, container=None, bypass_init_script=0, **kw): """ @@ -71,6 +71,8 @@ class FolderMixIn(ExtensionClass.Base): new_id = str(container.generateNewId(id_group = id_group, default=default, method=method)) else: new_id = str(id) + if not container.allowedContentTypes(): + raise 'NoAllowedContenTypesError' if portal_type is None: portal_type = container.allowedContentTypes()[0].id self.portal_types.constructContent(type_name=portal_type, container=container, @@ -85,9 +87,9 @@ class FolderMixIn(ExtensionClass.Base): security.declareProtected( Permissions.DeletePortalContent, 'deleteContent') def deleteContent(self, id): - """ delete items in this folder. + """ delete items in this folder. `id` can be a list or a string. - """ + """ if type(id) is type(''): self._delObject(id) elif type(id) is type([]) or type(id) is type(()): @@ -140,7 +142,7 @@ class FolderMixIn(ExtensionClass.Base): """ if not kw.has_key('parent_uid'): #WHY ???? kw['parent_uid'] = self.getUid() - + # Make sure that if we use parent base category # We do not have conflicting parent uid values delete_parent_uid = 0 @@ -152,7 +154,7 @@ class FolderMixIn(ExtensionClass.Base): delete_parent_uid = 1 if delete_parent_uid: del kw['parent_uid'] - + kw2 = {} # Remove useless matter before calling the # catalog. In particular, consider empty @@ -173,7 +175,7 @@ class FolderMixIn(ExtensionClass.Base): """ if not kw.has_key('parent_uid'): #WHY ???? kw['parent_uid'] = self.getUid() - + # Make sure that if we use parent base category # We do not have conflicting parent uid values delete_parent_uid = 0 @@ -185,7 +187,7 @@ class FolderMixIn(ExtensionClass.Base): delete_parent_uid = 1 if delete_parent_uid: del kw['parent_uid'] - + kw2 = {} # Remove useless matter before calling the # catalog. In particular, consider empty @@ -197,8 +199,8 @@ class FolderMixIn(ExtensionClass.Base): # content has to be called z_search_folder method = self.portal_catalog.countResults return method(**kw2) - - + + # Count objects in the folder security.declarePrivate('_count') def _count(self, **kw): @@ -289,10 +291,10 @@ be a problem).""" _edit = Base._edit _setPropValue = Base._setPropValue _propertyMap = Base._propertyMap # are there any others XXX ? - + # CPS patch circumvent - manage_renameObject = OriginalCopyContainer.manage_renameObject - + manage_renameObject = OriginalCopyContainer.manage_renameObject + #security.declareProtected( Permissions.DeletePortalContent, 'manage_delObjects' ) #manage_delObjects = CopyContainer.manage_delObjects @@ -491,7 +493,7 @@ be a problem).""" """ # In ERP5, simply reindex all objects. self.recursiveReindexObject() - + security.declarePublic( 'recursiveReindexObject' ) def recursiveReindexObject(self, *args, **kw): """ @@ -502,7 +504,7 @@ be a problem).""" root_indexable = int(getattr(self.getPortalObject(),'isIndexable',1)) if self.isIndexable and root_indexable: self.activate(group_method_id='portal_catalog/catalogObjectList', expand_method_id='getIndexableChildValueList', **kw).recursiveImmediateReindexObject(*args, **kw) - + security.declareProtected( Permissions.AccessContentsInformation, 'getIndexableChildValueList' ) def getIndexableChildValueList(self): """ @@ -515,7 +517,7 @@ be a problem).""" if hasattr(aq_base(c), 'getIndexableChildValueList'): value_list.extend(c.getIndexableChildValueList()) return value_list - + security.declarePublic( 'recursiveImmediateReindexObject' ) def recursiveImmediateReindexObject(self, *args, **kw): """ @@ -573,14 +575,14 @@ be a problem).""" btree_ok = self._cleanup() if not btree_ok: # We must commit if we want to keep on recursing - get_transaction().commit() - error_list += [(self.getRelativeUrl(), 'BTree Inconsistency', + get_transaction().commit() + error_list += [(self.getRelativeUrl(), 'BTree Inconsistency', 199, '(fixed)')] # Call superclass error_list += Base.checkConsistency(self, fixit=fixit) # We must commit before listing folder contents # in case we erased some data - if fixit: get_transaction().commit() + if fixit: get_transaction().commit() # Then check the consistency on all sub objects for object in self.contentValues(): if fixit: @@ -640,21 +642,21 @@ be a problem).""" # Aliases getObjectIds = CMFBTreeFolder.objectIds - # Overloading + # Overloading security.declareProtected( Permissions.AccessContentsInformation, 'getParentSqlExpression' ) def getParentSqlExpression(self, table = 'catalog', strict_membership = 0): """ - Builds an SQL expression to search children and subclidren - """ + Builds an SQL expression to search children and subclidren + """ if strict_membership: return Base.getParentSqlExpression(self, table=table, strict_membership=strict_membership) - result = "%s.parent_uid = %s" % (table, self.getUid()) + result = "%s.parent_uid = %s" % (table, self.getUid()) for o in self.objectValues(): if hasattr(aq_base(o), 'objectValues'): # Do not consider non folder objects result = "%s OR %s" % (result, o.getParentSqlExpression(table=table, strict_membership=strict_membership)) return "( %s )" % result - + def mergeContent(self,from_object=None,to_object=None, delete=1,**kw): """ @@ -694,7 +696,7 @@ be a problem).""" parent = from_object.getParent() parent.manage_delObjects(from_object.getId()) return corrected_list - + security.declareProtected( Permissions.AccessContentsInformation, 'objectValues' ) def objectValues(self, spec=None, meta_type=None, portal_type=None, sort_on=None, **kw): #LOG('objectValues', 0, 'spec = %r, kw = %r' % (spec, kw)) @@ -703,7 +705,7 @@ be a problem).""" object_list = CMFBTreeFolder.objectValues(self, spec=spec) if portal_type is not None: if type(portal_type) == type(''): - portal_type = (portal_type,) + portal_type = (portal_type,) object_list = filter(lambda x: x.getPortalType() in portal_type, object_list) if sort_on is not None: def cmpObjects(x, y): @@ -712,10 +714,10 @@ be a problem).""" if result != 0: return result return 0 - + object_list.sort(cmpObjects) return object_list - + # Override security declaration of CMFCore/PortalFolder (used by CMFBTreeFolder) security.declareProtected(Permissions.ModifyPortalContent,'setDescription') security.declareProtected( Permissions.ModifyPortalContent, 'setTitle' )