Example #1
0
    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

        })
Example #2
0
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
    })
Example #3
0
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)
Example #4
0
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))
Example #5
0
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')
Example #6
0
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')
Example #7
0
 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,
     })
Example #8
0
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)
Example #9
0
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)
Example #10
0
        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))