Sith/core/views/site.py

88 lines
3.1 KiB
Python
Raw Normal View History

2015-11-24 15:09:46 +00:00
from django.shortcuts import render, redirect, get_object_or_404
from django.db import models
2016-08-19 00:53:44 +00:00
from django.http import JsonResponse
from django.core import serializers
from django.db.models import Q
from django.contrib.auth.decorators import login_required
2016-12-09 23:06:17 +00:00
from django.views.generic import ListView
2015-11-24 15:09:46 +00:00
2016-08-10 03:48:06 +00:00
import os
2016-08-19 00:53:44 +00:00
import json
from itertools import chain
2016-12-08 18:47:28 +00:00
from core.models import User, Notification
2016-08-19 00:53:44 +00:00
from club.models import Club
2016-08-10 03:48:06 +00:00
2015-11-24 15:09:46 +00:00
def index(request, context=None):
2016-08-19 00:53:44 +00:00
return render(request, "core/index.jinja")
2016-12-09 23:06:17 +00:00
class NotificationList(ListView):
model = Notification
template_name = "core/notification_list.jinja"
def get_queryset(self):
return self.request.user.notifications.order_by('-id')[:20]
2016-12-08 18:47:28 +00:00
def notification(request, notif_id):
notif = Notification.objects.filter(id=notif_id).first()
if notif:
2016-12-09 23:06:17 +00:00
notif.viewed = True
notif.save()
2016-12-08 18:47:28 +00:00
return redirect(notif.url)
return redirect("/")
def search_user(query, as_json=False):
users = []
2016-08-19 00:53:44 +00:00
if query:
2016-08-19 01:12:20 +00:00
exact_nick = User.objects.filter(nick_name__iexact=query).all()
nicks = User.objects.filter(nick_name__icontains=query).exclude(id__in=exact_nick).all()
users = User.objects.filter(Q(first_name__icontains=query) |
Q(last_name__icontains=query)).exclude(id__in=exact_nick).exclude(id__in=nicks).all()
2016-08-19 00:53:44 +00:00
nicks = nicks[:5]
2016-12-08 14:30:41 +00:00
users = users[:50]
2016-08-19 00:53:44 +00:00
if as_json: # Re-loads json to avoid double encoding by JsonResponse, but still benefit from serializers
2016-08-19 01:12:20 +00:00
exact_nick = json.loads(serializers.serialize('json', exact_nick, fields=('nick_name', 'last_name', 'first_name', 'profile_pict')))
2016-08-19 00:53:44 +00:00
nicks = json.loads(serializers.serialize('json', nicks, fields=('nick_name', 'last_name', 'first_name', 'profile_pict')))
users = json.loads(serializers.serialize('json', users, fields=('nick_name', 'last_name', 'first_name', 'profile_pict')))
else:
2016-08-19 01:12:20 +00:00
exact_nick = list(exact_nick)
nicks = list(nicks)
users = list(users)
users = exact_nick + nicks + users
return users
def search_club(query, as_json=False):
clubs = []
if query:
clubs = Club.objects.filter(name__icontains=query).all()
clubs = clubs[:5]
if as_json: # Re-loads json to avoid double encoding by JsonResponse, but still benefit from serializers
clubs = json.loads(serializers.serialize('json', clubs, fields=('name')))
else:
2016-08-19 01:12:20 +00:00
clubs = list(clubs)
return clubs
2016-08-19 00:53:44 +00:00
@login_required
def search_view(request):
result = {
'users': search_user(request.GET.get('query', '')),
'clubs': search_club(request.GET.get('query', '')),
}
return render(request, "core/search.jinja", context={'result': result})
@login_required
def search_user_json(request):
result = {
'users': search_user(request.GET.get('query', ''), True),
}
return JsonResponse(result)
2016-08-19 00:53:44 +00:00
@login_required
def search_json(request):
result = {
'users': search_user(request.GET.get('query', ''), True),
'clubs': search_club(request.GET.get('query', ''), True),
}
return JsonResponse(result)
2015-11-24 15:09:46 +00:00