Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions workshop_app/decorators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from django.shortcuts import redirect
from django.urls import reverse


def instructor_only(func):
def inner(*args, **kwargs):
if is_instructor(args[0].user):
return func(*args, **kwargs)
return redirect(reverse('workshop_status_coordinator'))

return inner


def coordinator_only(func):
def inner(*args, **kwargs):
if not is_instructor(args[0].user):
return func(*args, **kwargs)
return redirect(reverse('workshop_status_instructor'))

return inner


def is_instructor(user):
"""Check if the user is having instructor rights"""
return user.groups.filter(name='instructor').exists()
138 changes: 59 additions & 79 deletions workshop_app/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from django.db.models import Q
from django.forms import inlineformset_factory, model_to_dict
from django.http import JsonResponse, Http404
from django.urls import reverse

try:
from StringIO import StringIO as string_io
Expand All @@ -12,7 +11,7 @@
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.shortcuts import render, redirect
from django.shortcuts import render
from django.utils import timezone

from .forms import (
Expand All @@ -25,6 +24,7 @@
WorkshopType, AttachmentFile
)
from .send_mails import send_email
from .decorators import *

__author__ = "Akshen Doke"
__credits__ = ["Mahesh Gudi", "Aditya P.", "Ankit Javalkar",
Expand All @@ -39,28 +39,21 @@ def is_email_checked(user):
return user.profile.is_email_verified


def is_instructor(user):
"""Check if the user is having instructor rights"""
return user.groups.filter(name='instructor').exists()


def get_landing_page(user):
# For now, landing pages of both instructor and coordinator are same
def redirect_to_landing_page(user):
if is_instructor(user):
return reverse('workshop_status_instructor')
return reverse('workshop_status_coordinator')
return redirect(reverse('workshop_status_instructor'))
return redirect(reverse('workshop_status_coordinator'))


# View functions

@login_required
@instructor_only
@coordinator_only
def index(request):
"""Landing Page : Redirect to login page if not logged in
Redirect to respective landing page according to position"""
user = request.user
if user.is_authenticated and is_email_checked(user):
return redirect(get_landing_page(user))

return redirect('/login/')
pass
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why have this function if it is not doing anything?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function redirects users who come to '/' route to their respective landing pages. As CMS app is not yet merged, not having this function will cause a 404 error on '/' route.



# User views
Expand All @@ -72,15 +65,15 @@ def user_login(request):
if user.is_superuser:
return redirect('/admin')
if user.is_authenticated:
return redirect(get_landing_page(user))
return redirect_to_landing_page(user)

if request.method == "POST":
form = UserLoginForm(request.POST)
if form.is_valid():
user = form.cleaned_data
if user.profile.is_email_verified:
login(request, user)
return redirect(get_landing_page(user))
return redirect_to_landing_page(user)
else:
return render(request, 'workshop_app/activation.html')
else:
Expand Down Expand Up @@ -155,7 +148,7 @@ def user_register(request):
)
else:
if request.user.is_authenticated and is_email_checked(request.user):
return redirect(get_landing_page(request.user))
return redirect_to_landing_page(request.user)
elif request.user.is_authenticated:
return render(request, 'workshop_app/activation.html')
form = UserRegistrationForm()
Expand Down Expand Up @@ -200,11 +193,10 @@ def edit_profile(request):
# Workshop views

@login_required
@coordinator_only
def workshop_status_coordinator(request):
""" Workshops proposed by Coordinator """
user = request.user
if is_instructor(user):
return redirect(get_landing_page(user))
workshops = Workshop.objects.filter(
coordinator=user.id
).order_by('-date')
Expand All @@ -213,11 +205,10 @@ def workshop_status_coordinator(request):


@login_required
@instructor_only
def workshop_status_instructor(request):
""" Workshops to accept and accepted by Instructor """
user = request.user
if not is_instructor(user):
return redirect(get_landing_page(user))
today = timezone.now().date()
workshops = Workshop.objects.filter(Q(
instructor=user.id,
Expand All @@ -230,10 +221,9 @@ def workshop_status_instructor(request):


@login_required
@instructor_only
def accept_workshop(request, workshop_id):
user = request.user
if not is_instructor(user):
return redirect(get_landing_page(user))
workshop = Workshop.objects.get(id=workshop_id)
# Change Status of the selected workshop
workshop.status = 1
Expand Down Expand Up @@ -264,10 +254,8 @@ def accept_workshop(request, workshop_id):


@login_required
@instructor_only
def change_workshop_date(request, workshop_id):
user = request.user
if not is_instructor(user):
return redirect(get_landing_page(user))
if request.method == 'POST':
new_workshop_date = datetime.strptime(request.POST.get('new_date'), "%Y-%m-%d")
today = datetime.today()
Expand All @@ -294,47 +282,43 @@ def change_workshop_date(request, workshop_id):

# TODO: Show terms n conditions of selected ws type
@login_required
@coordinator_only
def propose_workshop(request):
"""Coordinator proposed a workshop and date"""

user = request.user
if user.is_superuser:
return redirect("/admin")
if is_instructor(user):
return redirect(get_landing_page(user))
else:
form = WorkshopForm()
if request.method == 'POST':
form = WorkshopForm(request.POST)
if form.is_valid():
form_data = form.save(commit=False)
form_data.coordinator = user
# Avoiding Duplicate workshop entries for same date and workshop_title
if Workshop.objects.filter(
date=form_data.date,
workshop_type=form_data.workshop_type,
coordinator=form_data.coordinator
).exists():
return redirect(get_landing_page(user))
else:
form_data.save()
instructors = Profile.objects.filter(position='instructor')
for i in instructors:
send_email(request, call_on='Proposed Workshop',
user_position='instructor',
workshop_date=str(form_data.date),
workshop_title=form_data.workshop_type,
user_name=user.get_full_name(),
other_email=i.user.email,
phone_number=user.profile.phone_number,
institute=user.profile.institute
)
return redirect(get_landing_page(user))
# GET request
return render(
request, 'workshop_app/propose_workshop.html',
{"form": form}
)
form = WorkshopForm()
if request.method == 'POST':
form = WorkshopForm(request.POST)
if form.is_valid():
form_data = form.save(commit=False)
form_data.coordinator = user
# Avoiding Duplicate workshop entries for same date and workshop_title
if Workshop.objects.filter(
date=form_data.date,
workshop_type=form_data.workshop_type,
coordinator=form_data.coordinator
).exists():
return redirect(reverse('workshop_status_coordinator'))
else:
form_data.save()
instructors = Profile.objects.filter(position='instructor')
for i in instructors:
send_email(request, call_on='Proposed Workshop',
user_position='instructor',
workshop_date=str(form_data.date),
workshop_title=form_data.workshop_type,
user_name=user.get_full_name(),
other_email=i.user.email,
phone_number=user.profile.phone_number,
institute=user.profile.institute
)
return redirect(reverse('workshop_status_coordinator'))
# GET request
return render(
request, 'workshop_app/propose_workshop.html',
{"form": form}
)


@login_required
Expand Down Expand Up @@ -379,9 +363,8 @@ def workshop_type_details(request, workshop_type_id):


@login_required
@instructor_only
def delete_attachment_file(request, file_id):
if not is_instructor(request.user):
return redirect(get_landing_page(request.user))
file = AttachmentFile.objects.filter(id=file_id)
if file.exists():
file = file.first()
Expand Down Expand Up @@ -443,9 +426,8 @@ def workshop_details(request, workshop_id):


@login_required
@instructor_only
def add_workshop_type(request):
if not is_instructor(request.user):
return redirect(get_landing_page(request.user))
if request.method == 'POST':
form = WorkshopTypeForm(request.POST)
if form.is_valid():
Expand All @@ -457,15 +439,13 @@ def add_workshop_type(request):


@login_required
@instructor_only
def view_comment_profile(request, user_id):
"""Instructor can view coordinator profile """
user = request.user
if is_instructor(user) and is_email_checked(user):
coordinator_profile = Profile.objects.get(user_id=user_id)
workshops = Workshop.objects.filter(coordinator=user_id).order_by(
'date')

return render(request, "workshop_app/view_profile.html",
{"coordinator_profile": coordinator_profile,
"Workshops": workshops})
return redirect(get_landing_page(user))
coordinator_profile = Profile.objects.get(user_id=user_id)
workshops = Workshop.objects.filter(coordinator=user_id).order_by(
'date')

return render(request, "workshop_app/view_profile.html",
{"coordinator_profile": coordinator_profile,
"Workshops": workshops})