Sith/core/views/site.py

136 lines
4.2 KiB
Python
Raw Normal View History

# -*- coding:utf-8 -*
#
# Copyright 2016,2017
# - Skia <skia@libskia.so>
#
# 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 Sofware Foundation, Inc., 59 Temple
# Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
2017-06-12 07:42:03 +00:00
from django.shortcuts import render, redirect
2016-08-19 00:53:44 +00:00
from django.http import JsonResponse
from django.core import serializers
from django.contrib.auth.decorators import login_required
2017-05-14 01:14:38 +00:00
from django.views.generic import ListView, TemplateView
from django.conf import settings
2015-11-24 15:09:46 +00:00
2016-08-19 00:53:44 +00:00
import json
2016-12-19 20:00:09 +00:00
from haystack.query import SearchQuerySet
2016-12-08 18:47:28 +00:00
from core.models import User, Notification
from core.utils import doku_to_markdown, bbcode_to_markdown
2016-08-19 00:53:44 +00:00
from club.models import Club
2016-08-10 03:48:06 +00:00
2017-06-12 07:42:03 +00:00
2015-11-24 15:09:46 +00:00
def index(request, context=None):
if request.user.is_authenticated():
from com.views import NewsListView
return NewsListView.as_view()(request)
2016-08-19 00:53:44 +00:00
return render(request, "core/index.jinja")
2017-06-12 07:42:03 +00:00
2016-12-09 23:06:17 +00:00
class NotificationList(ListView):
model = Notification
template_name = "core/notification_list.jinja"
def get_queryset(self):
2016-12-13 16:53:44 +00:00
if 'see_all' in self.request.GET.keys():
for n in self.request.user.notifications.all():
n.viewed = True
n.save()
return self.request.user.notifications.order_by('-date')[:20]
2016-12-09 23:06:17 +00:00
2017-06-12 07:42:03 +00:00
2016-12-08 18:47:28 +00:00
def notification(request, notif_id):
notif = Notification.objects.filter(id=notif_id).first()
if notif:
if notif.type not in settings.SITH_PERMANENT_NOTIFICATIONS:
notif.viewed = True
else:
notif.callback()
notif.save()
2016-12-08 18:47:28 +00:00
return redirect(notif.url)
return redirect("/")
2017-06-12 07:42:03 +00:00
def search_user(query, as_json=False):
2016-12-19 20:00:09 +00:00
res = SearchQuerySet().models(User).filter(text=query).filter_or(text__contains=query)[:20]
return [r.object for r in res]
2017-06-12 07:42:03 +00:00
def search_club(query, as_json=False):
clubs = []
if query:
clubs = Club.objects.filter(name__icontains=query).all()
clubs = clubs[:5]
2017-06-12 07:42:03 +00:00
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
2017-06-12 07:42:03 +00:00
2016-08-19 00:53:44 +00:00
@login_required
def search_view(request):
result = {
2017-06-12 07:42:03 +00:00
'users': search_user(request.GET.get('query', '')),
'clubs': search_club(request.GET.get('query', '')),
}
return render(request, "core/search.jinja", context={'result': result})
2017-06-12 07:42:03 +00:00
@login_required
def search_user_json(request):
result = {
2017-06-12 07:42:03 +00:00
'users': search_user(request.GET.get('query', ''), True),
}
return JsonResponse(result)
2016-08-19 00:53:44 +00:00
2017-06-12 07:42:03 +00:00
2016-08-19 00:53:44 +00:00
@login_required
def search_json(request):
result = {
2017-06-12 07:42:03 +00:00
'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
2017-06-12 07:42:03 +00:00
class ToMarkdownView(TemplateView):
template_name = "core/to_markdown.jinja"
2017-05-14 01:14:38 +00:00
def post(self, request, *args, **kwargs):
self.text = request.POST['text']
if request.POST['syntax'] == "doku":
self.text_md = doku_to_markdown(self.text)
else:
self.text_md = bbcode_to_markdown(self.text)
2017-05-14 01:14:38 +00:00
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
def get_context_data(self, **kwargs):
kwargs = super(ToMarkdownView, self).get_context_data(**kwargs)
2017-05-14 01:14:38 +00:00
try:
kwargs['text'] = self.text
kwargs['text_md'] = self.text_md
except:
kwargs['text'] = ""
kwargs['text_md'] = ""
return kwargs