-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #46 from IEEE-NITK/embedathon_registration
Embedathon Registration
- Loading branch information
Showing
13 changed files
with
470 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
from django.db import models | ||
|
||
DATETIME_FORMAT = "%d-%m-%Y %H:%M:%S" | ||
|
||
|
||
class Society(models.Model): | ||
""" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
from config.models import ModuleConfiguration | ||
from django.contrib import messages | ||
from django.shortcuts import redirect | ||
|
||
|
||
def module_enabled(module_name): | ||
def decorator(view_func): | ||
def wrapper(request, *args, **kwargs): | ||
try: | ||
config = ModuleConfiguration.objects.get(module_name=module_name) | ||
except ModuleConfiguration.DoesNotExist: | ||
messages.error( | ||
request, | ||
""" | ||
Module Configuration does not exist. | ||
Please contact the administrators! | ||
""", | ||
) | ||
return redirect("index") | ||
|
||
if not config.module_enabled: | ||
messages.error( | ||
request, | ||
""" | ||
Module has not been enabled. | ||
Please contact the administrators! | ||
""", | ||
) | ||
return redirect("index") | ||
|
||
return view_func(request, *args, **kwargs) | ||
|
||
return wrapper | ||
|
||
return decorator |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
from django import forms | ||
|
||
|
||
# Not exactly DRY, but I don't know of any cleaner way to do it. | ||
|
||
|
||
class CorpusForm(forms.Form): | ||
def __init__(self, *args, **kwargs): | ||
super(CorpusForm, self).__init__(*args, **kwargs) | ||
for visible in self.visible_fields(): | ||
visible.field.widget.attrs[ | ||
"class" | ||
] = """ | ||
mt-1 block w-full rounded-md border-base-800 | ||
text-black shadow-sm focus:border-primary | ||
focus:ring focus:ring-primary-200 focus:ring-opacity-50 | ||
""" | ||
|
||
|
||
class CorpusModelForm(forms.ModelForm): | ||
def __init__(self, *args, **kwargs): | ||
super(CorpusModelForm, self).__init__(*args, **kwargs) | ||
for visible in self.visible_fields(): | ||
visible.field.widget.attrs[ | ||
"class" | ||
] = """ | ||
mt-1 block w-full rounded-md border-base-800 | ||
text-black shadow-sm focus:border-primary | ||
focus:ring focus:ring-primary-200 focus:ring-opacity-50 | ||
""" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,6 @@ | ||
# from django.contrib import admin | ||
# | ||
# # Register your models here. | ||
from django.contrib import admin | ||
from embedathon.models import EmbedathonUser | ||
|
||
# Register your models here. | ||
|
||
admin.site.register(EmbedathonUser) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
from embedathon.models import EmbedathonUser | ||
|
||
from corpus.forms import CorpusModelForm | ||
|
||
|
||
class EmbedathonForm(CorpusModelForm): | ||
class Meta: | ||
model = EmbedathonUser | ||
fields = [ | ||
"from_nitk", | ||
"college_name", | ||
"course", | ||
"year", | ||
"branch", | ||
"ieee_member", | ||
"ieee_membership_no", | ||
"cass_member", | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
# Generated by Django 4.2.4 on 2023-12-10 14:14 | ||
import django.db.models.deletion | ||
from django.conf import settings | ||
from django.db import migrations | ||
from django.db import models | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
initial = True | ||
|
||
dependencies = [ | ||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name="EmbedathonUser", | ||
fields=[ | ||
( | ||
"id", | ||
models.BigAutoField( | ||
auto_created=True, | ||
primary_key=True, | ||
serialize=False, | ||
verbose_name="ID", | ||
), | ||
), | ||
("from_nitk", models.BooleanField(default=True)), | ||
( | ||
"college_name", | ||
models.CharField( | ||
default="National Institute of Technology Karnataka", | ||
max_length=200, | ||
), | ||
), | ||
( | ||
"course", | ||
models.CharField( | ||
choices=[("B", "B.Tech."), ("M", "M.Tech."), ("P", "PhD")], | ||
max_length=1, | ||
), | ||
), | ||
("year", models.IntegerField()), | ||
("branch", models.CharField(max_length=200)), | ||
("ieee_member", models.BooleanField(default=False)), | ||
("ieee_membership_no", models.BigIntegerField(blank=True, null=True)), | ||
("cass_member", models.BooleanField(default=False)), | ||
( | ||
"user", | ||
models.OneToOneField( | ||
on_delete=django.db.models.deletion.CASCADE, | ||
to=settings.AUTH_USER_MODEL, | ||
), | ||
), | ||
], | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,23 @@ | ||
# from django.db import models | ||
# | ||
# # Create your models here. | ||
from accounts.models import User | ||
from django.db import models | ||
|
||
# Create your models here. | ||
|
||
COURSES = [("B", "B.Tech."), ("M", "M.Tech."), ("P", "PhD")] | ||
|
||
|
||
class EmbedathonUser(models.Model): | ||
user = models.OneToOneField(User, on_delete=models.CASCADE) | ||
from_nitk = models.BooleanField(default=True) | ||
college_name = models.CharField( | ||
max_length=200, default="National Institute of Technology Karnataka" | ||
) | ||
course = models.CharField(max_length=1, choices=COURSES) | ||
year = models.IntegerField(blank=False, null=False) | ||
branch = models.CharField(max_length=200, blank=False, null=False) | ||
ieee_member = models.BooleanField(default=False) | ||
ieee_membership_no = models.BigIntegerField(blank=True, null=True) | ||
cass_member = models.BooleanField(default=False) | ||
|
||
def __str__(self): | ||
return self.user.__str__() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
from django.urls import path | ||
from embedathon import views | ||
|
||
urlpatterns = [ | ||
path("", views.index, name="embedathon_index"), | ||
path("register", views.register, name="embedathon_register"), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,73 @@ | ||
# from django.shortcuts import render | ||
# | ||
# # Create your views here. | ||
from datetime import datetime | ||
|
||
from config.models import DATETIME_FORMAT | ||
from config.models import ModuleConfiguration | ||
from django.contrib import messages | ||
from django.contrib.auth.decorators import login_required | ||
from django.shortcuts import redirect | ||
from django.shortcuts import render | ||
from embedathon.forms import EmbedathonForm | ||
from embedathon.models import EmbedathonUser | ||
|
||
from corpus.decorators import module_enabled | ||
|
||
|
||
# Create your views here. | ||
|
||
|
||
@login_required | ||
@module_enabled(module_name="embedathon") | ||
def index(request): | ||
try: | ||
embedathon_user = EmbedathonUser.objects.get(user=request.user) | ||
except EmbedathonUser.DoesNotExist: | ||
messages.error(request, "Please register for Embedathon first!") | ||
return redirect("embedathon_register") | ||
|
||
args = {"embedathon_user": embedathon_user} | ||
|
||
return render(request, "embedathon/index.html", args) | ||
|
||
|
||
@login_required | ||
@module_enabled(module_name="embedathon") | ||
def register(request): | ||
config = ModuleConfiguration.objects.get(module_name="embedathon").module_config | ||
|
||
reg_start_datetime, reg_end_datetime = ( | ||
config["reg_start_datetime"], | ||
config["reg_end_datetime"], | ||
) | ||
reg_start_datetime, reg_end_datetime = datetime.strptime( | ||
reg_start_datetime, DATETIME_FORMAT | ||
), datetime.strptime(reg_end_datetime, DATETIME_FORMAT) | ||
registration_active = (reg_start_datetime <= datetime.now()) and ( | ||
datetime.now() <= reg_end_datetime | ||
) | ||
|
||
if not registration_active: | ||
messages.error(request, "Registration for Embedathon is not active yet.") | ||
return redirect("index") | ||
|
||
try: | ||
embedathon_user = EmbedathonUser.objects.get(user=request.user) | ||
if embedathon_user: | ||
messages.info(request, "You have already registered!") | ||
return redirect("embedathon_index") | ||
except EmbedathonUser.DoesNotExist: | ||
pass | ||
|
||
if request.method == "POST": | ||
form = EmbedathonForm(request.POST) | ||
if form.is_valid(): | ||
embedathon_user = form.save(commit=False) | ||
embedathon_user.user = request.user | ||
embedathon_user.save() | ||
messages.success(request, "Registration successful") | ||
return redirect("embedathon_index") | ||
else: | ||
form = EmbedathonForm() | ||
|
||
args = {"form": form} | ||
|
||
return render(request, "embedathon/register.html", args) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,61 +1,66 @@ | ||
{% extends 'base.html' %} | ||
|
||
{% block title %} | ||
Login | ||
Login | ||
{% endblock %} | ||
|
||
{% block content %} | ||
<div class="card w-3/4 lg:w-1/3 mx-auto my-10 bg-base-200 shadow-xl"> | ||
<div class="card-body"> | ||
<h1 class="card-title text-2xl">Login</h1> | ||
|
||
<form method="post" action="{% url 'accounts_signin' %}" class="py-5"> | ||
{% csrf_token %} | ||
|
||
{% if form.non_field_errors %} | ||
{% for error in form.non_field_errors %} | ||
<div role="alert" class="alert alert-error mt-1"> | ||
<span>{{ error }}</span> | ||
</div> | ||
{% endfor %} | ||
{% endif %} | ||
|
||
<div class="w-full my-2"> | ||
<label for="{{ form.email.id_for_label }}">Email</label> | ||
{{ form.username }} | ||
{% if form.username.errors %} | ||
<div class="my-1"> | ||
<div role="alert" class="alert alert-error"> | ||
{{ form.username.errors }} | ||
</div> | ||
</div> | ||
<div class="card w-3/4 lg:w-1/3 mx-auto my-10 bg-base-200 shadow-xl"> | ||
<div class="card-body"> | ||
<h1 class="card-title text-2xl">Login</h1> | ||
|
||
<form method="post" action="{% url 'accounts_signin' %}" class="py-5"> | ||
{% csrf_token %} | ||
|
||
{% if request.GET.next %} | ||
<input type="hidden" name="next" value="{{ request.GET.next }}"> | ||
{% endif %} | ||
</div> | ||
|
||
<div class="w-full my-2"> | ||
<label for="{{ form.password.id_for_label }}">Password</label> | ||
{{ form.password }} | ||
{% if form.password.errors %} | ||
<div class="my-1"> | ||
<div role="alert" class="alert alert-error"> | ||
{{ form.password.errors }} | ||
{% if form.non_field_errors %} | ||
{% for error in form.non_field_errors %} | ||
<div role="alert" class="alert alert-error mt-1"> | ||
<span>{{ error }}</span> | ||
</div> | ||
</div> | ||
{% endfor %} | ||
{% endif %} | ||
</div> | ||
|
||
<div class="card-actions mt-5"> | ||
<button class="btn btn-primary btn-block">Login</button> | ||
</div> | ||
</form> | ||
<div class="w-full my-2"> | ||
<label for="{{ form.email.id_for_label }}">Email</label> | ||
{{ form.username }} | ||
{% if form.username.errors %} | ||
<div class="my-1"> | ||
<div role="alert" class="alert alert-error"> | ||
{{ form.username.errors }} | ||
</div> | ||
</div> | ||
{% endif %} | ||
</div> | ||
|
||
<div class="flex flex-col w-full"> | ||
<div class="divider divider-primary">OR</div> | ||
</div> | ||
<div class="w-full my-2"> | ||
<label for="{{ form.password.id_for_label }}">Password</label> | ||
{{ form.password }} | ||
{% if form.password.errors %} | ||
<div class="my-1"> | ||
<div role="alert" class="alert alert-error"> | ||
{{ form.password.errors }} | ||
</div> | ||
</div> | ||
{% endif %} | ||
</div> | ||
|
||
<div class="card-actions mt-5"> | ||
<button class="btn btn-primary btn-block">Login</button> | ||
</div> | ||
</form> | ||
|
||
<div class="flex flex-col w-full"> | ||
<p>If you don't have an account, <a href="{% url 'accounts_signup' %}" class="underline underline-offset-2">create one here</a>.</p> | ||
<div class="flex flex-col w-full"> | ||
<div class="divider divider-primary">OR</div> | ||
</div> | ||
|
||
<div class="flex flex-col w-full"> | ||
<p>If you don't have an account, <a href="{% url 'accounts_signup' %}" | ||
class="underline underline-offset-2">create one here</a>.</p> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
{% endblock %} |
Oops, something went wrong.