def save(self): # resp object is a dictionary. The code key indicates the possible # four states the comment can be in: # * Comment created (http 201), # * Confirmation sent by mail (http 204), # * Comment in moderation (http 202), # * Comment rejected (http 403). site = get_current_site(self.request) resp = { 'code': -1, 'comment': self.form.get_comment_object(site_id=site.id) } resp['comment'].ip_address = self.request.META.get("REMOTE_ADDR", None) if self.request.user.is_authenticated: resp['comment'].user = self.request.user if 'comment_id' in self.data: # an edit comment operation. resp['comment'].comment_id = self.data.get('comment_id') # Signal that the comment is about to be saved responses = comment_will_be_posted.send(sender=TmpXtdComment, comment=resp['comment'], request=self.request) for (receiver, response) in responses: if response is False: resp['code'] = 403 # Rejected. return resp # Replicate logic from django_comments_xtd.views.on_comment_was_posted. if (not settings.COMMENTS_XTD_CONFIRM_EMAIL or self.request.user.is_authenticated): if not views._comment_exists(resp['comment']): new_comment = views._create_comment(resp['comment']) resp['comment'].xtd_comment = new_comment confirmation_received.send(sender=TmpXtdComment, comment=resp['comment'], request=self.request) comment_was_posted.send(sender=new_comment.__class__, comment=new_comment, request=self.request) if resp['comment'].is_public: resp['code'] = 201 views.notify_comment_followers(new_comment) else: resp['code'] = 202 else: key = signed.dumps(resp['comment'], compress=True, extra_key=settings.COMMENTS_XTD_SALT) views.send_email_confirmation_request(resp['comment'], key, site) resp['code'] = 204 # Confirmation sent by mail. return resp
def save(self): # resp object is a dictionary. The code key indicates the possible # four states the comment can be in: # * Comment created (http 201), # * Confirmation sent by mail (http 204), # * Comment in moderation (http 202), # * Comment rejected (http 403). site = get_current_site(self.request) resp = { 'code': -1, 'comment': self.form.get_comment_object(site_id=site.id) } resp['comment'].ip_address = self.request.META.get("REMOTE_ADDR", None) if self.request.user.is_authenticated: resp['comment'].user = self.request.user # Signal that the comment is about to be saved responses = comment_will_be_posted.send(sender=TmpXtdComment, comment=resp['comment'], request=self.request) for (receiver, response) in responses: if response is False: resp['code'] = 403 # Rejected. return resp # Replicate logic from django_comments_xtd.views.on_comment_was_posted. if ( not settings.COMMENTS_XTD_CONFIRM_EMAIL or self.request.user.is_authenticated ): if not views._comment_exists(resp['comment']): new_comment = views._create_comment(resp['comment']) resp['comment'].xtd_comment = new_comment confirmation_received.send(sender=TmpXtdComment, comment=resp['comment'], request=self.request) comment_was_posted.send(sender=new_comment.__class__, comment=new_comment, request=self.request) if resp['comment'].is_public: resp['code'] = 201 views.notify_comment_followers(new_comment) else: resp['code'] = 202 else: key = signed.dumps(resp['comment'], compress=True, extra_key=settings.COMMENTS_XTD_SALT) views.send_email_confirmation_request(resp['comment'], key, site) resp['code'] = 204 # Confirmation sent by mail. return resp
def send_delayed_notifications(sender, **kwargs): """ Send django_comments_xtd followup notification emails when a comment is published. Since we have moderation on for all comment submissions, we can safely assume that when a comment switches from is_public=False to is_public=True, it's been published. So we tell django_comments_xtd to let any followers know. TODO/FIXME: If the comment is for some reason unpublished and then published again, the notifications will get sent again. Hmm. """ if kwargs['instance'].is_public is True: try: current = XtdComment.objects.get(id=kwargs['instance'].id) if current.is_public is False: # comment is being published, so send notifications notify_comment_followers(current) except XtdComment.DoesNotExist: pass