def update(self, request, *args, **kwargs): "Reply to message" if request.data is None: return rc.BAD_REQUEST pkfield = kwargs.get(self.model._meta.pk.name) or request.data.get(self.model._meta.pk.name) if not pkfield: return rc.BAD_REQUEST user = request.user.get_profile() try: message = self.model.objects.get(pk=pkfield) except ObjectDoesNotExist: return rc.NOT_FOUND if not user.has_permission(message): return rc.FORBIDDEN reply = Message() reply.author = user.get_contact() if not reply.author: return rc.FORBIDDEN reply.reply_to = message form = MessageReplyForm(user, message.stream_id, message, request.data, instance=reply) if form.is_valid(): reply = form.save() reply.set_user_from_request(request) # Add author to recipients reply.recipients.add(reply.author) message.read_by.clear() try: # if email entered create contact and add to recipients if 'multicomplete_recipients' in request.POST and request.POST['multicomplete_recipients']: try: conf = ModuleSetting.get_for_module('maker.messaging', 'default_contact_type')[0] default_contact_type = ContactType.objects.get(pk=long(conf.value)) except Exception: default_contact_type = None emails = request.POST['multicomplete_recipients'].split(',') for email in emails: emailstr = unicode(email).strip() if re.match('[a-zA-Z0-9+_\-\.]+@[0-9a-zA-Z][.-0-9a-zA-Z]*.[a-zA-Z]+', emailstr): contact, created = Contact.get_or_create_by_email(emailstr, contact_type=default_contact_type) reply.recipients.add(contact) if created: contact.set_user_from_request(request) except: pass # Add each recipient of the reply to the original message for recipient in reply.recipients.all(): message.recipients.add(recipient) # send email to all recipients reply.send_email() return reply else: self.status = 400 return form.errors
def messaging_view(request, message_id, response_format='html'): "Single message page" message = get_object_or_404(Message, pk=message_id) user = request.user.get_profile() if not user.has_permission(message): return user_denied(request, message="You don't have access to this Message", response_format=response_format) message.read_by.add(user) if request.POST and request.POST.get('body', False): "Unread message" reply = Message() reply.author = user.get_contact() if not reply.author: return user_denied(request, message="You can't send message without a Contact Card assigned to you.", response_format=response_format) reply.reply_to = message form = MessageReplyForm(user, message.stream_id, message, request.POST, instance=reply) if form.is_valid(): reply = form.save() reply.set_user_from_request(request) # Add author to recipients reply.recipients.add(reply.author) message.read_by.clear() try: # if email entered create contact and add to recipients if 'multicomplete_recipients' in request.POST and request.POST['multicomplete_recipients']: try: conf = ModuleSetting.get_for_module('maker.messaging', 'default_contact_type')[0] default_contact_type = ContactType.objects.get(pk=long(conf.value)) except Exception: default_contact_type = None emails = request.POST['multicomplete_recipients'].split(',') for email in emails: emailstr = unicode(email).strip() if re.match('[a-zA-Z0-9+_\-\.]+@[0-9a-zA-Z][.-0-9a-zA-Z]*.[a-zA-Z]+', emailstr): contact, created = Contact.get_or_create_by_email(emailstr, contact_type=default_contact_type) reply.recipients.add(contact) if created: contact.set_user_from_request(request) except: pass # Add each recipient of the reply to the original message for recipient in reply.recipients.all(): message.recipients.add(recipient) # send email to all recipients reply.send_email() return HttpResponseRedirect(reverse('messaging_message_view', args=[message.id])) else: form = MessageReplyForm(request.user.get_profile(), message.stream_id, message) replies = Object.filter_by_request(request, Message.objects.filter(reply_to=message).order_by('date_created')) context = _get_default_context(request) context.update({'message':message, 'messages':replies, 'form':form}) return render_to_response('messaging/message_view', context, context_instance=RequestContext(request), response_format=response_format)