mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-09 19:40:19 +00:00
Add basic search bar
This commit is contained in:
@ -1,11 +1,46 @@
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.db import models
|
||||
from django.http import JsonResponse
|
||||
from django.core import serializers
|
||||
from django.db.models import Q
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
import os
|
||||
import json
|
||||
from itertools import chain
|
||||
|
||||
from core.models import User
|
||||
from club.models import Club
|
||||
|
||||
def index(request, context=None):
|
||||
if context == None:
|
||||
return render(request, "core/index.jinja", {'title': 'Bienvenue!'})
|
||||
else:
|
||||
return render(request, "core/index.jinja", context)
|
||||
return render(request, "core/index.jinja")
|
||||
|
||||
def search(query, as_json=False):
|
||||
result = {'users': None, 'clubs': None}
|
||||
if query:
|
||||
nicks = User.objects.filter(nick_name__icontains=query).all()
|
||||
users = User.objects.filter(Q(first_name__icontains=query) | Q(last_name__icontains=query)).all()
|
||||
clubs = Club.objects.filter(name__icontains=query).all()
|
||||
nicks = nicks[:5]
|
||||
users = users[:5]
|
||||
clubs = clubs[:5]
|
||||
if as_json: # Re-loads json to avoid double encoding by JsonResponse, but still benefit from serializers
|
||||
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')))
|
||||
clubs = json.loads(serializers.serialize('json', clubs, fields=('name')))
|
||||
else:
|
||||
nicks = list(nicks.all())
|
||||
users = list(users.all())
|
||||
clubs = list(clubs.all())
|
||||
result['users'] = nicks + users
|
||||
result['clubs'] = clubs
|
||||
return result
|
||||
|
||||
@login_required
|
||||
def search_view(request):
|
||||
return render(request, "core/search.jinja", context={'result': search(request.GET.get('query', ''))})
|
||||
|
||||
@login_required
|
||||
def search_json(request):
|
||||
return JsonResponse(search(request.GET.get('query', ''), True))
|
||||
|
||||
|
@ -134,7 +134,14 @@ class UserStatsView(CanViewMixin, DetailView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
kwargs = super(UserStatsView, self).get_context_data(**kwargs)
|
||||
kwargs['total_time'] = sum([p.end-p.start for p in self.object.permanencies.all()], timedelta())
|
||||
from counter.models import Counter
|
||||
foyer = Counter.objects.filter(name="Foyer").first()
|
||||
mde = Counter.objects.filter(name="MDE").first()
|
||||
gommette = Counter.objects.filter(name="La Gommette").first()
|
||||
kwargs['total_perm_time'] = sum([p.end-p.start for p in self.object.permanencies.all()], timedelta())
|
||||
kwargs['total_foyer_time'] = sum([p.end-p.start for p in self.object.permanencies.filter(counter=foyer)], timedelta())
|
||||
kwargs['total_mde_time'] = sum([p.end-p.start for p in self.object.permanencies.filter(counter=mde)], timedelta())
|
||||
kwargs['total_gommette_time'] = sum([p.end-p.start for p in self.object.permanencies.filter(counter=gommette)], timedelta())
|
||||
return kwargs
|
||||
|
||||
class UserMiniView(CanViewMixin, DetailView):
|
||||
|
Reference in New Issue
Block a user