mirror of
https://github.com/ae-utbm/sith.git
synced 2026-09-01 10:09:17 +00:00
Quand un utilisateur possède une whitelist d'utilisateurs, qu'il effectue une recherche et qu'il apparait dans les résultats, son profil apparait plusieurs fois.
72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
#
|
|
# Copyright 2016,2017
|
|
# - Skia <skia@libskia.so>
|
|
# - Sli <antoine@bartuccio.fr>
|
|
#
|
|
# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM,
|
|
# http://ae.utbm.fr.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify it under
|
|
# the terms of the GNU General Public License a published by the Free Software
|
|
# Foundation; either version 3 of the License, or (at your option) any later
|
|
# version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
# details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along with
|
|
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
# Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
#
|
|
#
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.db.models import F
|
|
from django.db.models.query import QuerySet
|
|
from django.http import HttpRequest
|
|
from django.shortcuts import get_object_or_404, redirect
|
|
from django.views.generic import ListView, TemplateView
|
|
|
|
from club.models import Club
|
|
from core.models import Notification, User
|
|
from core.schemas import UserFilterSchema
|
|
|
|
|
|
class NotificationList(LoginRequiredMixin, ListView):
|
|
model = Notification
|
|
template_name = "core/notification_list.jinja"
|
|
|
|
def get_queryset(self) -> QuerySet[Notification]:
|
|
if "see_all" in self.request.GET:
|
|
self.request.user.notifications.filter(viewed=False).update(viewed=True)
|
|
return self.request.user.notifications.order_by("-date")[:20]
|
|
|
|
|
|
def notification(request: HttpRequest, notif_id: int):
|
|
notif = get_object_or_404(Notification, id=notif_id)
|
|
if notif.type not in settings.SITH_PERMANENT_NOTIFICATIONS:
|
|
notif.viewed = True
|
|
else:
|
|
notif.callback()
|
|
notif.save()
|
|
return redirect(notif.url)
|
|
|
|
|
|
class SearchView(LoginRequiredMixin, TemplateView):
|
|
template_name = "core/search.jinja"
|
|
|
|
def get_context_data(self, **kwargs):
|
|
users, clubs = [], []
|
|
if query := self.request.GET.get("query"):
|
|
users = list(
|
|
UserFilterSchema(search=query)
|
|
.filter(User.objects.viewable_by(self.request.user))
|
|
.order_by(F("last_login").desc(nulls_last=True))
|
|
.distinct()
|
|
)
|
|
clubs = list(Club.objects.filter(name__icontains=query)[:5])
|
|
return super().get_context_data(**kwargs) | {"users": users, "clubs": clubs}
|