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