source: products/quintagroup.plonecomments/branches/jquery/quintagroup/plonecomments/patch.py @ 2131

Last change on this file since 2131 was 1625, checked in by kroman0, 14 years ago

Fixed InitializeClass? and md5 for Plone4(python2.6)

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