source: products/quintagroup.plonecomments/trunk/quintagroup/plonecomments/browser/comments.py @ 3254

Last change on this file since 3254 was 3254, checked in by enkidu, 13 years ago

fix pypep8 problems

File size: 7.3 KB
Line 
1import urllib
2try:
3    import hashlib as md5
4    md5.md5
5except ImportError:
6    import md5
7
8from Acquisition import aq_inner
9from AccessControl import getSecurityManager
10
11from Products.CMFPlone.utils import getToolByName
12from Products.CMFFormController.ControllerState import ControllerState
13from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
14from quintagroup.plonecomments.utils import manage_mails
15
16from plone.app.layout.viewlets import comments
17from plone.app.kss.plonekssview import PloneKSSView
18
19
20class CommentsViewlet(comments.CommentsViewlet):
21    """A custom version of the comments viewlet
22    """
23    render = ViewPageTemplateFile('comments.pt')
24
25    def __init__(self, *args):
26        super(CommentsViewlet, self).__init__(*args)
27        if hasattr(self, 'login_url') and not hasattr(self, 'login_action'):
28            # In plone 4.0 in plone.app.layout.viewlets.comments function
29            # login_ action was renamed to login_url
30            self.login_action = self.login_url
31
32    def is_moderation_enabled(self):
33        """ Returns a boolean indicating whether the user has enabled
34            moderation in the qPloneComments configlet
35        """
36        portal_properties = getToolByName(self.context, 'portal_properties')
37        try:
38            return portal_properties.qPloneComments.getProperty(
39                'enable_moderation', None)
40        except AttributeError:
41            return False
42
43    def can_moderate(self):
44        """ Returns a boolean indicating whether the user has
45            the 'Moderate Discussion' permission
46        """
47        return getSecurityManager().checkPermission('Moderate Discussion',
48                                                    aq_inner(self.context))
49
50    def getGravatar(self, reply):
51        """ """
52        purl = getToolByName(self.context, 'portal_url')
53        mtool = getToolByName(self.context, 'portal_membership')
54        portrait_url = purl() + '/defaultUser.gif'
55        email = ''
56
57        creator = reply.Creator()
58        if creator and not creator == 'Anonymous User':
59            mtool = getToolByName(self.context, "portal_membership")
60            member = mtool.getMemberById(creator)
61            email = member and member.getProperty('email', '') or ''
62            mem_id = getattr(member, 'getId', lambda: 'Anonymous User')()
63            portrait = mtool.getPersonalPortrait(mem_id)
64            portrait_url = portrait.absolute_url()
65        else:
66            email = reply.getProperty('email', d='')
67
68        if not email or not 'defaultUser.gif' in portrait_url:
69            return portrait_url
70
71        size = 40
72        gravatar_url = "http://www.gravatar.com/avatar.php?"
73        # construct the url
74        gravatar_url += urllib.urlencode({
75            'gravatar_id': md5.md5(email).hexdigest(),
76            'default': portrait_url,
77            'size': str(size)})
78        return gravatar_url
79
80    def authenticated_report_abuse_enabled(self):
81        """ """
82        portal_properties = getToolByName(self.context, 'portal_properties')
83        prop_sheet = portal_properties['qPloneComments']
84        value = prop_sheet.getProperty('enable_authenticated_report_abuse',
85                                       False)
86        return value
87
88    def anonymous_report_abuse_enabled(self):
89        """ """
90        portal_properties = getToolByName(self.context, 'portal_properties')
91        prop_sheet = portal_properties['qPloneComments']
92        value = prop_sheet.getProperty('enable_anonymous_report_abuse', False)
93        return value
94
95    def ajax_report_abuse_enabled(self):
96        """ """
97        portal_properties = getToolByName(self.context, 'portal_properties')
98        prop_sheet = portal_properties['qPloneComments']
99        value = prop_sheet.getProperty('enable_ajax_report_abuse', False)
100        return value
101
102    def email_from_address(self):
103        """ """
104        portal_url = getToolByName(self.context, 'portal_url')
105        portal = portal_url.getPortalObject()
106        return portal.email_from_address
107
108    def member(self):
109        """ """
110        pm = getToolByName(self.context, 'portal_membership')
111        return pm.getAuthenticatedMember()
112
113    def portal_url(self):
114        """ """
115        return getToolByName(self.context, 'portal_url')
116
117
118class CommentsKSS(PloneKSSView):
119    """ Operations on the report abuse form using KSS.
120    """
121
122    def submit_abuse_report(self):
123        """ Send an email with the abuse report message and
124            hide abuse report form.
125        """
126        errors = {}
127        context = aq_inner(self.context)
128        request = context.REQUEST
129        portal = getToolByName(self.context, 'portal_url').getPortalObject()
130        if hasattr(context, 'captcha_validator'):
131            dummy_controller_state = ControllerState(
132                                            id='comments.pt',
133                                            context=context,
134                                            button='submit',
135                                            status='success',
136                                            errors={},
137                                            next_action=None,)
138            # get the form controller
139            controller = portal.portal_form_controller
140            # send the validate script to the form controller
141            # with the dummy state object
142            controller_state = controller.validate(dummy_controller_state,
143                                   request, ['captcha_validator', ])
144            errors.update(controller_state.errors)
145
146        message = request.get('message')
147        if not message:
148            errors.update({'message': 'Please provide a message'})
149
150        mtool = getToolByName(self.context, "portal_membership")
151        member = mtool.getAuthenticatedMember()
152        comment_id = self.context.request.get('comment_id')
153        ksscore = self.getCommandSet('core')
154        if errors:
155            html = self.macroContent('context/report_abuse_form/macros/form',
156                                     errors=errors,
157                                     show_form=True,
158                                     member=member,
159                                     **request.form)
160            node = ksscore.getHtmlIdSelector('span-reply-form-holder-%s' % \
161                                             comment_id)
162            ksscore.replaceInnerHTML(node, html)
163            return self.render()
164
165        # report_abuse(context, context, message, comment)
166        manage_mails(context, self.context, 'report_abuse')
167
168        html = self.macroContent('context/report_abuse_form/macros/form',
169                                 member=member,
170                                 **request.form)
171        node = ksscore.getHtmlIdSelector('span-reply-form-holder-%s' % \
172                                         comment_id)
173        html = '<br/><span style="color:red">' \
174            'You have reported this comment for abuse.</span>'
175        self.commands.addCommand('remove_abuse_report_form',
176                                 node,
177                                 comment_id=comment_id,
178                                 html=html)
179
180        node = ksscore.getHtmlIdSelector('div-captcha-%s' % comment_id)
181        html = self.macroContent('context/report_abuse_form/macros/captcha',
182                                 **request.form)
183        ksscore.replaceInnerHTML(node, html)
184        return self.render()
Note: See TracBrowser for help on using the repository browser.