You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

72 lines
2.4 KiB

from django.contrib.auth.decorators import login_required
from django.contrib.gis.shortcuts import render_to_text
from django.core.exceptions import PermissionDenied
from django.utils.translation import ugettext_lazy as _
from django.contrib import messages
from django.shortcuts import render, redirect, get_object_or_404
from mydefs import pag_mn
from .models import Conversation, MessageError, Message
from .forms import ConversationForm, MessageForm
@login_required
def home(request):
# TODO: optimise queries
conversations = Conversation.objects.fetch(request.user)
conversations = pag_mn(request, conversations, 8)
return render(request, 'msg_app/conversations.html', {
'conversations': conversations
})
@login_required
def new_conversation(request):
try:
frm = ConversationForm(request.POST or None)
if request.method == 'POST':
if frm.is_valid():
conv = frm.create(request.user)
messages.success(request, _('Conversation has been created'))
return redirect('msg_app:to_conversation', conv.pk)
else:
messages.error(request, _('fix form errors'))
else:
return render_to_text('msg_app/modal_new_conversation.html', {
'form': frm
}, request=request)
except MessageError as e:
messages.error(request, e)
return redirect('msg_app:home')
@login_required
def to_conversation(request, conv_id):
conv = get_object_or_404(Conversation, pk=conv_id)
try:
if request.method == 'POST':
frm = MessageForm(request.POST, request.FILES)
if frm.is_valid():
frm.create(conv, request.user)
else:
messages.error(request, _('fix form errors'))
else:
conv.make_messages_status_old(request.user)
msg_list = conv.get_messages()
return render(request, 'msg_app/chat.html', {
'conv': conv,
'msg_list': msg_list
})
except MessageError as e:
messages.error(request, e)
return redirect('msg_app:home')
@login_required
def remove_msg(request, conv_id, msg_id):
msg = get_object_or_404(Message, pk=msg_id)
if msg.author != request.user:
raise PermissionDenied
conversation_id = msg.conversation.pk
msg.delete()
return redirect('msg_app:to_conversation', conversation_id)