def installBaseObjects(self): '''Creates the tool and the root data folder if they do not exist.''' # Create or update the base folder for storing data zopeContent = self.app.objectIds() if 'data' not in zopeContent: self.app.manage_addFolder('data') data = self.app.data # Manager has been granted Add permissions for all root classes. # This may not be desired, so remove this. for className in self.config.rootClasses: permission = self.getAddPermission(className) data.manage_permission(permission, (), acquire=0) # All roles defined as creators should be able to create the # corresponding root classes in this folder. i = -1 for klass in self.config.appClasses: i += 1 if not klass.__dict__.has_key('root') or \ not klass.__dict__['root']: continue # It is not a root class creators = getattr(klass, 'creators', None) if not creators: creators = self.config.defaultAddRoles className = self.config.appClassNames[i] permission = self.getAddPermission(className) updateRolesForPermission(permission, tuple(creators), data) if 'config' not in zopeContent: toolName = '%sTool' % self.productName createObject(self.app, 'config', toolName,self.productName,wf=False) # Remove some default objects created by Zope but not useful to Appy for name in ('standard_html_footer', 'standard_html_header',\ 'standard_template.pt'): if name in zopeContent: self.app.manage_delObjects([name])
def installBaseObjects(self): '''Creates the tool and the base data folder if they do not exist.''' # Create the tool. zopeContent = self.app.objectIds() from OFS.Folder import manage_addFolder if 'config' not in zopeContent: toolName = '%sTool' % self.productName gutils.createObject(self.app, 'config', toolName, self.productName, wf=False, noSecurity=True) # Create the base data folder. if 'data' not in zopeContent: manage_addFolder(self.app, 'data') # Remove some default objects created by Zope but not useful to Appy for name in ('standard_html_footer', 'standard_html_header',\ 'standard_template.pt'): if name in zopeContent: self.app.manage_delObjects([name])
def create(self, fieldNameOrClass, noSecurity=False, **kwargs): '''If p_fieldNameOrClass is the name of a field, this method allows to create an object and link it to the current one (self) through reference field named p_fieldName. If p_fieldNameOrClass is a class from the gen-application, it must correspond to a root class and this method allows to create a root object in the application folder.''' isField = isinstance(fieldNameOrClass, basestring) tool = self.tool.o # Determine the portal type of the object to create if isField: fieldName = fieldNameOrClass appyType = self.o.getAppyType(fieldName) portalType = tool.getPortalType(appyType.klass) else: klass = fieldNameOrClass portalType = tool.getPortalType(klass) # Determine object id if kwargs.has_key('id'): objId = kwargs['id'] del kwargs['id'] else: objId = tool.generateUid(portalType) # Determine if object must be created from external data externalData = None if kwargs.has_key('_data'): externalData = kwargs['_data'] del kwargs['_data'] # Where must I create the object? if not isField: folder = tool.getPath('/data') else: folder = self.o.getCreateFolder() if not noSecurity: # Check that the user can edit this field. appyType.checkAdd(self.o) # Create the object zopeObj = createObject(folder, objId, portalType, tool.getAppName(), noSecurity=noSecurity) appyObj = zopeObj.appy() # Set object attributes for attrName, attrValue in kwargs.iteritems(): setattr(appyObj, attrName, attrValue) if isField: # Link the object to this one appyType.linkObject(self.o, zopeObj) zopeObj._appy_managePermissions() # Call custom initialization if externalData: param = externalData else: param = True if hasattr(appyObj, 'onEdit'): appyObj.onEdit(param) zopeObj.reindex() return appyObj
def create(self, fieldNameOrClass, noSecurity=False, **kwargs): """If p_fieldNameOrClass is the name of a field, this method allows to create an object and link it to the current one (self) through reference field named p_fieldName. If p_fieldNameOrClass is a class from the gen-application, it must correspond to a root class and this method allows to create a root object in the application folder.""" isField = isinstance(fieldNameOrClass, basestring) tool = self.tool.o # Determine the portal type of the object to create if isField: fieldName = fieldNameOrClass appyType = self.o.getAppyType(fieldName) portalType = tool.getPortalType(appyType.klass) else: klass = fieldNameOrClass portalType = tool.getPortalType(klass) # Determine object id if kwargs.has_key("id"): objId = kwargs["id"] del kwargs["id"] else: objId = tool.generateUid(portalType) # Determine if object must be created from external data externalData = None if kwargs.has_key("_data"): externalData = kwargs["_data"] del kwargs["_data"] # Where must I create the object? if not isField: folder = tool.getPath("/data") else: folder = self.o.getCreateFolder() if not noSecurity: # Check that the user can edit this field. appyType.checkAdd(self.o) # Create the object zopeObj = createObject(folder, objId, portalType, tool.getAppName(), noSecurity=noSecurity) appyObj = zopeObj.appy() # Set object attributes for attrName, attrValue in kwargs.iteritems(): setattr(appyObj, attrName, attrValue) if isField: # Link the object to this one appyType.linkObject(self.o, zopeObj) zopeObj._appy_managePermissions() # Call custom initialization if externalData: param = externalData else: param = True if hasattr(appyObj, "onEdit"): appyObj.onEdit(param) zopeObj.reindex() return appyObj
def installBaseObjects(self): '''Creates the tool and the root data folder if they do not exist.''' # Create or update the base folder for storing data zopeContent = self.app.objectIds() from OFS.Folder import manage_addFolder if 'config' not in zopeContent: toolName = '%sTool' % self.productName createObject(self.app, 'config', toolName, self.productName, wf=False, noSecurity=True) if 'data' not in zopeContent: manage_addFolder(self.app, 'data') data = self.app.data tool = self.app.config # Manager has been granted Add permissions for all root classes. # This may not be desired, so remove this. for className in self.config.rootClasses: permission = self.getAddPermission(className) data.manage_permission(permission, (), acquire=0) # All roles defined as creators should be able to create the # corresponding root classes in this folder. i = -1 for klass in self.config.appClasses: i += 1 if not klass.__dict__.has_key('root') or \ not klass.__dict__['root']: continue # It is not a root class className = self.config.appClassNames[i] wrapperClass = tool.getAppyClass(className, wrapper=True) creators = wrapperClass.getCreators(self.config) permission = self.getAddPermission(className) updateRolesForPermission(permission, tuple(creators), data) # Remove some default objects created by Zope but not useful to Appy for name in ('standard_html_footer', 'standard_html_header',\ 'standard_template.pt'): if name in zopeContent: self.app.manage_delObjects([name])