Esempio n. 1
0
def send_verification(request):
    send_verify(request.user)
    messages.success(request, "The verification email has been sent again.")
    return HttpResponseRedirect(reverse("app_home"))
Esempio n. 2
0
def user_register(request):
    if (request.user.is_authenticated and request.user.email_verified
            and request.user.registration_finished):
        return HttpResponseRedirect(reverse("app_home"))
    form = dict()

    if request.method == "POST":
        next_page = request.POST.get("next", "/")
        name = request.POST.get("name", None)
        surname = request.POST.get("surname", None)
        email = request.POST.get("email", None)
        password = request.POST.get("password", None)
        password2 = request.POST.get("password2", None)
        phone = request.POST.get("phone", None)
        university = request.POST.get("university", None)
        other_university = request.POST.get("other_university", None)
        degree = request.POST.get("degree", None)
        graduation_year = request.POST.get("graduation", None)
        birthday = request.POST.get("birthday", None)
        gender = request.POST.get("gender", None)
        city = request.POST.get("city", None)
        country = request.POST.get("country", None)
        error_location = False
        if city and country:
            try:
                geolocator = Nominatim()
                location = geolocator.geocode(f"{city}, {country}",
                                              language="en",
                                              addressdetails=True)
                try:
                    city = location.raw["address"]["city"]
                except KeyError:
                    try:
                        city = location.raw["address"]["village"]
                    except KeyError:
                        city = location.raw["address"]["suburb"]
                country = location.raw["address"]["country"]
            except (AttributeError, KeyError):
                error_location = True
                messages.error(
                    request,
                    f"We haven't been able to locate {city} ({country}), please, check this place exists!",
                )
        form = {
            "first_name": name,
            "last_name": surname,
            "email": email,
            "password": password,
            "repeat_password": password2,
            "university": university,
            "programme": degree,
            "graduation_year": graduation_year,
            "city": city,
            "country": country,
        }
        # 2 other selections at the end of UNIVERSITIES
        if university and int(university) >= len(UNIVERSITIES) - 2:
            university_str = other_university
            form["university_name"] = university_str
        else:
            university_str = UNIVERSITIES[int(university)]
        missing_required = [
            field_name for field_name, field in form.items() if not field
        ]
        if request.user.is_authenticated:
            missing_required = [
                field for field in missing_required
                if field not in ["email", "password", "repeat_password"]
            ]
        form = {**form, "phone": phone, "birthday": birthday, "gender": gender}
        if not missing_required and not error_location:
            if password != password2:
                messages.error(request, "Passwords do not match.")
            else:
                degree = PROGRAMMES[int(degree)]
                if gender:
                    gender = GenderType(int(gender))
                else:
                    gender = GenderType.NONE
                if request.user.is_authenticated:
                    try:
                        request.user.finish_registration(
                            name=name,
                            surname=surname,
                            phone=phone,
                            university=university_str,
                            degree=degree,
                            graduation_year=graduation_year,
                            birthday=(datetime.datetime.strptime(
                                birthday, "%Y-%m-%d").date()
                                      if birthday else None),
                            gender=gender,
                            city=city,
                            country=country,
                        )
                        messages.success(
                            request,
                            "Thank-you for completing the registration.")
                    except ValidationError as e:
                        for errors in e.error_dict.values():
                            for msgs in errors:
                                for msg in msgs:
                                    messages.error(request, msg + ".")
                else:
                    User.objects.create_participant(
                        email=email,
                        password=password,
                        name=name,
                        surname=surname,
                        phone=phone,
                        birthday=(datetime.datetime.strptime(
                            birthday, "%Y-%m-%d").date()
                                  if birthday else None),
                        gender=gender,
                        city=city,
                        country=country,
                        university=university_str,
                        degree=degree,
                        graduation_year=graduation_year,
                    )
                    user = auth.authenticate(email=email, password=password)
                    send_verify(user)
                    auth.login(request, user)
                    messages.success(
                        request,
                        "Thank-you for registering, remember to confirm your email.",
                    )
                return HttpResponseRedirect(reverse("app_home"))
        elif missing_required:
            messages.error(
                request,
                ", ".join(missing_required[:-1]).replace("_",
                                                         " ").capitalize() +
                (" and " + missing_required[-1].replace("_", " ")
                 if len(missing_required) >= 2 else "") +
                (" are required fields." if len(missing_required) > 1 else
                 missing_required[0].replace("_", " ").capitalize() +
                 " is a required field."),
            )
    return render(request, "register.html", {"form": form})
Esempio n. 3
0
def send_verification(request):
    send_verify(request.user)
    messages.success(request, "The email verification has been sent again!")
    return HttpResponseRedirect(reverse("user_verify"))
Esempio n. 4
0
def signup(request):
    if SIGNUP_DISABLED:
        messages.error(request,
                       "The signup page has temporarily been disabled.")
        return HttpResponseRedirect(reverse("app_home"))

    current_data = dict()
    if request.user.is_authenticated:
        return HttpResponseRedirect(reverse("app_dashboard"))

    if request.method == "POST":
        form = forms.RegisterForm(request.POST)
        # TODO: Fix validation
        if form.is_valid():
            email = form.cleaned_data["email"]
            password = form.cleaned_data["password"]
            name = form.cleaned_data["name"]
            surname = form.cleaned_data["surname"]
            phone = form.cleaned_data["phone"]
            birthday = form.cleaned_data["birthday"]
            sex = form.cleaned_data["sex"]
            city = form.cleaned_data["city"]
            country = form.cleaned_data["country"]

            existing_user = User.objects.filter(email=email).first()
            if existing_user:
                if existing_user.is_active:
                    messages.add_message(
                        request,
                        messages.ERROR,
                        "Signup failed, an account with this email already exists!",
                    )
                else:
                    messages.add_message(
                        request,
                        messages.ERROR,
                        "Signup failed, a deactivated account with this email still exists, contact us for more information.",
                    )
            else:
                user = User.objects.create_participant(
                    email=email,
                    password=password,
                    name=name,
                    surname=surname,
                    phone=phone,
                    birthday=birthday,
                    sex=sex,
                    city=city,
                    country=country,
                )
                user = auth.authenticate(email=email, password=password)
                send_verify(user)
                auth.login(request, user)
                messages.success(
                    request,
                    "Thank-you for registering, remember to confirm your email!",
                )
                return HttpResponseRedirect(reverse("app_home"))
        else:
            messages.add_message(
                request,
                messages.ERROR,
                "Signup failed, some fields might be wrong or empty!",
            )
    else:
        form = forms.RegisterForm()

    current_data["form"] = form
    current_data["sexes"] = [(
        (sex.name.capitalize()
         if sex.name.lower() != "none" else "Prefer not to say"),
        sex.value,
    ) for sex in SexType]
    return render(request, "signup.html", current_data)
Esempio n. 5
0
def profile(request):
    if request.method == "POST":
        form = forms.ProfileForm(request.POST, request.FILES)
        if form.is_valid():
            try:
                name = form.cleaned_data["name"]
                if request.user.name != name:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="name",
                        value_previous=request.user.name,
                        value_current=name,
                    ).save()
                    request.user.name = name
                surname = form.cleaned_data["surname"]
                if request.user.surname != surname:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="surname",
                        value_previous=request.user.surname,
                        value_current=surname,
                    ).save()
                    request.user.surname = surname
                email = form.cleaned_data["email"]
                if request.user.email != email:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="email",
                        value_previous=request.user.email,
                        value_current=email,
                    ).save()
                    request.user.email_verified = False
                    request.user.email = email
                    send_verify(request.user)
                    messages.success(
                        request,
                        "The email has been changed, you need to verify it again!",
                    )
                if "picture" in request.FILES:
                    picture = request.FILES["picture"]
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="picture",
                        value_previous=request.user.picture,
                        value_current=picture,
                    ).save()
                    request.user.picture.delete_sized_images()
                    request.user.picture = picture
                picture_public_participants = form.cleaned_data[
                    "picture_public_participants"]
                if (request.user.picture_public_participants !=
                        picture_public_participants):
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="picture_public_participants",
                        value_previous=request.user.
                        picture_public_participants,
                        value_current=picture_public_participants,
                    ).save()
                    request.user.picture_public_participants = (
                        picture_public_participants)
                picture_public_sponsors_and_recruiters = form.cleaned_data[
                    "picture_public_sponsors_and_recruiters"]
                if (request.user.picture_public_sponsors_and_recruiters !=
                        picture_public_sponsors_and_recruiters):
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="picture_public_sponsors_and_recruiters",
                        value_previous=request.user.
                        picture_public_sponsors_and_recruiters,
                        value_current=picture_public_sponsors_and_recruiters,
                    ).save()
                    request.user.picture_public_sponsors_and_recruiters = (
                        picture_public_sponsors_and_recruiters)
                phone = form.cleaned_data["phone"]
                if request.user.phone != phone:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="phone",
                        value_previous=request.user.phone,
                        value_current=phone,
                    ).save()
                    request.user.phone = phone
                    city = form.cleaned_data["city"]
                    if request.user.city != city:
                        UserChange(
                            user=request.user,
                            changed_by=request.user,
                            field="city",
                            value_previous=request.user.city,
                            value_current=city,
                        ).save()
                        request.user.city = city
                city = form.cleaned_data["city"]
                if request.user.city != city:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="city",
                        value_previous=request.user.city,
                        value_current=city,
                    ).save()
                    request.user.city = city
                country = form.cleaned_data["country"]
                if request.user.country != country:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="country",
                        value_previous=request.user.country,
                        value_current=country,
                    ).save()
                    request.user.country = country
                request.user.save()
                messages.success(request, "Profile updated successfully!")
            except IntegrityError:
                messages.error(request,
                               "The email you entered is already in use!")
        else:
            messages.error(
                request,
                "The data you introduced is invalid, please fill in all the fields!",
            )

    user_data = request.user.get_dict()
    form = forms.ProfileForm(user_data)
    if request.user.is_participant:
        user_data["applications"] = get_applications_by_user(request.user.id)
    return render(
        request,
        "profile.html",
        {
            "form": form,
            "user": user_data,
            "picture": request.user.picture.crop["500x500"],
        },
    )