From f93a68b94284dffb0e84ad5889d520074525733a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Mon, 19 Jun 2017 20:46:28 +0100 Subject: [PATCH] Remove the old user registration material --- cof/forms.py | 88 +---------------- cof/views.py | 233 +++------------------------------------------- gestioCOF/urls.py | 10 -- 3 files changed, 17 insertions(+), 314 deletions(-) diff --git a/cof/forms.py b/cof/forms.py index 7f3a0614..4149c507 100644 --- a/cof/forms.py +++ b/cof/forms.py @@ -1,25 +1,12 @@ -# -*- coding: utf-8 -*- - -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - from django import forms -from django.utils.translation import ugettext_lazy as _ -from django.contrib.auth.models import User from django.forms.widgets import RadioSelect, CheckboxSelectMultiple from django.forms.formsets import BaseFormSet, formset_factory -from django.db.models import Max -from django.core.validators import MinLengthValidator + +from bda.models import Spectacle from .models import CofProfile, EventCommentValue, CalendarSubscription from .widgets import TriStateCheckbox -from gestion.models import Profile -from gestion.shared import lock_table, unlock_table - -from bda.models import Spectacle - class EventForm(forms.Form): def __init__(self, *args, **kwargs): @@ -178,77 +165,6 @@ class EventStatusFilterForm(forms.Form): yield ("has_paid", None, value) -class RegistrationUserForm(forms.ModelForm): - def force_long_username(self): - self.fields['username'].validators = [MinLengthValidator(9)] - - class Meta: - model = User - fields = ["username", "first_name", "last_name", "email"] - - -class RegistrationPassUserForm(RegistrationUserForm): - """ - Formulaire pour changer le mot de passe d'un utilisateur. - """ - password1 = forms.CharField(label=_('Mot de passe'), - widget=forms.PasswordInput) - password2 = forms.CharField(label=_('Confirmation du mot de passe'), - widget=forms.PasswordInput) - - def clean_password2(self): - pass1 = self.cleaned_data['password1'] - pass2 = self.cleaned_data['password2'] - if pass1 and pass2: - if pass1 != pass2: - raise forms.ValidationError(_('Mots de passe non identiques.')) - return pass2 - - def save(self, commit=True, *args, **kwargs): - user = super(RegistrationPassUserForm, self).save(commit, *args, - **kwargs) - user.set_password(self.cleaned_data['password2']) - if commit: - user.save() - return user - - -class RegistrationCofProfileForm(forms.ModelForm): - def __init__(self, *args, **kwargs): - super(RegistrationCofProfileForm, self).__init__(*args, **kwargs) - self.fields['num'].widget.attrs['readonly'] = True - - class Meta: - model = CofProfile - fields = [ - "num", "type_cotiz", - "mailing", "mailing_bda", "mailing_bda_revente", - ] - - def save(self, *args, **kw): - instance = super(RegistrationCofProfileForm, self).save(*args, **kw) - if instance.is_cof and not instance.num: - # Generate new number - try: - lock_table(CofProfile) - aggregate = CofProfile.objects.aggregate(Max('num')) - instance.num = aggregate['num__max'] + 1 - instance.save() - self.cleaned_data['num'] = instance.num - self.data['num'] = instance.num - finally: - unlock_table(CofProfile) - return instance - - -class RegistrationProfileForm(forms.ModelForm): - class Meta: - model = Profile - fields = [ - "login_clipper", "phone", "occupation", "departement", "comments" - ] - - STATUS_CHOICES = (('no', 'Non'), ('wait', 'Oui mais attente paiement'), ('paid', 'Oui payé'),) diff --git a/cof/views.py b/cof/views.py index 9f484897..1d87ee21 100644 --- a/cof/views.py +++ b/cof/views.py @@ -4,34 +4,27 @@ import unicodecsv import uuid from datetime import timedelta from icalendar import Calendar, Event as Vevent -from custommail.shortcuts import send_custom_mail -from django.shortcuts import get_object_or_404, render -from django.http import Http404, HttpResponse -from django.contrib.auth.decorators import login_required -from django.contrib.auth.models import User -from django.contrib.sites.models import Site -from django.utils import timezone from django.contrib import messages +from django.contrib.auth.decorators import login_required +from django.contrib.sites.models import Site +from django.http import Http404, HttpResponse +from django.shortcuts import get_object_or_404, render +from django.utils import timezone import django.utils.six as six -from .models import Survey, SurveyAnswer, SurveyQuestion, \ - SurveyQuestionAnswer -from .models import Event, EventRegistration, EventOption, \ - EventOptionChoice -from .models import EventCommentField, EventCommentValue, \ - CalendarSubscription -from .models import CofProfile -from .decorators import buro_required, cof_required -from .forms import ( - EventStatusFilterForm, SurveyForm, SurveyStatusFilterForm, - RegistrationUserForm, RegistrationProfileForm, RegistrationCofProfileForm, - EventForm, CalendarForm, EventFormset, RegistrationPassUserForm -) - from bda.models import Tirage, Spectacle -from gestion.models import Profile +from .decorators import buro_required, cof_required +from .forms import ( + EventStatusFilterForm, SurveyForm, SurveyStatusFilterForm, EventForm, + CalendarForm +) +from .models import ( + Survey, SurveyAnswer, SurveyQuestion, SurveyQuestionAnswer, Event, + EventRegistration, EventOption, EventOptionChoice, EventCommentField, + EventCommentValue, CalendarSubscription, CofProfile +) @login_required @@ -273,202 +266,6 @@ def survey_status(request, survey_id): "form": form}) -def registration_set_ro_fields(user_form, profile_form): - user_form.fields['username'].widget.attrs['readonly'] = True - profile_form.fields['login_clipper'].widget.attrs['readonly'] = True - - -@buro_required -def registration_form2(request, login_clipper=None, username=None, - fullname=None): - events = Event.objects.filter(old=False).all() - member = None - if login_clipper: - try: # check if the given user is already registered - member = User.objects.get(username=login_clipper) - username = member.username - login_clipper = None - except User.DoesNotExist: - # new user, but prefill - # user - user_form = RegistrationUserForm(initial={ - 'username': login_clipper, - 'email': "%s@clipper.ens.fr" % login_clipper}) - if fullname: - bits = fullname.split(" ") - user_form.fields['first_name'].initial = bits[0] - if len(bits) > 1: - user_form.fields['last_name'].initial = " ".join(bits[1:]) - # profile - profile_form = RegistrationProfileForm(initial={ - 'login_clipper': login_clipper}) - # COF - profile - cofprofile_form = RegistrationCofProfileForm() - registration_set_ro_fields(user_form, profile_form) - # events - event_formset = EventFormset(events=events, prefix='events') - if username: - member = get_object_or_404(User, username=username) - (profile, _) = Profile.objects.get_or_create(user=member) - (cofprofile, _) = CofProfile.objects.get_or_create(profile=profile) - # already existing, prefill - user_form = RegistrationUserForm(instance=member) - profile_form = RegistrationProfileForm(instance=profile) - cofprofile_form = RegistrationCofProfileForm(instance=cofprofile) - registration_set_ro_fields(user_form, profile_form) - # events - current_registrations = [] - for event in events: - try: - current_registrations.append( - EventRegistration.objects.get(user=member, event=event)) - except EventRegistration.DoesNotExist: - current_registrations.append(None) - event_formset = EventFormset( - events=events, prefix='events', - current_registrations=current_registrations) - elif not login_clipper: - # new user - user_form = RegistrationPassUserForm() - user_form.force_long_username() - profile_form = RegistrationProfileForm() - cofprofile_form = RegistrationCofProfileForm() - event_formset = EventFormset(events=events, prefix='events') - return render(request, "cof/registration_form.html", - {"member": member, "login_clipper": login_clipper, - "user_form": user_form, - "profile_form": profile_form, - "cofprofile_form": cofprofile_form, - "event_formset": event_formset}) - - -@buro_required -def registration(request): - if request.POST: - request_dict = request.POST.copy() - # num ne peut pas être défini manuellement - if "num" in request_dict: - del request_dict["num"] - member = None - login_clipper = None - success = False - - # ----- - # Remplissage des formulaires - # ----- - - if 'password1' in request_dict or 'password2' in request_dict: - user_form = RegistrationPassUserForm(request_dict) - else: - user_form = RegistrationUserForm(request_dict) - profile_form = RegistrationProfileForm(request_dict) - cofprofile_form = RegistrationCofProfileForm(request_dict) - events = Event.objects.filter(old=False).all() - event_formset = EventFormset(events=events, data=request_dict, - prefix='events') - if "user_exists" in request_dict and request_dict["user_exists"]: - username = request_dict["username"] - try: - member = User.objects.get(username=username) - user_form = RegistrationUserForm(request_dict, instance=member) - if member.profile.login_clipper: - login_clipper = member.profile.login_clipper - else: - user_form.force_long_username() - except User.DoesNotExist: - user_form.force_long_username() - else: - user_form.force_long_username() - - # ----- - # Validation des formulaires - # ----- - - if user_form.is_valid(): - member = user_form.save() - cofprofile, _ = (CofProfile.objects - .get_or_create(profile=member.profile)) - was_cof = cofprofile.is_cof - request_dict["num"] = cofprofile.num - # Maintenant on remplit le formulaire de profil - cofprofile_form = RegistrationCofProfileForm( - request_dict, - instance=cofprofile - ) - profile_form = RegistrationProfileForm( - request_dict, - instance=member.profile - ) - forms_are_valid = all(( - profile_form.is_valid(), - cofprofile_form.is_valid(), - event_formset.is_valid(), - )) - if forms_are_valid: - # Enregistrement du profil - profile = profile_form.save() - if profile.is_cof and not was_cof: - send_custom_mail( - "welcome", "cof@ens.fr", [member.email], - context={'member': member}, - ) - # Enregistrement des inscriptions aux événements - for form in event_formset: - if 'status' not in form.cleaned_data: - form.cleaned_data['status'] = 'no' - if form.cleaned_data['status'] == 'no': - try: - current_registration = EventRegistration.objects \ - .get(user=member, event=form.event) - current_registration.delete() - except EventRegistration.DoesNotExist: - pass - continue - all_choices = get_event_form_choices(form.event, form) - (current_registration, created_reg) = \ - EventRegistration.objects.get_or_create( - user=member, event=form.event) - update_event_form_comments(form.event, form, - current_registration) - current_registration.options = all_choices - current_registration.paid = \ - (form.cleaned_data['status'] == 'paid') - current_registration.save() - # if form.event.title == "Mega 15" and created_reg: - # field = EventCommentField.objects.get( - # event=form.event, name="Commentaires") - # try: - # comments = EventCommentValue.objects.get( - # commentfield=field, - # registration=current_registration).content - # except EventCommentValue.DoesNotExist: - # comments = field.default - # FIXME : il faut faire quelque chose de propre ici, - # par exemple écrire un mail générique pour - # l'inscription aux événements et/ou donner la - # possibilité d'associer un mail aux événements - # send_custom_mail(...) - success = True - # Messages - if success: - msg = ("L'inscription de {:s} ({:s}) a été " - "enregistrée avec succès" - .format(member.get_full_name(), member.email)) - if member.profile.is_cof: - msg += "Il est désormais membre du COF n°{:d} !".format( - member.profile.num) - messages.success(request, msg, extra_tags='safe') - return render(request, "cof/registration_post.html", - {"user_form": user_form, - "profile_form": profile_form, - "cofprofile_form": cofprofile_form, - "member": member, - "login_clipper": login_clipper, - "event_formset": event_formset}) - else: - return render(request, "registration.html") - - @buro_required def export_members(request): response = HttpResponse(content_type='text/csv') diff --git a/gestioCOF/urls.py b/gestioCOF/urls.py index 8c32b91f..6fd68aeb 100644 --- a/gestioCOF/urls.py +++ b/gestioCOF/urls.py @@ -51,16 +51,6 @@ urlpatterns = [ url(r'^outsider/password-change-done$', django_views.password_change_done, name='password_change_done'), - # Inscription d'un nouveau membre - url(r'^registration$', - cof_views.registration, - name="registration"), - url(r'^registration/clipper/(?P[\w-]+)$', - cof_views.registration_form2, name="clipper-registration"), - url(r'^registration/user/(?P.+)$', - cof_views.registration_form2, name="user-registration"), - url(r'^registration/empty$', cof_views.registration_form2, - name="empty-registration"), # Autocompletion url(r'^autocomplete/registration$', autocomplete,