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_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 conversation_msgs(conversation, user, admin_user): message = Message(user_id=user.id, conversation_id=conversation.id, message="First message") conversation.save(message=message) message = Message(user_id=admin_user.id, conversation_id=conversation.id, message="Second message") conversation.save(message=message) return conversation
def test_last_message(conversation_msgs, user): conversation = conversation_msgs assert conversation.last_message.message == "Second message" message = Message(user_id=user.id, message="Third message") conversation.save(message=message) assert conversation.last_message.message != "Second message"
def test_conversation_save(conversation): """ also tests message.save() since we must create a message to save """ message = Message(user_id=conversation.user_id, conversation_id=conversation.id, message="Hello World") conversation.save(message=message) assert conversation.shared_id is not None
def process_template_response(self, request, response): if request.path.startswith('/api/'): context_data = {'unread_mesg_count': 0} response.context_data = context_data return response else: context_data = {'unread_mesg_count': Message.unread_count(request)} response.context_data.update(context_data) return response
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 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 get(self, request, *args, **kwargs): # define the base breadcrumbs for this view: context = { 'breadcrumbs': [ { 'name': 'My Account', 'url': reverse('account') }, { 'name': 'Merchant', 'url': reverse('account_merchant') }, { 'name': 'Confirm Merchant', }, ] } try: if request.user.profile.merchant: if (not Message.confirmation_sent(request.user)): # send message to admin that a merchant has been enabled body = """%s %s just verified his phone number. He is awaiting approval for his request to become a merchant.""" % (request.user.first_name, request.user.last_name) Message.send('Account', 'Merchant Approval', body, request.user) mesg = """A message has been sent to the admin with your application to become a merchant.""" messages.add_message(request, messages.INFO, mesg) return TemplateResponse(request, self.template_name, context) except AttributeError: return redirect(reverse('account_profile'))
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 = User.objects.create_user('clara', '*****@*****.**', 'clarapassword') 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()
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 = User.objects.create_user('clara', '*****@*****.**', 'clarapassword') 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()