source: products/quintagroup.plonecomments/trunk/quintagroup/plonecomments/patch.py @ 3114

Last change on this file since 3114 was 3114, checked in by kroman0, 13 years ago

Pyflakes and pep8 fixes

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