from Products.CMFDefault.DiscussionItem import DiscussionItemContainer, DiscussionItem from AccessControl import getSecurityManager, Unauthorized from DateTime import DateTime from Products.CMFCore.utils import getToolByName from AccessControl import ClassSecurityInfo from Globals import InitializeClass import rfc822 from StringIO import StringIO from utils import * # Patching createReply method of # Products.CMFDefault.DiscussionItem.DiscussionItemContainer def createReply( self, title, text, Creator=None, email=''): """ Create a reply in the proper place """ container = self._container id = int(DateTime().timeTime()) while self._container.get( str(id), None ) is not None: id = id + 1 id = str( id ) item = DiscussionItem( id, title=title, description=title ) item.setFormat('structured-text') item._edit(text) if Creator: if hasattr(item, 'addCreator'): item.addCreator(Creator) else: item.creator = Creator pm = getToolByName(self, 'portal_membership') if pm.isAnonymousUser(): item.manage_addProperty(id='email', value=email, type='string') item.review_state="private" item.setReplyTo( self._getDiscussable() ) self._container[ id ] = item # Control of performing moderation ifModerate = getProp(self, "enable_moderation", marker=False) if ifModerate: roles = [role['name'] for role in self.acl_users.rolesOfPermission('Moderate Discussion') if role['selected']== 'SELECTED'] roles.append('DiscussionManager') item.manage_permission('Delete objects', roles, acquire=1) item.manage_permission('View', roles, acquire=0) else: item.review_state = "published" item.__of__( self ).indexObject() return id def getReplies( self ): """ Return a sequence of the DiscussionResponse objects which are associated with this Discussable """ objects = [] a = objects.append validate = getSecurityManager().validate result_ids = self._getReplyResults() for id in result_ids: object = self._container.get( id ).__of__( self ) try: if validate(self, self, id, object): a( object ) except Unauthorized: pass return objects perms = DiscussionItemContainer.__ac_permissions__ new_perms = [] for item in perms: perm_name = item[0] funcs = item[1] if 'deleteReply' in funcs: new_perms.append( (perm_name, [f for f in funcs if f != 'deleteReply']) ) new_perms.append( ('Moderate Discussion', ('deleteReply', )) ) else: new_perms.append(item) DiscussionItemContainer.__ac_permissions__ = new_perms InitializeClass(DiscussionItemContainer) DiscussionItemContainer.createReply = createReply DiscussionItemContainer.getReplies = getReplies