def get(self, request): user = request.user messaged_users = user.sent_messages.all().values('receiver').distinct() message_chats = [] for receiver in messaged_users: messages_sent = user.sent_messages.filter( receiver=receiver["receiver"]) messages_received = user.received_messages.filter( sender=receiver["receiver"]) messages = messages_sent | messages_received messages = messages.order_by("timestamp") message_logs = [obj.as_dict() for obj in messages] receiver_django = User.objects.get(pk=receiver["receiver"]) message_chats.append({ "participant": { "pk": receiver["receiver"], "name": receiver_django.first_name + " " + receiver_django.last_name }, "messages": message_logs }) print(message_chats) return render(request, 'audition_management/messages.html', { 'user': user, 'data': message_chats })
def load_messages(request, talk): context = { 'request': request, } user = request.user favorites = request.GET.get('favorite', False) mines = request.GET.get('mine', False) showing = request.GET.get('showing', '') n_views = 0 if not favorites: if mines: messages = TalkMessages.objects.filter(talk__id=talk, user=user) else: messages = TalkMessages.objects.filter(talk__id=talk) else: if mines: messages = TalkMessages.objects.filter( talk__id=talk, chat_favorites_message__isnull=False, chat_favorites_message__user=user, user=user) else: messages = TalkMessages.objects.filter( talk__id=talk, chat_favorites_message__isnull=False, chat_favorites_message__user=user) if showing: #Exclude ajax creation messages results showing = showing.split(',') messages = messages.exclude(id__in=showing) has_page = request.GET.get('page', None) paginator = Paginator(messages.order_by("-create_date"), 20) try: page_number = int(request.GET.get('page', 1)) except ValueError: raise Http404 try: page_obj = paginator.page(page_number) except EmptyPage: raise Http404 context['messages'] = page_obj.object_list response = render_to_string("chat/_list_messages.html", context, request) return JsonResponse({ "messages": response, "count": messages.count(), "num_pages": paginator.num_pages, "num_page": page_obj.number })
def message_page(request, piggie_id): piggieOne = User.objects.get(id=request.session['user_id']) piggieTwo = User.objects.get(id=piggie_id) messages = Message.objects.filter( sender=piggieOne, receiver=piggieTwo) | Message.objects.filter( sender=piggieTwo, receiver=piggieOne) ordered_message = messages.order_by("created_at") context = { "piggieOne": User.objects.get(id=request.session['user_id']), "piggieTwo": User.objects.get(id=piggie_id), "messages": ordered_message } return render(request, 'pigginderapp/message_page.html', context)
def latest_notification(request): try: time_threshold = datetime.now() - timedelta(seconds=30) messages = Notification.objects.filter(date_posted__gt=time_threshold) messages = messages.filter(user=request.user) messages = messages.order_by('date_posted') messages = serializers.serialize('json', messages) msg_count = Notification.objects.filter(user=request.user, read=False).count() # print(unread_msg_count) response = {'messages': messages, 'msg_count': msg_count} except: response = serializers.serialize('json', []) return HttpResponse(json.dumps(response))
def chat_messages(request, pk): if request.user.is_authenticated: try: touser = User.objects.get(id=pk) messages = Messages.objects.filter( Q(msg_from=request.user, msg_to=touser) | Q(msg_from=touser, msg_to=request.user)) messages = messages.order_by('date_postdate') response = serializers.serialize('json', messages) except: response = serializers.serialize('json', []) return HttpResponse(response, content_type='application/json') else: response = serializers.serialize('json', {}) return HttpResponse(response, content_type='application/json')
def latest_chat_messages(request, pk): if request.user.is_authenticated: try: touser = User.objects.get(id=pk) time_threshold = datetime.now() - timedelta(minutes=1) messages = Messages.objects.filter( date_postdate__gt=time_threshold) messages = messages.filter( Q(msg_from=request.user, msg_to=touser) | Q(msg_from=touser, msg_to=request.user)) messages = messages.order_by('date_postdate') response = serializers.serialize('json', messages) except: response = serializers.serialize('json', []) return HttpResponse(response, content_type='application/json') else: response = serializers.serialize('json', {}) return HttpResponse(response, content_type='application/json')
def get(self, request): user = request.user messaged_users = user.sent_messages.all().values('receiver').distinct() message_chats = [] for receiver in messaged_users: messages_sent = user.sent_messages.filter( receiver=receiver["receiver"]) messages_received = user.received_messages.filter( sender=receiver["receiver"]) messages = messages_sent | messages_received messages = messages.order_by("timestamp") message_logs = [obj.as_dict() for obj in messages] receiver_django = User.objects.get(pk=receiver["receiver"]) message_chats.append({ "participant": { "pk": receiver["receiver"], "name": receiver_django.first_name + " " + receiver_django.last_name }, "messages": json.dumps(message_logs) }) for messenger in user.received_messages.all().values('sender').distinct(): count = user.sent_messages.filter(receiver=messenger['sender']).count() print("{}".format(count)) if user.sent_messages.filter(receiver=messenger['sender']).count() > 0: continue messages_received = user.received_messages.filter(sender=messenger['sender']) messages_received = messages_received.order_by("timestamp") message_logs = [obj.as_dict() for obj in messages_received] messenger_django = User.objects.get(pk=messenger["sender"]) message_chats.append({ "participant": { "pk": messenger['sender'], "name": messenger_django.first_name + " " + messenger_django.last_name }, "messages": json.dumps(message_logs) }) return JsonResponse({ "data": message_chats, })
def student(request): """ Render the student homepage. Gets a few projects to display as a sample, and any messages / notifications for the student """ try: Section.objects.get(students__id=request.user.id) except ObjectDoesNotExist: return HttpResponseRedirect("/joinsection/") projects = Project.objects.filter(is_approved=True) messages = Message.objects.filter(recipient__id=request.user.id) notifications = Notification.objects.filter(recipient__id=request.user.id) context = { "projects": projects.order_by('-id')[:2], "projects_count": projects.count, "messages": messages.order_by('-id')[:1], "messages_count": messages.count, "notifications": notifications.order_by('-id')[:1], "notifications_count": notifications.count } return render(request, "student.html", context)
def instructor(request): """ Get all the information from the database to display an instructor's homepage (messages, notifications, bids etc.) and then render the page """ messages = Message.objects.filter(recipient__id=request.user.id) bids = Bid.objects.all() notifications = Notification.objects.filter(recipient__id=request.user.id) projs_to_approve = Project.objects.filter(is_approved=False) sections = Section.objects.all() context = { "notifications": notifications.order_by('-id')[:1], "notifications_count": notifications.count, "messages": messages.order_by('-id')[:1], "messages_count": messages.count, "bids": bids.order_by('-id')[:1], "bids_count": bids.count, "projects_to_approve": projs_to_approve.order_by('-id')[:1], "projects_count": projs_to_approve.count } return render(request, "instructor.html", context)
form, "private_messages/message_form.html", ) @login_required @community_required def inbox_view(request): messages = (Message.objects.for_community( community=request.community).with_has_bookmarked( request.user).for_recipient(request.user).exclude_blocked( request.user).common_select_related()) if search := request.GET.get("q"): messages = messages.search(search).order_by("-rank", "-created") else: messages = messages.order_by( F("read").desc(nulls_first=True), "-created") return render_paginated_queryset( request, messages, "private_messages/inbox.html", {"search": search}, ) @login_required @community_required def outbox_view(request): messages = (Message.objects.for_community( community=request.community).with_has_bookmarked( request.user).for_sender(request.user).exclude_blocked(
def admin_chat(request): """ A view to handle chat update requests via AJAX and render the staff chat page. Chat messages are pre-rendered for both standard and AJAX requests. """ curr_hunt = Hunt.objects.get(is_current_hunt=True) if request.method == 'POST': # We can trust all post parameters because user is already authenticated as staff if (request.POST.get('team_pk') == ""): return HttpResponse(status=400) if (request.POST.get("is_announcement") == "true"): messages = [] for team in curr_hunt.real_teams.all(): m = Message.objects.create( time=timezone.now(), text="[Announcement] " + request.POST.get('message'), is_response=(request.POST.get('is_response') == "true"), team=team) messages.append(m) else: team = Team.objects.get(pk=request.POST.get('team_pk')) m = Message.objects.create( time=timezone.now(), text=request.POST.get('message'), is_response=(request.POST.get('is_response') == "true"), team=team) team.num_waiting_messages = team.num_waiting_messages + 1 team.save() messages = [m] else: if request.is_ajax(): messages = Message.objects.filter( pk__gt=request.GET.get("last_pk")) else: messages = Message.objects.filter(team__hunt=curr_hunt) messages = messages.order_by('team', 'time').select_related('team') # This block assumes messages are grouped by team team_name = "" message_dict = {} for message in messages: if message.team.team_name != team_name: team_name = message.team.team_name message_dict[team_name] = {'pk': message.team.pk, 'messages': []} message_dict[team_name]['messages'].append(message) for team in message_dict: message_dict[team]['messages'] = render_to_string( 'chat_messages.html', { 'messages': message_dict[team]['messages'], 'team_name': team }) try: last_pk = Message.objects.latest('id').id except Message.DoesNotExist: last_pk = 0 context = {'message_dict': message_dict, 'last_pk': last_pk} if request.is_ajax() or request.method == 'POST': return HttpResponse(json.dumps(context)) else: teams = curr_hunt.team_set.order_by(Lower("team_name")).all() context['teams'] = teams return render(request, 'staff_chat.html', add_apps_to_context(context, request))