def start_new_conversation_from_profile(request, recipent_pk): recipent = get_user_model().objects.get(pk=recipent_pk) if request.method == 'POST': form = forms.StartNewConversationFromProfile(request.POST) if form.is_valid(): new_conversation = Conversation( subject=form.cleaned_data['subject'], initiator=request.user, recipent=recipent) new_conversation.save() first_message = Message(coversation=new_conversation, sender=request.user, receiver=recipent, content=form.cleaned_data['message']) first_message.save() return redirect('conversations:conversation_panel', conversation_pk=new_conversation.pk) else: # TODO add error page print('error creating conversation - need to have page here') elif request.method == 'GET': form = forms.StartNewConversationFromProfile() return render(request, 'conversations/start_new_conversation.html', context={ 'recipent': recipent, 'form': form })
def conversation_view(request, conversation_pk): conversation = Conversation.objects.get(pk=conversation_pk) if request.method == 'POST': user = request.user addressee = conversation.recipent if conversation.initiator == user else conversation.initiator form = forms.ReplyToConversation(request.POST) if form.is_valid(): reply = Message(conversation=conversation, sender=user, receiver=addressee, content=form.cleaned_data['message']) reply.save() return redirect('conversations:conversation_page', conversation_pk=conversation_pk) else: # TODO add error page print('error replying - need to have page here') elif request.method == 'GET': form = forms.ReplyToConversation() messages = Message.objects.filter(conversation=conversation) return render(request, 'conversations/conversation_page.html', context={ 'conversation': conversation, 'messages': messages, 'form': form })
def test_that_messages_can_be_deleted(self): """Tests that messages can be deleted """ message = Message(**self.msg_stub) message.save() self.assertIsNotNone(message.id) message.delete() self.assertIsNone(message.id)
def test_that_messages_can_be_read(self): """Tests that messages can be read """ message = Message(**self.msg_stub) message.save() self.assertIsNotNone(message.id) message = Message.objects.latest('sent_at') self.assertEqual(message.subject, self.msg_stub['subject'])
def test_that_messages_can_be_replied_to(self): """Tests that messages can be replied to. """ message = Message(**self.msg_stub) message.save() self.assertIsNotNone(message.id) self.msg_stub['parent_msg'] = message reply_msg = Message(**self.msg_stub) reply_msg.save() self.assertIsNotNone(reply_msg.id) self.assertEqual(reply_msg.parent_msg, self.msg_stub['parent_msg'])
def post(self, request, *args, **kwargs): """Dispatch message to start a new conversation""" recipient_username = request.POST.get('recipient') or 'admin' recipient = User.objects.get(username=recipient_username) payload = { 'subject': request.POST.get('subject'), 'sender': User.objects.get(username=request.user.username), 'body': request.POST.get('body'), 'recipient': recipient, } # create new message payload mesg = Message(**payload) mesg.sent_at = timezone.now() mesg.save() alert.add_message( request, alert.SUCCESS, 'New conversation started with {}.'.format(recipient.username)) return redirect(reverse('message', kwargs={'m_id': mesg.id}))
def post(self, request, m_id): """Dispatch a reply to a conversation""" recipient_username = request.POST.get('recipient') or 'admin' recipient = User.objects.get(username=recipient_username) parent_msg_id = request.POST.get('parent_msg') message = Message.objects.get(id=int(parent_msg_id)) message.replied_at = timezone.now() message.save() # update replied at parent_msg_id = Message.objects.get(id=m_id) payload = { 'sender': User.objects.get(username=request.user.username), 'parent_msg': message, 'body': request.POST.get('body'), 'recipient': recipient, } # create reply payload reply = Message(**payload) reply.sent_at = timezone.now() reply.save() alert.add_message(request, alert.SUCCESS, 'Message sent successfully.') return redirect(reverse('message', kwargs={'m_id': message.id}))
# Usage: # python manage.py makemigrations # python manage.py migrate # python manage.py < populateDatabase.py from conversations.models import Message m = Message(text="This was a triumph", user_id=1) m.save() m2 = Message(text="I'm making a note here…", parent=m, user_id=1) m2.save() m3 = Message(text="Huge success", parent=m, user_id=1) m3.save() m4 = Message(text="It's hard to overstate my satisfaction", parent=m2, user_id=1) m4.save()
user2.first_name = "Clara" user2.last_name = "Nees" user2.save() user3 = User.objects.create_user('joe', '*****@*****.**', 'joepassword') user3.first_name = "Joe" user3.last_name = "Pohlman" user3.save() user4 = User.objects.create_user('brendan', '*****@*****.**', 'brendanpassword') user4.first_name = "Brendan" user4.last_name = "Killalea" user4.save() b1 = Message(topic="Book Club", text="What should we read this month?", user=user1) b1.save() b2 = Message(text="Sci-fi!", parent=b1, user=u) b2.save() b3 = Message(text="Eh, how about something angsty with more symbolism than plot and an unsatisfactory ending?", parent=b2, user=user2) b3.save() b4 = Message(text="Ooh, fun! Misery is the best! Let's read something by Steinbeck!", parent=b3, user=user3) b4.save() b5 = Message(text="War and Peace!", parent=b3, user=user3) b5.save() b6 = Message(text="Staaaaaahhhhhhhp.", parent=b3, user=u) b6.save() b7 = Message(text="Dictionary, by Daniel Webster", parent=b1, user=user4) b7.save() b8 = Message(text="Diccionario de la lengua española - Edición del Tricentenario", parent=b7, user=user3) b8.save() b9 = Message(text="Even better", parent=b8, user=user4)
user2 = User.objects.create_user('clara', '*****@*****.**', 'clarapassword') user2.first_name = "Clara" user2.last_name = "Ness" user2.save() user3 = User.objects.create_user('joe', '*****@*****.**', 'joepassword') user3.first_name = "Joe" user3.last_name = "Pohlman" user3.save() user4 = User.objects.create_user('brendan', '*****@*****.**', 'brendanpassword') user4.first_name = "Brendan" user4.last_name = "Killalea" user4.save() # Add some messages m1 = Message(text="ROOT 1", user=user1) m1.save() m2 = Message(text="1st CHILD OF ROOT 1", user=user2, parent=m1) m2.save() m3 = Message(text="2nd CHILD OF ROOT 1", user=user1, parent=m1) m3.save() m4 = Message(text="A descendant of root 1", user=user1, parent=m2) m4.save() m5 = Message(text="Another descendant of root 1", user=user2, parent=m3) m5.save() m6 = Message(text="Yet another descendant of root 1", user=user2, parent=m2) m6.save() m7 = Message(text="ROOT2", user=user4) m7.save()
user2.first_name = "Clara" user2.last_name = "Nees" user2.save() user3 = User.objects.create_user('joe', '*****@*****.**', 'joepassword') user3.first_name = "Joe" user3.last_name = "Pohlman" user3.save() user4 = User.objects.create_user('brendan', '*****@*****.**', 'brendanpassword') user4.first_name = "Brendan" user4.last_name = "Killalea" user4.save() n1 = Message(topic="Good Nerf Guns?", text="I'm looking for some advice on dart based ballistics.", user=user1) n1.save() n2 = Message(user=user2, parent=n1, text="Dude, totally depends on what you're using for? We looking for a casual game of sissy darts or you wanna deal some real dammage?") n2.save() n3 = Message(user=user3, parent=n1, text="Maverick all the way") n3.save() n4 = Message(user=user1, parent=n2, text="There's this academic researcher that needs to be put in his place, I'm looking to bring the pain!") n4.save() n5 = Message(user=user2, parent=n4, text="The RapidStrike CS-18 is gonna be the best choice for you, you nefarious guy you.") n5.save() n6 = Message(user=user1, parent=n5, text="Nice! He'll never see it coming!.") n6.save() n7 = Message(user=user4, parent=n4, text="Lol, you should just hack his website or something. The duck flies at midnight, amiright!?") n7.save() n7 = Message(user=user3, parent=n4, text="Hey man, be careful whatever you do. You'd be surprised at how easy it is to track someones actions even if they try to delete their search histories and flee the country.") n7.save() n8 = Message(user=user4, parent=n1, text="Why not just go all out and get an airsoft gun?")