summaryrefslogtreecommitdiff
path: root/sbhs/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'sbhs/views.py')
-rw-r--r--sbhs/views.py435
1 files changed, 268 insertions, 167 deletions
diff --git a/sbhs/views.py b/sbhs/views.py
index 41525a6..803d460 100644
--- a/sbhs/views.py
+++ b/sbhs/views.py
@@ -13,7 +13,7 @@ import subprocess
# import serial
from textwrap import dedent
from time import gmtime, strftime
-from datetime import datetime
+from datetime import datetime, timedelta, date
from django.urls import reverse
from django.conf import settings
@@ -29,7 +29,7 @@ from django.contrib.auth import login, logout, authenticate
from django.shortcuts import render, redirect, get_object_or_404
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.http import HttpResponse, HttpResponseRedirect,\
- Http404, HttpResponseServerError
+ Http404, HttpResponseServerError, JsonResponse
from .models import Board, Experiment, Profile, Slot#, Webcam
from .forms import UserLoginForm, UserRegistrationForm, SlotCreationForm
@@ -42,11 +42,12 @@ from . import switch_off
from . import switch_onn
+LIMIT = 2
# ser = serial.Serial('/dev/ttyUSB0')
# required for experiment views
currentdir = os.path.dirname(
- os.path.abspath(inspect.getfile(inspect.currentframe())))
+ os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0, parentdir)
@@ -55,12 +56,12 @@ sys.path.insert(0, parentdir)
def index(request, next_url=None):
- if request.user.is_authenticated():
- return render(request,'account/home.html')
- return render(request,"pages/pages_index.html")
+ if request.user.is_authenticated():
+ return render(request,'account/home.html')
+ return render(request,"pages/pages_index.html")
def about(req):
- return render(req, "pages/about.html")
+ return render(req, "pages/about.html")
def info(request):
@@ -71,190 +72,290 @@ def downloads(req):
def theory(req):
- return render(req, "pages/theory.html")
+ return render(req, "pages/theory.html")
def procedure(req):
- return render(req, "pages/procedure.html")
+ return render(req, "pages/procedure.html")
def experiments(req):
- return render(req, "pages/experiments.html")
+ return render(req, "pages/experiments.html")
def feedback(req):
- return render(req, "pages/feedback.html")
+ return render(req, "pages/feedback.html")
#########Account Views ###########
@email_verified
def account_index(request):
- if request.user.is_authenticated():
- return render(request,'account/home.html')
+ if request.user.is_authenticated():
+ return render(request,'account/home.html')
- return render(request,'account/account_index.html',{
- 'login_form':UserLoginForm(request.POST or None),
- 'registration_form':UserRegistrationForm(request.POST or None)
- })
+ return render(request,'account/account_index.html',{
+ 'login_form':UserLoginForm(request.POST or None),
+ 'registration_form':UserRegistrationForm(request.POST or None)
+ })
def user_login(request):
- user = request.user
- context = {}
- if user.is_authenticated():
- return account_index(request)
-
- if request.method == 'POST':
- form = UserLoginForm(request.POST)
- if form.is_valid():
- cd = form.cleaned_data
- user = authenticate(username=cd['username'],
- password=cd['password'])
- if user is not None:
- if user.is_active:
- login(request,user)
- return redirect('account_enter')
- else:
- messages.success(request,"Account Disabled")
- return redirect('account_enter')
- else:
- messages.success(request, "Username and/or Password is \
- invalid")
- return redirect('account_enter')
- else:
- context={
- "login_form": form
- }
- else:
- form = UserLoginForm()
- context = {
- "login_form":form
- }
- return redirect('account_enter')
+ user = request.user
+ context = {}
+ if user.is_authenticated():
+ return account_index(request)
+
+ if request.method == 'POST':
+ form = UserLoginForm(request.POST)
+ if form.is_valid():
+ cd = form.cleaned_data
+ user = authenticate(username=cd['username'],
+ password=cd['password'])
+ if user is not None:
+ if user.is_active:
+ login(request,user)
+ return redirect('account_enter')
+ else:
+ messages.success(request,"Account Disabled")
+ return redirect('account_enter')
+ else:
+ messages.success(request, "Username and/or Password is \
+ invalid")
+ return redirect('account_enter')
+ else:
+ context={
+ "login_form": form
+ }
+ else:
+ form = UserLoginForm()
+ context = {
+ "login_form":form
+ }
+ return redirect('account_enter')
def user_logout(request):
- logout(request)
- return redirect('account_enter')
+ logout(request)
+ return redirect('account_enter')
def user_register(request):
- user = request.user
- if user.is_authenticated():
- return render(request,'account/home.html')
- context={}
- if request.method == 'POST':
- form = UserRegistrationForm(request.POST)
- if form.is_valid():
- u_name, pwd, user_email, key= form.save()
- new_user = authenticate(username=u_name,password=pwd)
- login(request, new_user)
- if user_email and key:
- success, msg = send_user_mail(user_email, key)
- context = {
- 'activation_msg':msg
- }
- return render(request,'account/activation_status.html',
- context
- )
- return redirect('account_enter')
- else:
- return redirect('account_enter')
- else:
- return redirect('account_enter')
+ user = request.user
+ if user.is_authenticated():
+ return render(request,'account/home.html')
+ context={}
+ if request.method == 'POST':
+ form = UserRegistrationForm(request.POST)
+ if form.is_valid():
+ u_name, pwd, user_email, key= form.save()
+ new_user = authenticate(username=u_name,password=pwd)
+ login(request, new_user)
+ if user_email and key:
+ success, msg = send_user_mail(user_email, key)
+ context = {
+ 'activation_msg':msg
+ }
+ return render(request,'account/activation_status.html',
+ context
+ )
+ return redirect('account_enter')
+ else:
+ return redirect('account_enter')
+ else:
+ return redirect('account_enter')
def activate_user(request, key):
- profile = get_object_or_404(Profile, activation_key=key)
- context = {}
- context['success'] = False
- if profile.is_email_verified:
- context['activation_msg'] = "Your account is already verified"
- return render(request,'account/activation_status.html',context)
- if timezone.now() > profile.key_expiry_time:
- content['msg'] = dedent(
- """
- Your activation time expired. Please try again
- """
- )
- else:
- context['success'] = True
- profile.is_email_verified=True
- profile.save()
- context['msg'] = "Your account is activated"
- return render(request,'account/activation_status.html',context)
+ profile = get_object_or_404(Profile, activation_key=key)
+ context = {}
+ context['success'] = False
+ if profile.is_email_verified:
+ context['activation_msg'] = "Your account is already verified"
+ return render(request,'account/activation_status.html',context)
+ if timezone.now() > profile.key_expiry_time:
+ content['msg'] = dedent(
+ """
+ Your activation time expired. Please try again
+ """
+ )
+ else:
+ context['success'] = True
+ profile.is_email_verified=True
+ profile.save()
+ context['msg'] = "Your account is activated"
+ return render(request,'account/activation_status.html',context)
def new_activation(request, email=None):
- context = {}
- if request.method == 'POST':
- email = request.POST.get('email')
- try:
- user = User.objects.get(email=email)
- except MultipleObjectsReturned:
- context['email_err_msg'] = 'Multiple entries found for this email \
- Please change your email'
- return render(request,'account/activation_status.html',context)
- except ObjectDoesNotExist:
- context['success'] = False
- context['msg'] = "Your account is not verified. Please verify your \
- account"
- return render(request, 'account/activation_status.html',context)
-
- if not user.profile.is_email_verified:
- user.profile.activation_key = generate_activation_key(user.username)
- user.profile.key_expiry_time = timezone.now() \
- + timezone.timedelta(minutes=20)
- user.profile.save()
- new_user_data = User.objects.get(email=email)
- success, msg = send_user_mail(new_user_data.email, \
- new_user_data.profile.activation_key)
-
- if success:
- context['activation_msg'] = msg
- else:
- context['msg'] = msg
- else:
- context['activation_msg'] = "Your account is already verified"
- return render(request,'account/activation_status.html',{})
+ context = {}
+ if request.method == 'POST':
+ email = request.POST.get('email')
+ try:
+ user = User.objects.get(email=email)
+ except MultipleObjectsReturned:
+ context['email_err_msg'] = 'Multiple entries found for this email \
+ Please change your email'
+ return render(request,'account/activation_status.html',context)
+ except ObjectDoesNotExist:
+ context['success'] = False
+ context['msg'] = "Your account is not verified. Please verify your \
+ account"
+ return render(request, 'account/activation_status.html',context)
+
+ if not user.profile.is_email_verified:
+ user.profile.activation_key = generate_activation_key(user.username)
+ user.profile.key_expiry_time = timezone.now() \
+ + timezone.timedelta(minutes=20)
+ user.profile.save()
+ new_user_data = User.objects.get(email=email)
+ success, msg = send_user_mail(new_user_data.email, \
+ new_user_data.profile.activation_key)
+
+ if success:
+ context['activation_msg'] = msg
+ else:
+ context['msg'] = msg
+ else:
+ context['activation_msg'] = "Your account is already verified"
+ return render(request,'account/activation_status.html',{})
def update_email(request):
- context = {}
- if request.method == 'POST':
- email = request.POST.get('email')
- username = request.POST.get('username')
- user = get_object_or_404(User, username=username)
- user.email = email
- user.save()
- return new_activation(request, email)
- else:
- context['email_err_msg'] = "Please Update your email"
- return render(request,'account/activation_status.html',context)
+ context = {}
+ if request.method == 'POST':
+ email = request.POST.get('email')
+ username = request.POST.get('username')
+ user = get_object_or_404(User, username=username)
+ user.email = email
+ user.save()
+ return new_activation(request, email)
+ else:
+ context['email_err_msg'] = "Please Update your email"
+ return render(request,'account/activation_status.html',context)
@login_required
@email_verified
def slot_new(request):
- user = request.user
- slot_history = Slot.objects.filter(user=user).order_by("start_time")
- context = {}
- now = datetime.now(pytz.timezone("UTC"))
- if not request.user.is_authenticated():
- return redirect('account_enter')
- if request.method == 'POST':
- if request.POST.get('delete') == "delete":
- slots = request.POST.getlist("slots")
- Slot.objects.filter(id__in=slots).delete()
- return redirect('slot_new')
- else:
- form = SlotCreationForm(request.POST)
-
- if form.is_valid():
- new_slot = form.save(commit=False)
- if new_slot.start_time >= now:
- new_slot.user = user
- new_slot.save()
- messages.success(request,'Slot created successfully.')
- else:
- messages.error(request,
- 'Start time selected'
- + ' is before today.'
- + 'Please choose again.'
- )
- return redirect('slot_new')
- else:
- form = SlotCreationForm()
- context['history']=slot_history
- context['form']=form
- context['now'] = now
- return render(request,'slot/new.html',context)
+ user = request.user
+ slot_history = Slot.objects.filter(user=user).order_by("start_time")
+ context = {}
+ now = timezone.now()
+ if not request.user.is_authenticated():
+ return redirect('account_enter')
+
+ if request.method == 'POST':
+ if request.POST.get('delete') == "delete":
+ slots = request.POST.getlist("slots")
+ Slot.objects.filter(id__in=slots).delete()
+ if request.POST.get("book_date") == "book_date":
+ form = SlotCreationForm(request.POST)
+ if form.is_valid():
+ new_slot = form.save(commit=False)
+ if new_slot.start_time >= now:
+ new_slot.end_time = new_slot.start_time + timedelta(
+ minutes=settings.SLOT_DURATION
+ )
+ new_slot.user = user
+ new_slot.save()
+ messages.success(request,'Slot created successfully.')
+ else:
+ messages.error(request,
+ 'Start time selected'
+ + ' is before today.'
+ + 'Please choose again.'
+ )
+ if request.POST.get("book_now") == "book_now":
+ slot_now = Slot.objects.create(user=user, start_time=now,
+ end_time=now+timedelta(minutes=55)
+ )
+ messages.success(request,'Slot created successfully.')
+ return redirect("slot_new")
+
+ else:
+ form = SlotCreationForm()
+ context['history']=slot_history
+ context['form']=form
+ context['now'] = now
+ return render(request,'slot/new.html',context)
+
+
+################## Moderator Views ##########################
+
+@login_required
+def dashboard_index(request):
+ context = {}
+ return render(request,'dashboard/dashboard_index.html',context)
+
+###################Experiment Views ######################
+
+def check_connection(request):
+ message = {"message":"TESTOK"}
+ return JsonResponse(message, safe=True, status=200)
+
+@login_required
+def initial_login(request):
+ """ Logs in an user for conducting the experiment on the specified
+ board.
+ Input: req:request object.
+ Output: HttpResponse object.
+ """
+
+ username = request.POST.get("username")
+ rpi_ip = ''
+ try:
+ assigned_mid = 2
+ except Exception as e:
+ return JsonResponse({
+ "STATUS":400,
+ "MESSAGE":{
+ "IS_IP":"1",
+ "DATA":"Invalid username"
+ }
+ })
+ rpi_ip = '10.102.54.71'
+ if rpi_ip is None:
+ return JsonResponse({
+ "STATUS":400,
+ "MESSAGE":{
+ "IS_IP":"1",
+ "DATA":"Board is currently offline"
+ }
+ })
+ return JsonResponse({
+ "STATUS":200,
+ "MESSAGE":{
+ "IS_IP":"1",
+ "DATA":rpi_ip
+ }
+ })
+
+
+@csrf_exempt
+def initiation(request):
+ username = request.POST.get("username")
+ password = request.POST.get("password")
+ user = authenticate(username=username, password=password)
+ if user:
+ if user.is_active:
+ now = timezone.now()
+ slots = Slot.objects.filter(user=user,
+ start_time__gte=now,
+ end_time__lt = now
+ )
+
+ slot = slots.last()
+ if slot:
+ filename = ''
+ message = {
+ "STATUS":1,
+ "MESSAGE": filename
+ }
+ else:
+ message = {
+ "STATUS":0,
+ "MESSAGE":"Slot has ended. Please book the next slot \
+ to continue the experiment"
+ }
+ else:
+ message = {
+ "STATUS":0,
+ "MESSAGE":"Your account is not activated. Please check your \
+ mail for activation link"
+ }
+ else:
+ message = {
+ "STATUS":0,
+ "MESSAGE":"Invalid username and password"
+ }
+
+ return JsonResponse(message, safe=True, status=200) \ No newline at end of file