def new_message(request, pk): advert = get_object_or_404(Advert, id=pk) form = NewMessageForm(request.POST) if form.is_valid(): text = form.cleaned_data.get("text") conversation = Conversation.objects.create(advert_id=pk) conversation.users.add(advert.user) conversation.users.add(request.user) message = conversation.messages.create( text=text, sender=request.user, ) message.seen_users.add(request.user) redirect_to = "%(path)s?message_sent=true" % { "path": reverse("detail_advert", args=[pk]) } return redirect(redirect_to) return HttpResponse("gonderilmedi")
def conversation_detail(request, pk): conversation = get_object_or_404( Conversation, users=request.user, id=pk) messages = conversation.messages.all() form = NewMessageForm() if request.method == "POST": form = NewMessageForm(request.POST) if form.is_valid(): message = form.cleaned_data.get("text") conversation.messages.create( sender=request.user, text=message) form = NewMessageForm() # mark as seen current messages unread_messages = Message.objects.filter( conversation=conversation ).exclude( seen_users=request.user ) for message in unread_messages: message.seen_users.add(request.user) return render_to_response("conversation_detail.html", { "conversation": conversation, "messages": messages, "form": form }, RequestContext(request))
def conversation_detail(request, pk): conversation = get_object_or_404(Conversation, users=request.user, id=pk) messages = conversation.messages.all() form = NewMessageForm() if request.method == "POST": form = NewMessageForm(request.POST) if form.is_valid(): message = form.cleaned_data.get("text") conversation.messages.create(sender=request.user, text=message) form = NewMessageForm() # mark as seen current messages unread_messages = Message.objects.filter( conversation=conversation).exclude(seen_users=request.user) for message in unread_messages: message.seen_users.add(request.user) return render_to_response("conversation_detail.html", { "conversation": conversation, "messages": messages, "form": form }, RequestContext(request))
def new_message(request, pk): advert = get_object_or_404(Advert, id=pk) form = NewMessageForm(request.POST) if form.is_valid(): text = form.cleaned_data.get("text") conversation = Conversation.objects.create(advert_id=pk) conversation.users.add(request.user) conversation.users.add(advert.user) message = conversation.messages.create( text=text, sender=request.user, ) message.seen_users.add(request.user) redirect_to = "%(path)s?message_sent=true" % { "path": reverse("detail_advert", args=[pk]) } return redirect(redirect_to) return HttpResponse("gonderilmedi")
def new(request): selected_user = None if request.POST: form = NewMessageForm(request.user, request.POST) if form.is_valid(): if form.cleaned_data['user']: m = Message(user=form.cleaned_data['user'], author=request.user, message_type='M', content=form.cleaned_data['content'], subject=form.cleaned_data['subject']) m.save() send_new_message_notification.delay(m.pk) elif form.cleaned_data['team']: now = datetime.now() # TODO: Move this into a task for performance? language = form.cleaned_data['language'] # We create messages using bulk_create, so that only one transaction is needed # But that means that we need to sort out the pk of newly created messages to # be able to send the notifications message_list = [] members = [] if len(language) == 0: members = map( lambda member: member.user, form.cleaned_data['team'].members.all().exclude( user__exact=request.user).select_related('user')) else: members = map( lambda member: member.user, UserLanguage.objects.filter( user__in=form.cleaned_data['team'].members.values( 'user')).filter(language__exact=language). exclude( user__exact=request.user).select_related('user')) for member in members: message_list.append( Message(user=member, author=request.user, message_type='M', content=form.cleaned_data['content'], subject=form.cleaned_data['subject'])) Message.objects.bulk_create(message_list, batch_size=500) new_messages_ids = Message.objects.filter( created__gt=now).values_list('pk', flat=True) # Creating a bunch of reasonably-sized tasks batch = 0 batch_size = 1000 while batch < len(new_messages_ids): send_new_messages_notifications.delay( new_messages_ids[batch:batch + batch_size]) batch += batch_size messages.success(request, _(u'Message sent.')) return HttpResponseRedirect(reverse('messages:inbox')) else: if request.GET.get('user'): selected_user = User.objects.get(username=request.GET['user']) else: form = NewMessageForm(request.user) if request.GET.get('user'): selected_user = User.objects.get(username=request.GET['user']) return { 'selected_user': selected_user, 'user_info': request.user, 'form': form, }
def new(request): selected_user = None reply_msg = None reply = request.GET.get('reply') if reply: try: reply_msg = Message.objects.get(pk=reply, user=request.user) reply_msg.read = True reply_msg.save() except (Message.DoesNotExist, ValueError): pass if request.POST: form = NewMessageForm(request.user, request.POST) if form.is_valid(): if form.cleaned_data['user']: m = Message(user=form.cleaned_data['user'], author=request.user, message_type='M', content=form.cleaned_data['content'], subject=form.cleaned_data['subject']) m.save() request.user.sent_message() send_new_message_notification.delay(m.pk) elif form.cleaned_data['team']: # TODO: Move this into a task for performance? language = form.cleaned_data['language'] # We create messages using bulk_create, so that only one transaction is needed # But that means that we need to sort out the pk of newly created messages to # be able to send the notifications message_list = [] members = [] if len(language) == 0: members = map( lambda member: member.user, form.cleaned_data['team'].members.all().exclude( user__exact=request.user).select_related('user')) else: members = map( lambda member: member.user, UserLanguage.objects.filter( user__in=form.cleaned_data['team'].members.values( 'user')).filter(language__exact=language). exclude( user__exact=request.user).select_related('user')) for member in members: message_list.append( Message.objects.create( user=member, author=request.user, message_type='M', content=form.cleaned_data['content'], subject=form.cleaned_data['subject'])) # Creating a bunch of reasonably-sized tasks batch = 0 batch_size = 1000 while batch < len(message_list): send_new_messages_notifications.delay( [m.pk for m in message_list[batch:batch + batch_size]]) batch += batch_size messages.success(request, _(u'Message sent.')) return HttpResponseRedirect(reverse('messages:inbox')) else: if request.GET.get('user'): selected_user = User.objects.get(username=request.GET['user']) else: initial = {} if reply_msg: initial['subject'] = 'RE: {}'.format(reply_msg.subject) form = NewMessageForm(request.user, initial=initial) if request.GET.get('user'): selected_user = User.objects.get(username=request.GET['user']) if not selected_user and reply_msg: selected_user = reply_msg.author return { 'selected_user': selected_user, 'user_info': request.user, 'form': form, }