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

Last change on this file since 2241 was 2137, checked in by kroman0, 14 years ago

PEP8 fixes

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
11from quintagroup.plonecomments.utils import getProp
12
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']
47            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.setReplyTo(self._getDiscussable())
56    item.indexObject()
57
58    return id
59
60
61def getReplies(self):
62    """Return a sequence of the DiscussionResponse objects which are
63       associated with this Discussable.
64    """
65    objects = []
66    validate = getSecurityManager().validate
67
68    result_ids = self._getReplyResults()
69    for id in result_ids:
70        comment = self._container.get(id).__of__(self)
71        try:
72            if validate(self, self, id, comment):
73                objects.append(comment)
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.