Add Wagtail CMS for kfet app.

K-Fêt
- Integrate wagtail to serve "static" pages of old K-Fêt website
- Fixture "kfetcms/kfet_wagtail_17_05" contains a copy of old website
(as in May 2017).
- Media files can be got until end of June 17 at
http://partage.eleves.ens.fr//files/604e6dea2ceebc66b1936c6b3f911744/kfet_media.tar.gz

Login/logout
- Update package django_cas_ng to last version.
- Clean COFCASBackend.
- Change CAS version to 3 (version used on eleves.ens). This enables
the logout redirection (for CAS ofc).
- Add messages and clean existing ones on login/logout (for both
outsider and cas users).

Misc
- Update settings to bypass an incompability between debug-toolbar and
wagtailmenus packages.
- Better management of dev/test-specific urls (if debug-toolbar wasn't in
INSTALLED_APPS, media files were not served).
- UI improvements.
This commit is contained in:
Aurélien Delobelle 2017-05-30 20:44:30 +02:00
parent b13e992a30
commit 8c6d56b27c
67 changed files with 3038 additions and 618 deletions

View file

@ -23,6 +23,9 @@ from django.db.models.functions import Coalesce
from django.utils import timezone
from django.utils.crypto import get_random_string
from django.utils.decorators import method_decorator
from django_cas_ng.views import logout as cas_logout_view
from gestioncof.models import CofProfile
from kfet.config import kfet_config
@ -47,48 +50,21 @@ from collections import defaultdict
from kfet import consumers
from datetime import timedelta
from decimal import Decimal
import django_cas_ng
import heapq
import statistics
from kfet.statistic import ScaleMixin, last_stats_manifest, tot_ventes, WeekScale
class Home(TemplateView):
template_name = "kfet/home.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
articles = list(
Article.objects
.filter(is_sold=True, hidden=False)
.select_related('category')
.order_by('category__name')
)
pressions, others = [], []
while len(articles) > 0:
article = articles.pop()
if article.category.name == 'Pression':
pressions.append(article)
else:
others.append(article)
context['pressions'], context['articles'] = pressions, others
return context
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(TemplateView, self).dispatch(*args, **kwargs)
@teamkfet_required
def login_genericteam(request):
# Check si besoin de déconnecter l'utilisateur de CAS
profile, _ = CofProfile.objects.get_or_create(user=request.user)
need_cas_logout = False
if profile.login_clipper:
need_cas_logout = True
profile = getattr(request.user, 'profile', None)
cas_logout = None
if profile and profile.login_clipper:
# Récupèration de la vue de déconnexion de CAS
# Ici, car request sera modifié après
logout_cas = django_cas_ng.views.logout(request)
next_page = request.META.get('HTTP_REFERER', None)
cas_logout = cas_logout_view(request, next_page=next_page)
# Authentification du compte générique
token = GenericTeamToken.objects.create(token=get_random_string(50))
@ -97,11 +73,8 @@ def login_genericteam(request):
messages.success(request, "Connecté en utilisateur partagé")
if need_cas_logout:
# Vue de déconnexion de CAS
return logout_cas
return cas_logout or render(request, "kfet/login_genericteam.html")
return render(request, "kfet/login_genericteam.html")
def put_cleaned_data_in_dict(dict, form):
for field in form.cleaned_data:
@ -368,8 +341,9 @@ def account_read(request, trigramme):
account = get_object_or_404(Account, trigramme=trigramme)
# Checking permissions
if not request.user.has_perm('kfet.is_team') \
and request.user != account.user:
if not account.readable or (
not request.user.has_perm('kfet.is_team') and
request.user != account.user):
raise PermissionDenied
addcosts = (
@ -2056,6 +2030,7 @@ def order_to_inventory(request, pk):
messages.success(request, "C'est tout bon !")
return redirect('kfet.order')
else:
print(formset.errors)
messages.error(request, "Corrigez les erreurs")
else:
formset = cls_formset(initial=initial)
@ -2324,7 +2299,7 @@ class AccountStatBalance(PkUrlMixin, JSONDetailView):
)
context['charts'] = [{
"color": "rgb(255, 99, 132)",
"color": "rgb(200, 20, 60)",
"label": "Balance",
"values": changes,
}]
@ -2419,7 +2394,7 @@ class AccountStatOperation(ScaleMixin, PkUrlMixin, JSONDetailView):
ventes = sum(ope['article_nb'] for ope in chunk)
nb_ventes.append(ventes)
context['charts'] = [{"color": "rgb(255, 99, 132)",
context['charts'] = [{"color": "rgb(200, 20, 60)",
"label": "NB items achetés",
"values": nb_ventes}]
return context
@ -2501,7 +2476,7 @@ class ArticleStatSales(ScaleMixin, JSONDetailView):
nb_accounts.append(sum_accounts)
nb_liq.append(sum_liq)
context['charts'] = [{"color": "rgb(255, 99, 132)",
context['charts'] = [{"color": "rgb(200, 20, 60)",
"label": "Toutes consommations",
"values": nb_ventes},
{"color": "rgb(54, 162, 235)",