Example #1
0
    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])
Example #2
0
    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
Example #4
0
 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
Example #5
0
    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])
Example #6
0
    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])