source: products/qPloneComments/tags/3.0.2/patch.py @ 1591

Last change on this file since 1591 was 82, checked in by chervol, 18 years ago

branch plone2.0.5 fill in

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1from Products.CMFDefault.DiscussionItem import DiscussionItemContainer, DiscussionItem
2from AccessControl import getSecurityManager, Unauthorized
3from DateTime import DateTime
4from Products.CMFCore.utils import getToolByName
5from AccessControl import ClassSecurityInfo
6from Globals import InitializeClass
7import rfc822
8from StringIO import StringIO
9from utils import *
10
11# Patching createReply method of
12# Products.CMFDefault.DiscussionItem.DiscussionItemContainer
13def createReply( self, title, text, Creator=None, email=''):
14    """
15        Create a reply in the proper place
16    """
17    container = self._container
18
19    id = int(DateTime().timeTime())
20    while self._container.get( str(id), None ) is not None:
21        id = id + 1
22    id = str( id )
23
24    item = DiscussionItem( id, title=title, description=title )
25    item.setFormat('structured-text')
26    item._edit(text)
27
28    if Creator:
29        if hasattr(item, 'addCreator'):
30            item.addCreator(Creator)
31        else:
32            item.creator = Creator
33
34    pm = getToolByName(self, 'portal_membership')
35
36    if pm.isAnonymousUser():
37        item.manage_addProperty(id='email', value=email, type='string')
38
39    item.review_state="private"
40
41    item.setReplyTo( self._getDiscussable() )
42    self._container[ id ] = item
43
44    # Control of performing moderation
45    ifModerate = getProp(self, "enable_moderation", marker=False)
46    if ifModerate:
47        roles = [role['name'] for role in self.acl_users.rolesOfPermission('Moderate Discussion')
48                 if role['selected']== 'SELECTED']
49        roles.append('DiscussionManager')
50        item.manage_permission('Delete objects', roles, acquire=1)
51        item.manage_permission('View', roles, acquire=0)
52    else:
53        item.review_state = "published"
54
55    item.__of__( self ).indexObject()
56    return id
57
58def getReplies( self ):
59    """
60        Return a sequence of the DiscussionResponse objects which are
61        associated with this Discussable
62    """
63
64    objects = []
65    a = objects.append
66    validate = getSecurityManager().validate
67
68    result_ids = self._getReplyResults()
69    for id in result_ids:
70        object = self._container.get( id ).__of__( self )
71        try:
72            if validate(self, self, id, object):
73                a( object )
74        except Unauthorized:
75            pass
76    return objects
77
78perms = DiscussionItemContainer.__ac_permissions__
79new_perms = []
80for item in perms:
81    perm_name = item[0]
82    funcs = item[1]
83    if 'deleteReply' in funcs:
84        new_perms.append( (perm_name, [f for f in funcs if f != 'deleteReply']) )
85        new_perms.append( ('Moderate Discussion', ('deleteReply', )) )
86    else:
87        new_perms.append(item)
88
89DiscussionItemContainer.__ac_permissions__ = new_perms
90InitializeClass(DiscussionItemContainer)
91
92DiscussionItemContainer.createReply = createReply
93DiscussionItemContainer.getReplies = getReplies
Note: See TracBrowser for help on using the repository browser.