source: products/qPloneComments/branches/plone-2.5-i18n/patch.py @ 1

Last change on this file since 1 was 1, checked in by myroslav, 19 years ago

Building directory structure

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