[python] views

Viewer

  1. from __future__ import unicode_literals
  2. from django.views.decorators.csrf import csrf_protect
  3. from django.core import serializers
  4. import collections
  5. import json
  6. import os
  7. import random
  8. import subprocess
  9. import datetime
  10. import requests
  11. from django.conf import settings
  12. from django.contrib.auth.decorators import login_required
  13. from django.core.files.storage import FileSystemStorage
  14. from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseRedirect
  15. from django.shortcuts import redirect, render
  16. from django.utils import timezone
  17. from django.core.serializers import serialize
  18.  
  19. from applications.academic_information.models import (Course, Curriculum_Instructor,Curriculum,
  20.                                                       Student,Student_attendance,Calendar, Timetable)
  21. from applications.academic_procedures.models import Register
  22. from applications.globals.models import ExtraInfo
  23. from applications.globals.models import *
  24.  
  25. from .forms import *
  26. # from .helpers import create_thumbnail, semester
  27. from .models import *
  28. from .helpers import create_thumbnail, semester
  29. from notification.views import course_management_notif
  30.  
  31. @login_required
  32. def viewcourses(request):
  33.     '''
  34.     desc: Shows all the courses under the user
  35.     '''
  36.     user = request.user
  37.  
  38.     extrainfo = ExtraInfo.objects.select_related().get(user=user)  #get the type of user
  39.     if extrainfo.user_type == 'student':         #if student is using
  40.         student = Student.objects.select_related('id').get(id=extrainfo)
  41.         roll = student.id.id[:4]                       #get the roll no. of the student
  42.         register = Register.objects.select_related().filter(student_id=student, semester=semester(roll))
  43.         #info of registered student
  44.         courses = collections.OrderedDict()   #courses in which student is registerd
  45.         for reg in register:   #info of the courses
  46.             instructor = Curriculum_Instructor.objects.select_related().get(curriculum_id=reg.curr_id)
  47.             courses[reg] = instructor
  48.  
  49.         return render(request, 'coursemanagement/coursemanagement1.html',
  50.                       {'courses': courses,
  51.  
  52.                        'extrainfo': extrainfo})
  53.     elif extrainfo.user_type == 'faculty':   #if the user is lecturer
  54.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)   #get info of the instructor
  55.         curriculum_list = []
  56.         for x in instructor:
  57.             c = Curriculum.objects.select_related().get(curriculum_id = x.curriculum_id.curriculum_id)
  58.             curriculum_list.append(c)
  59.  
  60.         return render(request, 'coursemanagement/coursemanagement1.html',
  61.                       {'instructor': instructor,
  62.                        'extrainfo': extrainfo,
  63.                        'curriculum_list': curriculum_list})
  64.     
  65.     elif extrainfo.id == 'id_admin':
  66.         if request.session.get('currentDesignationSelected') != 'acadadmin':
  67.             return HttpResponseRedirect('/dashboard/')
  68.         acadTtForm = AcademicTimetableForm()
  69.         calendar = Calendar.objects.all()
  70.         timetable = Timetable.objects.all()
  71.         return render(request, 'coursemanagement/academicinfo.html',
  72.                       {'acadTtForm': acadTtForm,
  73.                        'academic_calendar':calendar,
  74.                        'timetable':timetable})
  75.  
  76.  
  77.  
  78.  
  79. @login_required
  80. def course(request, course_code):
  81.     '''
  82.     desc: Home page for each courses for Student/Faculty
  83.     '''
  84.     user = request.user
  85.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  86.     notifs = request.user.notifications.all()
  87.     if extrainfo.user_type == 'student':   #if the user is student .. funtionality used by him/her
  88.         if request.session.get('currentDesignationSelected') != 'student':
  89.             return HttpResponseRedirect('/dashboard/')
  90.         student = Student.objects.select_related('id').get(id=extrainfo)
  91.         roll = student.id.id[:2]
  92.  
  93.         #info about courses he is registered in
  94.         curriculum = Curriculum.objects.select_related('course_id').get(course_code=course_code)
  95.         course = curriculum.course_id
  96.         #instructor of the course
  97.         instructor = Curriculum_Instructor.objects.select_related().get(curriculum_id=curriculum)
  98.         #course material uploaded by the instructor
  99.         # videos = CourseVideo.objects.filter(course_id=course)
  100.         videos = []
  101.         if request.method == 'POST':
  102.             search_url = "https://www.googleapis.com/youtube/v3/search"
  103.             video_url = "https://www.googleapis.com/youtube/v3/videos"
  104.             search_params = {
  105.                 'part''snippet',
  106.                 'q': request.POST['search'],
  107.                 'key': settings.YOUTUBE_DATA_API_KEY,
  108.                 'type''video',
  109.                 'channelId''channel_id'
  110.             }
  111.             videos_ids = []
  112.             r = requests.get(search_url, params=search_params)
  113.             # print(r)
  114.             results = r.json()['items']
  115.             for result in results:
  116.                 videos_ids.append(result['id']['videoId'])
  117.  
  118.             video_params = {
  119.                 'key': settings.YOUTUBE_DATA_API_KEY,
  120.                 'part''snippet,contentDetails',
  121.                 'id'','.join(videos_ids),
  122.                 'maxResults'9
  123.             }
  124.  
  125.             p = requests.get(video_url, params=video_params)
  126.             results1 = p.json()['items']
  127.  
  128.             for result in results1:
  129.                 video_data = {
  130.                     'id': result['id'],
  131.                     # 'url': f'https://www.youtube.com/watch?v={result["id"]}',
  132.                     'title': result['snippet']['title'],
  133.                     # 'duration': int(parse_duration(result['contentDetails']['duration']).total_seconds() // 60),
  134.                     # 'thumbnails': result['snippet']['thumbnails']['high']['url']
  135.                 }
  136.  
  137.                 videos.append(video_data)
  138.         else:
  139.             x = 0
  140.             # channel_url = "https://www.googleapis.com/youtube/v3/channels"
  141.             # playlist_url = "https://www.googleapis.com/youtube/v3/playlistItems"
  142.             # videos_url = "https://www.googleapis.com/youtube/v3/videos"
  143.  
  144.             # videos_list = []
  145.             # channel_params = {
  146.             #     'part': 'contentDetails',
  147.             #     'id': 'channel_id',
  148.             #     'key': settings.YOUTUBE_DATA_API_KEY,
  149.             # }
  150.             # r = requests.get(channel_url, params=channel_params)
  151.             # results = r.json()['items'][0]['contentDetails']['relatedPlaylists']['uploads']
  152.  
  153.             # playlist_params = {
  154.             #     'key': settings.YOUTUBE_DATA_API_KEY,
  155.             #     'part': 'snippet',
  156.             #     'playlistId': results,
  157.             #     'maxResults': 5,
  158.             # }
  159.             # p = requests.get(playlist_url, params=playlist_params)
  160.             # results1 = p.json()['items']
  161.  
  162.             # for result in results1:
  163.             #     # print(results)
  164.             #     videos_list.append(result['snippet']['resourceId']['videoId'])
  165.  
  166.             # videos_params = {
  167.             #     'key': settings.YOUTUBE_DATA_API_KEY,
  168.             #     'part': 'snippet',
  169.             #     'id': ','.join(videos_list)
  170.             # }
  171.  
  172.             # v = requests.get(videos_url, params=videos_params)
  173.             # results2 = v.json()['items']
  174.             # videos = []
  175.             # for res in results2:
  176.             #     video_data = {
  177.             #         'id': res['id'],
  178.             #         'title': res['snippet']['title'],
  179.             #     }
  180.  
  181.             #     videos.append(video_data)
  182.             # print(videos)
  183.  
  184.         modules = Modules.objects.select_related().filter(course_id=course)
  185.         slides = CourseDocuments.objects.select_related().filter(course_id=course)
  186.  
  187.         modules_with_slides = collections.OrderedDict()
  188.         for m in modules:
  189.             sl = []
  190.             for slide in slides:
  191.                 if slide.module_id.id == m.id:
  192.                     sl.append(slide)
  193.             if len(sl) == 0:
  194.                 modules_with_slides[m] = 0
  195.             else:
  196.                 modules_with_slides[m] = sl
  197.  
  198.         quiz = Quiz.objects.select_related().filter(course_id=course)
  199.         assignment = Assignment.objects.select_related().filter(course_id=course)
  200.         submitable_assignments = []
  201.         for assi in assignment:
  202.             if assi.submit_date.date() >= datetime.date.today():
  203.                 submitable_assignments.append(assi)
  204.                 
  205.         student_assignment = []
  206.         for assi in assignment:
  207.             sa = StudentAssignment.objects.select_related().filter(assignment_id=assi, student_id=student)
  208.             student_assignment.append(sa)
  209.         '''
  210.         marks to store the marks of quizes of student
  211.         marks_pk to store the quizs taken by student
  212.         quizs=>quizs that are not over
  213.         '''
  214.         # marks = []
  215.         # quizs = []
  216.         # marks_pk = []
  217.         # #quizzes details
  218.         # for q in quiz:
  219.         #     qs = QuizResult.objects.select_related().filter(quiz_id=q, student_id=student)
  220.         #     qs_pk = qs.values_list('quiz_id', flat=True)
  221.         #     if q.end_time > timezone.now():
  222.         #         quizs.append(q)
  223.         #     if qs:
  224.         #         marks.append(qs[0])
  225.         #         marks_pk.append(qs_pk[0])
  226.         
  227.         present_attendance = {}
  228.         total_attendance=None
  229.         a = Student_attendance.objects.select_related().filter(student_id=student , instructor_id = instructor)
  230.         total_attendance = len(a)
  231.         count = 0
  232.         for row in a:
  233.                 if(row.present):
  234.                     count+=1
  235.                     present_attendance[row.date] = 1
  236.                 else:
  237.                     present_attendance[row.date] = 0
  238.         attendance_percent = 0
  239.         if(total_attendance):
  240.             attendance_percent = count/total_attendance*100
  241.             attendance_percent = round(attendance_percent,2)
  242.  
  243.         attendance_file = {}
  244.         try:
  245.             attendance_file = AttendanceFiles.objects.select_related().filter(course_id=course)
  246.         except AttendanceFiles.DoesNotExist:
  247.             attendance_file = {}
  248.  
  249.         
  250.         lec = 0
  251.         comments = Forum.objects.select_related().filter(course_id=course).order_by('comment_time')
  252.         answers = collections.OrderedDict()
  253.         for comment in comments:
  254.             fr = ForumReply.objects.select_related().filter(forum_reply=comment)
  255.             fr1 = ForumReply.objects.select_related().filter(forum_ques=comment)
  256.             if not fr:
  257.                 answers[comment] = fr1
  258.         return render(request, 'coursemanagement/viewcourse.html',
  259.                       {'course': course,
  260.                        'modules': modules_with_slides,
  261.                        'instructor': instructor,
  262.                        'slides': slides,
  263.                        'extrainfo': extrainfo,
  264.                        'answers': answers,
  265.                        'assignment': assignment,
  266.                        'submitable_assignment':submitable_assignments,
  267.                        'student_assignment': student_assignment,
  268.                        'total_attendance' : total_attendance,
  269.                        'present_attendance':present_attendance,
  270.                        'attendance_percent': attendance_percent,
  271.                        'Lecturer': lec,
  272.                        'attendance_file':attendance_file,
  273.                        'curriculum': curriculum,
  274.                        'notifications': notifs})
  275.  
  276.     else:
  277.         if request.session.get('currentDesignationSelected') != "faculty" and request.session.get('currentDesignationSelected') != "Associate Professor" and request.session.get('currentDesignationSelected') != "Professor" and request.session.get('currentDesignationSelected') != "Assistant Professor":
  278.             return HttpResponseRedirect('/dashboard/')
  279.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  280.         for ins in instructor:
  281.             if ins.curriculum_id.course_code == course_code:
  282.                 registered_students = Register.objects.select_related('student_id').filter(curr_id = ins.curriculum_id.curriculum_id)
  283.                 students = {}
  284.                 test_marks = {}
  285.                 for x in registered_students:
  286.                      students[x.student_id.id.id] = (x.student_id.id.user.first_name + " " + x.student_id.id.user.last_name)
  287.                 #     stored_marks = StoreMarks.objects.filter(mid = x.r_id)
  288.                 #     for x in stored_marks:
  289.                 #         test_marks[x.id] = (x.mid.r_id,x.exam_type,x.marks)
  290.                     #marks_id.append(x.curr_id)
  291.                     #print(stored_marks)
  292.                     #for x in stored_marks:
  293.                     #    print(x)
  294.  
  295.                 curriculum = ins.curriculum_id
  296.                 course = ins.curriculum_id.course_id
  297.                 result_topics = Topics.objects.select_related().filter(course_id = course)
  298.                 if (len(list(result_topics))!=0):
  299.                     topics = result_topics
  300.                 else:
  301.                     topics = None
  302.                 present_attendance = {}
  303.                 total_attendance=None
  304.                 for x in registered_students:
  305.                     a = Student_attendance.objects.select_related().filter(student_id=x.student_id , instructor_id = ins)
  306.                     total_attendance = len(a)
  307.                     count =0
  308.                     for row in a:
  309.                         if(row.present):
  310.                             count += 1
  311.                     
  312.                     attendance_percent = 0
  313.                     if(total_attendance):
  314.                         attendance_percent = count/total_attendance*100
  315.                         attendance_percent = round(attendance_percent,2)
  316.                     present_attendance[x.student_id.id.id] = {
  317.                         'count': count,
  318.                         'attendance_percent': attendance_percent
  319.                     }
  320.  
  321.         lec = 1
  322.         videos = []
  323.         # videos = CourseVideo.objects.filter(course_id=course)
  324.         # channel_url = "https://www.googleapis.com/youtube/v3/channels"
  325.         # playlist_url = "https://www.googleapis.com/youtube/v3/playlistItems"
  326.         # videos_url = "https://www.googleapis.com/youtube/v3/videos"
  327.  
  328.         # videos_list = []
  329.         # channel_params = {
  330.         #     'part': 'contentDetails',
  331.         #     # 'forUsername': 'TechGuyWeb',
  332.         #     'id': 'UCdGQeihs84hyCssI2KuAPmA',
  333.         #     'key': settings.YOUTUBE_DATA_API_KEY,
  334.         # }
  335.         # r = requests.get(channel_url, params=channel_params)
  336.         # results = r.json()['items'][0]['contentDetails']['relatedPlaylists']['uploads']
  337.  
  338.         # playlist_params = {
  339.         #     'key': settings.YOUTUBE_DATA_API_KEY,
  340.         #     'part': 'snippet',
  341.         #     'playlistId': results,
  342.         #     'maxResults': 5,
  343.         # }
  344.         # p = requests.get(playlist_url, params=playlist_params)
  345.         # results1 = p.json()['items']
  346.  
  347.         # for result in results1:
  348.         #     videos_list.append(result['snippet']['resourceId']['videoId'])
  349.  
  350.         # videos_params = {
  351.         #     'key': settings.YOUTUBE_DATA_API_KEY,
  352.         #     'part': 'snippet',
  353.         #     'id': ','.join(videos_list)
  354.         # }
  355.  
  356.         # v = requests.get(videos_url, params=videos_params)
  357.         # results2 = v.json()['items']
  358.         # videos = []
  359.         # for res in results2:
  360.         #     video_data = {
  361.         #         'id': res['id'],
  362.         #         'title': res['snippet']['title'],
  363.         #     }
  364.  
  365.         #     videos.append(video_data)
  366.         modules = Modules.objects.select_related().filter(course_id=course)
  367.         slides = CourseDocuments.objects.select_related().filter(course_id=course)
  368.         modules_with_slides = collections.OrderedDict()
  369.         for m in modules:
  370.             sl = []
  371.             for slide in slides:
  372.                 if slide.module_id.id == m.id:
  373.                     sl.append(slide)
  374.             if len(sl) == 0:
  375.                 modules_with_slides[m] = 0
  376.             else:
  377.                 modules_with_slides[m] = sl
  378.         # quiz = Quiz.objects.select_related().filter(course_id=course)
  379.         # marks = []
  380.         # quizs = []
  381.         assignment = Assignment.objects.select_related().filter(course_id=course)
  382.         student_assignment = []
  383.         for assi in assignment:
  384.             sa = StudentAssignment.objects.select_related().filter(assignment_id=assi)
  385.             student_assignment.append(sa)
  386.         # for q in quiz:
  387.         #     qs = QuizResult.objects.select_related().filter(quiz_id=q)
  388.         #     if q.end_time > timezone.now():
  389.         #         quizs.append(q)
  390.         #     if len(qs) != 0:
  391.         #         marks.append(qs)
  392.         comments = Forum.objects.select_related().filter(course_id=course).order_by('comment_time')
  393.         answers = collections.OrderedDict()
  394.         for comment in comments:
  395.             fr = ForumReply.objects.select_related().filter(forum_reply=comment)
  396.             fr1 = ForumReply.objects.select_related().filter(forum_ques=comment)
  397.             if not fr:
  398.                 answers[comment] = fr1
  399.         # qb = QuestionBank.objects.select_related().filter(instructor_id=extrainfo, course_id=course)
  400.  
  401.         gradingscheme = GradingScheme.objects.select_related().filter(course_id=course)
  402.         try:
  403.             gradingscheme_grades = GradingScheme_grades.objects.select_related().get(course_id=course)
  404.         except GradingScheme_grades.DoesNotExist:
  405.             gradingscheme_grades = {}
  406.  
  407.         try:
  408.             student_grades = Student_grades.objects.select_related().filter(course_id=course)
  409.         except Student_grades.DoesNotExist:
  410.             student_grades = {}
  411.  
  412.         for row in student_grades:
  413.             print(row.student_id.id.user.username)
  414.  
  415.         return render(request, 'coursemanagement/viewcourse.html',
  416.                       {'instructor': instructor,
  417.                        'extrainfo': extrainfo,
  418.                        'curriculum': curriculum,
  419.                        'students' : students,
  420.                        'registered_students': registered_students,
  421.                        'modules': modules_with_slides,
  422.                        'slides': slides,
  423.                        'topics':topics,
  424.                        'course': course,
  425.                        'answers': answers,
  426.                        'assignment': assignment,
  427.                        'student_assignment': student_assignment,
  428.                        'Lecturer': lec,
  429.                        'notifications': notifs,
  430.                        'students': students,
  431.                        'total_attendance' : total_attendance,
  432.                        'present_attendance':present_attendance,
  433.                        'test_marks': test_marks,
  434.                        'gradingscheme':gradingscheme,
  435.                        'gradingscheme_grades': gradingscheme_grades,
  436.                        'student_grades' : student_grades
  437.                        })
  438.  
  439.  
  440. #when student uploads the assignment's solution
  441. @login_required
  442. def upload_assignment(request, course_code):
  443.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  444.     if extrainfo.user_type == "student":
  445.         student = Student.objects.select_related('id').get(id=extrainfo)
  446.         try:
  447.             #all details of the assignment
  448.             doc = request.FILES.get('img')    #the images in the assignment
  449.             assi_name = request.POST.get('assignment_topic')
  450.             name = request.POST.get('name')
  451.             assign = Assignment.objects.get(pk=assi_name)
  452.             filename, file_extenstion = os.path.splitext(request.FILES.get('img').name)
  453.         except:
  454.             return HttpResponse("Please fill each and every field correctly!", status=422)
  455.         filename = name
  456.         full_path = settings.MEDIA_ROOT + "/online_cms/" + course_code + "/assi/"  #storing the media files
  457.         full_path = full_path + assign.assignment_name + "/" + student.id.id + "/"
  458.         url = settings.MEDIA_URL + filename
  459.         if not os.path.isdir(full_path):
  460.             cmd = "mkdir " + full_path
  461.             subprocess.call(cmd, shell=True)
  462.         fs = FileSystemStorage(full_path, url)
  463.         fs.save(name + file_extenstion, doc)  #saving the media files
  464.         # uploaded_file_url = full_path+ "/" + name + file_extenstion
  465.         uploaded_file_url = "/media/online_cms/" + course_code + "/assi/" + assign.assignment_name + "/" + student.id.id + "/" + name + file_extenstion
  466.         # to save the solution of assignment the database
  467.         sa = StudentAssignment(
  468.          student_id=student,
  469.          assignment_id=assign,
  470.          upload_url=uploaded_file_url,
  471.          assign_name=name+file_extenstion
  472.         )
  473.         sa.save()
  474.         return HttpResponse("Upload successful.")
  475.     else:
  476.         return HttpResponse("not found")
  477.  
  478. # when faculty creates modules
  479. @login_required
  480. def add_modules(request, course_code):
  481.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  482.     if extrainfo.user_type == "faculty":  #user should be faculty only
  483.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)  #get the course information
  484.  
  485.         for ins in instructor:
  486.             if ins.curriculum_id.course_code == course_code:
  487.                 course = ins.curriculum_id.course_id
  488.  
  489.         try:
  490.             module_name = request.POST.get('module_name')
  491.         except:
  492.             return HttpResponse("Please fill each and every field correctly!",status=422)
  493.         
  494.         Modules.objects.create(
  495.             course_id=course,
  496.             module_name=module_name
  497.         )
  498.         return HttpResponse("Module creation successful")
  499.     else:
  500.         return HttpResponse("Not found", status=400)
  501.  
  502. # when faculty uploads the slides, ppt
  503. @login_required
  504. def add_document(request, course_code):
  505.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  506.     if extrainfo.user_type == "faculty":  #user should be faculty only
  507.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)  #get the course information
  508.  
  509.         for ins in instructor:
  510.             if ins.curriculum_id.course_code == course_code:
  511.                 course = ins.curriculum_id.course_id
  512.  
  513.         try:
  514.             description = request.POST.get('description')
  515.             doc = request.FILES.get('img')
  516.             name = request.POST.get('name')
  517.             module_id = request.POST.get('module_id')
  518.             filename, file_extenstion = os.path.splitext(request.FILES.get('img').name)
  519.         except:
  520.             return HttpResponse("Please fill each and every field correctly!",status=422)
  521.         #for storing the media files properly
  522.         filename = name
  523.         full_path = settings.MEDIA_ROOT + "/online_cms/" + course_code + "/doc/"
  524.         url = settings.MEDIA_URL + filename + file_extenstion
  525.         if not os.path.isdir(full_path):
  526.             cmd = "mkdir " + full_path
  527.             subprocess.call(cmd, shell=True)
  528.         fs = FileSystemStorage(full_path, url)
  529.         fs.save(filename + file_extenstion, doc)
  530.         # uploaded_file_url = full_path + filename + file_extenstion
  531.         uploaded_file_url = "/media/online_cms/" + course_code + "/doc/" + filename + file_extenstion
  532.         #save the info/details in the database
  533.         CourseDocuments.objects.create(
  534.             course_id=course,
  535.             upload_time=datetime.datetime.now(),
  536.             description=description,
  537.             document_url=uploaded_file_url,
  538.             document_name=name+file_extenstion,
  539.             module_id_id=module_id
  540.         )
  541.         return HttpResponse("Upload successful.")
  542.     else:
  543.         return HttpResponse("Not found")
  544.  
  545. # if faculty uploads the attendance file
  546. @login_required
  547. def add_attendance(request, course_code):
  548.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  549.     if extrainfo.user_type == "faculty":  #user should be faculty only
  550.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)  #get the course information
  551.  
  552.         for ins in instructor:
  553.             if ins.curriculum_id.course_code == course_code:
  554.                 course = ins.curriculum_id.course_id
  555.  
  556.         try:
  557.             doc = request.FILES.get('img')
  558.             name = request.POST.get('name')
  559.             filename, file_extenstion = os.path.splitext(request.FILES.get('img').name)
  560.         except:
  561.             return HttpResponse("Please fill each and every field correctly!",status=422)
  562.         #for storing the media files properly
  563.         filename = name
  564.         full_path = settings.MEDIA_ROOT + "/online_cms/" + course_code + "/attendance/"
  565.         url = settings.MEDIA_URL + filename + file_extenstion
  566.         if not os.path.isdir(full_path):
  567.             cmd = "mkdir " + full_path
  568.             subprocess.call(cmd, shell=True)
  569.         fs = FileSystemStorage(full_path, url)
  570.         fs.save(filename + file_extenstion, doc)
  571.         # uploaded_file_url = full_path + filename + file_extenstion
  572.         uploaded_file_url = "/media/online_cms/" + course_code + "/attendance/" + filename + file_extenstion
  573.         #save the info/details in the database
  574.         AttendanceFiles.objects.create(
  575.             course_id=course,
  576.             upload_time=datetime.datetime.now(),
  577.             file_url=uploaded_file_url,
  578.             file_name=name+file_extenstion
  579.         )
  580.         return HttpResponse("Upload successful.")
  581.     else:
  582.         return HttpResponse("Not found")
  583.  
  584. #it is to delete things(assignment, slides, videos, ) from the dustin icon or delete buttons
  585. @login_required
  586. def delete(request, course_code):
  587.     data_type = request.POST.get('type')
  588.     user = request.user
  589.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  590.     #get the course and user information first
  591.  
  592.     if extrainfo.user_type == "faculty":
  593.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  594.         for ins in instructor:
  595.             if ins.curriculum_id.course_code == course_code:
  596.                 course = ins.curriculum_id.course_id
  597.  
  598.     if extrainfo.user_type == 'student':
  599.         curriculum_details = Curriculum.objects.select_related('course_id').filter(course_code=course_code)
  600.         course = curriculum_details
  601.         course1 = curriculum_details[0].course_id
  602.         curriculum1 = course[0]
  603.     pk = request.POST.get('pk')
  604.     path = ""
  605.     #to delete videos
  606.     if data_type == 'video':
  607.         video = CourseVideo.objects.get(pk=pk, course_id=course)
  608.         path = video.video_url
  609.         video.delete()
  610.     elif data_type == 'module':
  611.         module = Modules.objects.select_related().get(pk=pk, course_id=course)
  612.         module.delete()
  613.     #to delete slides/documents
  614.     elif data_type == 'slide':
  615.         slide = CourseDocuments.objects.select_related().get(pk=pk, course_id=course)
  616.         path = slide.document_url
  617.         slide.delete()
  618.     #to delete the submitted assignment
  619.     elif data_type == 'stuassignment':
  620.         stu_assi = StudentAssignment.objects.select_related().get(pk=pk)
  621.         path = stu_assi.upload_url
  622.         stu_assi.delete()
  623.     #to delete the assignment uploaded by faculty
  624.     elif data_type == 'lecassignment':
  625.         lec_assi = Assignment.objects.select_related().get(pk=pk)
  626.         path = lec_assi.assignment_url
  627.         lec_assi.delete()
  628.     if path:    
  629.         cmd = "rm "+path
  630.         subprocess.call(cmd, shell=True)
  631.     
  632.     data = { 'msg''Data Deleted successfully'}
  633.     return HttpResponse(json.dumps(data), content_type='application/json')
  634.  
  635. # to upload videos related to the course
  636. @login_required
  637. def add_videos(request, course_code):
  638.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  639.     #only faculty can add the videos
  640.     if extrainfo.user_type == "faculty":
  641.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  642.         for ins in instructor:
  643.             if ins.curriculum_id.course_code == course_code:
  644.                 course = ins.curriculum_id.course_id
  645.         try:
  646.             description = request.POST.get('description')   #the media files required
  647.             vid = request.FILES.get('img')
  648.             name = request.POST.get('name')
  649.             filename, file_extenstion = os.path.splitext(request.FILES.get('img').name)
  650.         except:
  651.             return HttpResponse("Please fill each and every field correctly!")
  652.         #saving the media files
  653.         filename = name
  654.         full_path = settings.MEDIA_ROOT + "/online_cms/" + course_code + "/vid/"
  655.         url = settings.MEDIA_URL+filename + file_extenstion
  656.         if not os.path.isdir(full_path):
  657.             cmd = "mkdir "+full_path
  658.             subprocess.call(cmd, shell=True)
  659.         fs = FileSystemStorage(full_path, url)
  660.         fs.save(filename+file_extenstion, vid)
  661.         uploaded_file_url = full_path + filename + file_extenstion
  662.         #saving in the
  663.         video = CourseVideo.objects.create(
  664.             course_id=course,
  665.             upload_time=datetime.datetime.now(),
  666.             description=description,
  667.             video_url=uploaded_file_url,
  668.             video_name=name
  669.         )
  670.         create_thumbnail(course_code,course, video, name, file_extenstion, 'Big', 1, '700:500')
  671.         create_thumbnail(course_code,course, video, name, file_extenstion, 'Small', 1, '170:127')
  672.         return HttpResponse("Upload successful.")
  673.     else:
  674.         return HttpResponse("Not found")
  675.  
  676.  
  677. @login_required
  678. def forum(request, course_code):
  679.     # take care of sem
  680.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  681.     if extrainfo.user_type == "student":
  682.         student = Student.objects.select_related('id').get(id=extrainfo)
  683.         roll = student.id.id[:4]
  684.         course = Course.objects.select_related().get(course_id=course_code, sem=semester(roll))
  685.     else:
  686.         instructor = Curriculum_Instructor.objects.select_related().filter(instructor_id=extrainfo)
  687.         for ins in instructor:
  688.             if ins.course_id.course_id == course_code:
  689.                 course = ins.course_id
  690.     comments = Forum.objects.select_related().filter(course_id=course).order_by('comment_time')
  691.     instructor = Curriculum_Instructor.objects.get(course_id=course)
  692.     if instructor.instructor_id.user.pk == request.user.pk:
  693.         lec = 1
  694.     else:
  695.         lec = 0
  696.     answers = collections.OrderedDict()
  697.     for comment in comments:
  698.         fr = ForumReply.objects.select_related().filter(forum_reply=comment)
  699.         fr1 = ForumReply.objects.select_related().filter(forum_ques=comment)
  700.         if not fr:
  701.             answers[comment] = fr1
  702.     context = {'course': course, 'answers': answers, 'Lecturer': lec}
  703.     return render(request, 'online_cms/forum.html', context)
  704.  
  705.  
  706. @login_required
  707. def ajax_reply(request, course_code):
  708.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  709.     if extrainfo.user_type == "student":
  710.         student = Student.objects.select_related('id').get(id=extrainfo)
  711.         roll = student.id.id[:4]
  712.  
  713.         curriculum_details = Curriculum.objects.select_related('course_id').filter(course_code=course_code)  #curriculum id
  714.         #print(curriculum_details[0].course_id)
  715.         #print(Curriculum.objects.values_list('curriculum_id'))
  716.         course =  curriculum_details[0].course_id
  717.        # course = Course.objects.get(course_id=course_code, sem=semester(roll))
  718.     else:
  719.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  720.         for ins in instructor:
  721.             if ins.curriculum_id.course_code == course_code:
  722.                 course = ins.curriculum_id.course_id
  723.     ex = ExtraInfo.objects.select_related().get(user=request.user)
  724.     f = Forum(
  725.         course_id=course,
  726.         commenter_id=ex,
  727.         comment=request.POST.get('reply')
  728.     )
  729.     f.save()
  730.     ques = Forum.objects.select_related().get(pk=request.POST.get('question'))
  731.     fr = ForumReply(
  732.         forum_ques=ques,
  733.         forum_reply=f
  734.     )
  735.     fr.save()
  736.     name = request.user.first_name + " " + request.user.last_name
  737.     time = f.comment_time.strftime('%b. %d, %Y, %I:%M %p')
  738.     data = {'pk': f.pk, 'reply': f.comment, 'replier': name, 'time'time}
  739.     return HttpResponse(json.dumps(data), content_type='application/json')
  740.  
  741.  
  742. @login_required
  743. def ajax_new(request, course_code):
  744.     # extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  745.     # if extrainfo.user_type == "student":
  746.     #     student = Student.objects.select_related('id').get(id=extrainfo)
  747.     #     roll = student.id.id[:4]
  748.     #     #course = Course.objects.get(course_id=course_code, sem=semester(roll))
  749.     #     curriculum_details = Curriculum.objects.select_related('course_id').filter(course_code=course_code)  #curriculum id
  750.     #     #print(curriculum_details[0].course_id)
  751.     #     #print(Curriculum.objects.values_list('curriculum_id'))
  752.     #     course =  curriculum_details[0].course_id
  753.     # else:
  754.  
  755.     #     instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  756.     #     for ins in instructor:
  757.     #         if ins.curriculum_id.course_code == course_code:
  758.     #             course = ins.curriculum_id.course_id
  759.     # ex = ExtraInfo.objects.select_related().get(user=request.user)
  760.     # f = Forum(
  761.     #     course_id=course,
  762.     #     commenter_id=ex,
  763.     #     comment=request.POST.get('question')
  764.     # )
  765.     # f.save()
  766.     # name = request.user.first_name + " " + request.user.last_name
  767.     # time = f.comment_time.strftime('%b. %d, %Y, %I:%M %p')
  768.  
  769.     # data = {'pk': f.pk, 'question': f.comment, 'replier': f.commenter_id.user.username,
  770.     #         'time': time, 'name': name}
  771.     ex = ExtraInfo.objects.select_related().get(user=request.user)
  772.     if ex.user_type == "student":
  773.         print()
  774.     else:
  775.         HttpResponse('Announcement in Progress')
  776.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=ex)
  777.         for ins in instructor:
  778.             if ins.curriculum_id.course_code == course_code:
  779.                 course = ins.curriculum_id.course_id    
  780.                 registered_students = Register.objects.filter(curr_id = ins.curriculum_id.curriculum_id)
  781.         
  782.         f = Forum(
  783.             course_id=course,
  784.             commenter_id=ex,
  785.             comment=request.POST.get('question')
  786.         )
  787.         f.save()
  788.         name = request.user.first_name + " " + request.user.last_name
  789.         time = f.comment_time.strftime('%b. %d, %Y, %I:%M %p')
  790.         data = {'pk': f.pk, 'question': f.comment, 'replier': f.commenter_id.user.username,
  791.                 'time'time, 'name': name}
  792.         # course_json = serialize('json', [course])
  793.  
  794.         student = []        
  795.         for reg_student in registered_students:
  796.             student.append(Student.objects.get(id = str(reg_student.student_id)).id.user)
  797.             # student = Student.objects.get(id = str(reg_student.student_id))
  798.             
  799.         course_management_notif(request.user, student,  request.POST.get('question'), course.pk, str(course),course_code, "announcement")
  800.  
  801.     return HttpResponse(json.dumps(data), content_type='application/json')
  802.  
  803.  
  804. @login_required
  805. def ajax_remove(request, course_code):
  806.     f = Forum.objects.select_related().get(
  807.         pk=request.POST.get('question')
  808.     )
  809.     fr = ForumReply.objects.select_related().filter(
  810.         forum_reply=f
  811.     )
  812.  
  813.     if not fr:
  814.         fr1 = ForumReply.objects.select_related().filter(
  815.             forum_ques=f
  816.         )
  817.         for x in fr1:
  818.             x.forum_reply.delete()
  819.             x.delete()
  820.         f.delete()
  821.     else:
  822.         fr.delete()
  823.         f.delete()
  824.     data = {'message''deleted'}
  825.     return HttpResponse(json.dumps(data), content_type='application/json')
  826.  
  827.  
  828. @login_required
  829. def add_assignment(request, course_code):                 #from faculty side
  830.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  831.     if extrainfo.user_type == "faculty":
  832.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  833.         for ins in instructor:
  834.             if ins.curriculum_id.course_code == course_code:
  835.                 course = ins.curriculum_id.course_id
  836.                 registered_students = Register.objects.filter(curr_id = ins.curriculum_id.curriculum_id)
  837.         try:
  838.             assi = request.FILES.get('img')
  839.             name = request.POST.get('name')
  840.             filename, file_extenstion = os.path.splitext(request.FILES.get('img').name)
  841.         except:
  842.             return HttpResponse("Please Enter The Form Properly",status=422)
  843.         filename = name
  844.         full_path = settings.MEDIA_ROOT + "/online_cms/" + course_code + "/assi/" + name + "/"
  845.         url = settings.MEDIA_URL + filename
  846.         if not os.path.isdir(full_path):
  847.             cmd = "mkdir " + full_path
  848.             subprocess.call(cmd, shell=True)
  849.         fs = FileSystemStorage(full_path, url)
  850.         fs.save(filename+file_extenstion, assi)
  851.         uploaded_file_url = "/media/online_cms/"+ course_code + "/assi/" + name + "/" + filename + file_extenstion
  852.         # uploaded_file_url = full_path + filename + file_extenstion
  853.         assign = Assignment(
  854.             course_id=course,
  855.             submit_date=request.POST.get('myDate'),
  856.             assignment_url=uploaded_file_url,
  857.             assignment_name=name
  858.         )
  859.         assign.save()
  860.         student = []        
  861.         for reg_student in registered_students:
  862.             student.append(Student.objects.get(id = str(reg_student.student_id)).id.user)
  863.         print(student)
  864.         course_management_notif(request.user, student,  "New Assignment Created!", course.pk, str(course),course_code,0)
  865.         return HttpResponse("Assignment created successfully.")
  866.     else:
  867.         return HttpResponse("not found")
  868.  
  869.  
  870. @login_required
  871. def edit_bank(request, course_code, qb_code):
  872.     user = request.user
  873.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  874.     lec = 1
  875.     if extrainfo.user_type == "faculty":
  876.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  877.         for ins in instructor:
  878.             if ins.curriculum_id.course_code == course_code:
  879.                 course = ins.curriculum_id.course_id
  880.         qb = QuestionBank.objects.select_related().filter(id=qb_code)
  881.         topics = Topics.objects.select_related().filter(course_id=course)
  882.         Topic = {}
  883.         if qb:
  884.             questions = Question.objects.select_related().filter(question_bank=qb[0]).values_list('topic', flat=True)
  885.             counter = dict(collections.Counter(questions))
  886.             for topic in topics:
  887.                 if topic.pk in counter.keys():
  888.                     Topic[topic] = counter[topic.pk]
  889.                 else:
  890.                     Topic[topic] = 0
  891.             context = {
  892.                 'Lecturer': lec,
  893.                 'questionbank': qb[0],
  894.                 'topics': Topic,
  895.                 'course': course
  896.                 }
  897.             return render(request, 'coursemanagement/create_bank.html', context)
  898.         else:
  899.             return HttpResponse("Unauthorized")
  900.  
  901.  
  902. @login_required
  903. def create_bank(request, course_code):
  904.     user = request.user
  905.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  906.     if extrainfo.user_type == "faculty":
  907.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  908.         for ins in instructor:
  909.             if ins.curriculum_id.course_code == course_code:
  910.                 course = ins.curriculum_id.course_id
  911.         qb = QuestionBank.objects.create(instructor_id=extrainfo,
  912.                                          course_id=course, name=request.POST.get('qbname'))
  913.         return redirect('/ocms/' + course_code + '/edit_bank/'+str(qb.id))
  914.  
  915. @login_required
  916. def create_topic(request, course_code):
  917.     user = request.user
  918.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  919.     if extrainfo.user_type == "faculty":
  920.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  921.         for ins in instructor:
  922.             if ins.curriculum_id.course_code == course_code:
  923.                 course = ins.curriculum_id.course_id
  924.         topic = Topics.objects.create(course_id=course, topic_name=request.POST.get('topic_name'))
  925.         return redirect('/ocms/' + course_code)
  926.  
  927.  
  928.  
  929. @login_required
  930. def remove_bank(request, course_code):
  931.     user = request.user
  932.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  933.     if extrainfo.user_type == "faculty":
  934.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  935.         for ins in instructor:
  936.             if ins.curriculum_id.course_code == course_code:
  937.                 course = ins.curriculum_id.course_id
  938.         qb = QuestionBank.objects.select_related().get(id=request.POST.get('pk'))
  939.         qb.delete()
  940.         qb = QuestionBank.objects.select_related().filter(instructor_id=extrainfo, course_id=course)
  941.         data = {'message'"Removed", 'numberof_qbs'len(qb)}
  942.         return HttpResponse(json.dumps(data), content_type='application/json')
  943.  
  944. @login_required
  945. def remove_topic(request, course_code):
  946.     user = request.user
  947.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  948.     if extrainfo.user_type == "faculty":
  949.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  950.         for ins in instructor:
  951.             if ins.curriculum_id.course_code == course_code:
  952.                 course = ins.curriculum_id.course_id
  953.         topic = Topics.objects.select_related().get(id=request.POST.get('pk'))
  954.         topic.delete()
  955.         n_topics = Topics.objects.select_related().filter(course_id=course)
  956.         data = {'message'"Removed", 'numberof_topics'len(n_topics)}
  957.         return HttpResponse(json.dumps(data), content_type='application/json')
  958.  
  959.  
  960. @login_required
  961. def add_question(request, course_id, qb_code, topic_id):
  962.     user = request.user
  963.     course = Course.objects.select_related().get(pk=course_id)
  964.     curriculum = Curriculum.objects.select_related().get(course_id=course)
  965.     course_code = curriculum.course_code
  966.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  967.     if extrainfo.user_type == "faculty":
  968.         qb = QuestionBank.objects.select_related().filter(pk=qb_code)
  969.         topic = Topics.objects.select_related().get(id=request.POST.get('topic'))
  970.         try:
  971.             filename, file_extenstion = os.path.splitext(request.FILES['image'].name)
  972.             image = request.FILES['image']
  973.             topic_name = topic.topic_name.replace(" ", "_")[:-2]
  974.             full_path = settings.MEDIA_ROOT + "/online_cms/" + course_code
  975.             full_path = full_path + "/qb/" + qb_code + "/" + topic_name + "/"
  976.             url = settings.MEDIA_URL + filename
  977.             if not os.path.isdir(full_path):
  978.                 cmd = "mkdir " + full_path
  979.                 subprocess.call(cmd, shell=True)
  980.             fs = FileSystemStorage(full_path, url)
  981.             fs.save(image.name, image)
  982.             uploaded_file_url = "/media/online_cms/" + course_code
  983.             uploaded_file_url = uploaded_file_url + "/qb/" + qb_code + "/"
  984.             uploaded_file_url = uploaded_file_url + topic_name + "/" + image.name
  985.         except:
  986.             uploaded_file_url = None
  987.  
  988.         Question.objects.create(
  989.             question_bank=qb[0],
  990.             topic=topic,
  991.             image=uploaded_file_url,
  992.             question=request.POST.get('problem-statement'),
  993.             options1=request.POST.get('option1'),
  994.             options2=request.POST.get('option2'),
  995.             options3=request.POST.get('option3'),
  996.             options4=request.POST.get('option4'),
  997.             options5=request.POST.get('option5'),
  998.             answer=request.POST.get('answer'),
  999.             marks=request.POST.get('score')
  1000.         )
  1001.         return redirect('/ocms/' + course_code + '/edit_bank/'+str(qb[0].id))
  1002.  
  1003.  
  1004. @login_required
  1005. def remove_question(request, course_code, qb_code, topic_id):
  1006.     user = request.user
  1007.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1008.     if extrainfo.user_type == "faculty":
  1009.         question = Question.objects.select_related().get(pk=request.POST.get('pk'))
  1010.         question.delete()
  1011.         data = {'message''question deleted'}
  1012.         return HttpResponse(json.dumps(data), content_type='application/json')
  1013.  
  1014.  
  1015. @login_required
  1016. def edit_qb_topics(request, course_code, qb_code, topic_id):
  1017.     user = request.user
  1018.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1019.     lec = 1
  1020.     if extrainfo.user_type == "faculty":
  1021.         instructor = Curriculum_Instructor.objects.select_related().filter(instructor_id=extrainfo)
  1022.         for ins in instructor:
  1023.             if ins.course_id.course_id == course_code:
  1024.                 course = ins.course_id
  1025.         qb = QuestionBank.objects.select_related().filter(pk=qb_code)
  1026.         topic = Topics.objects.select_related().get(id=topic_id)
  1027.         questions = Question.objects.select_related().filter(question_bank=qb[0], topic=topic)
  1028.         context = {
  1029.             'Lecturer': lec,
  1030.             'questionbank': qb[0],
  1031.             'topic': topic,
  1032.             'questions': questions,
  1033.             'course': course
  1034.         }
  1035.         return render(request, 'coursemanagement/topicwisequestion.html', context)
  1036.  
  1037.  
  1038. @login_required
  1039. def quiz(request, quiz_id):
  1040.     user = request.user
  1041.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1042.     if extrainfo.user_type == 'student':
  1043.         # student = Student.objects.get(id=extrainfo)
  1044.         quiz = Quiz.objects.select_related().get(pk=quiz_id)
  1045.         length = quiz.number_of_question
  1046.         rules = quiz.rules
  1047.         rules = [z.encode('ascii', 'ignore') for z in rules.split('/')]
  1048.         ques_pk = QuizQuestion.objects.select_related().filter(quiz_id=quiz).values_list('pk', flat=True)
  1049.         try:
  1050.             random_ques_pk = random.sample(list(ques_pk), length)
  1051.         except:
  1052.             random_ques_pk = ques_pk
  1053.         shuffed_questions = []
  1054.         for x in random_ques_pk:
  1055.             shuffed_questions.append(QuizQuestion.objects.select_related().get(pk=x))
  1056.         end = quiz.end_time
  1057.         now = timezone.now() + datetime.timedelta(hours=5.5)
  1058.         diff = end-now
  1059.         days, seconds = diff.days, diff.seconds
  1060.         hours = days * 24 + seconds // 3600
  1061.         minutes = (seconds % 3600) // 60
  1062.         seconds = seconds % 60
  1063.         return render(request, 'coursemanagement/quiz.html',
  1064.                       {'contest': quiz, 'ques': shuffed_questions,
  1065.                        'days': days, 'hours': hours, 'minutes': minutes,
  1066.                        'seconds': seconds, 'rules': rules})
  1067.     else:
  1068.         return HttpResponse("unautherized Access!!It will be reported!!")
  1069.  
  1070.  
  1071. @login_required
  1072. def ajax_q(request, quiz_code):
  1073.     user = request.user
  1074.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1075.     student = Student.objects.select_related('id').get(id=extrainfo)
  1076.     q = request.POST.get('question')
  1077.     question = Question.objects.select_related().get(pk=q)
  1078.     quiz_id = Quiz.objects.select_related().get(pk=quiz_code)
  1079.     ques = QuizQuestion.objects.select_related().get(question=question, quiz_id=quiz_id)
  1080.  
  1081.     ans = int(request.POST.get('answer'))
  1082.     lead = StudentAnswer.objects.filter(quiz_id=quiz_id, question_id=ques, student_id=student)
  1083.     if lead:
  1084.         lead = lead[0]
  1085.         lead.choice = ans
  1086.         lead.save()
  1087.     else:
  1088.         lead = StudentAnswer(quiz_id=quiz_id, question_id=ques, student_id=student, choice=ans)
  1089.         lead.save()
  1090.     data = {'status'"1"}
  1091.     return HttpResponse(json.dumps(data), content_type='application/json')
  1092.  
  1093.  
  1094. @login_required
  1095. def submit(request, quiz_code):
  1096.     ei = ExtraInfo.objects.select_related().get(user=request.user)
  1097.     student = Student.objects.select_related().get(id=ei)
  1098.     quiz = Quiz.objects.select_related().get(pk=quiz_code)
  1099.     stu_ans = StudentAnswer.objects.select_related('question_id__quiz_id').filter(student_id=student, quiz_id=quiz)
  1100.     score = 0
  1101.     for s_ans in stu_ans:
  1102.         if s_ans.question_id.question.answer == s_ans.choice:
  1103.             score += s_ans.question_id.question.marks
  1104.         else:
  1105.             score += (s_ans.quiz_id.negative_marks * s_ans.question_id.question.marks)
  1106.     quiz_res = QuizResult(
  1107.         quiz_id=quiz,
  1108.         student_id=student,
  1109.         score=score,
  1110.         finished=True
  1111.     )
  1112.     quiz_res.save()
  1113.     data = {'message''you have submitted, cant enter again now', 'score': quiz_res.score}
  1114.     return HttpResponse(json.dumps(data), content_type="application/json")
  1115.  
  1116.  
  1117. @login_required
  1118. def create_quiz(request, course_code):
  1119.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1120.  
  1121.     if extrainfo.user_type == 'faculty':
  1122.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  1123.         for ins in instructor:
  1124.             if ins.curriculum_id.course_code == course_code:
  1125.                 curriculum = ins.curriculum_id
  1126.                 course = ins.curriculum_id.course_id
  1127.  
  1128.         for ins in instructor:
  1129.             if ins.curriculum_id.course_code == course_code:
  1130.                 registered_students = Register.objects.filter(curr_id = ins.curriculum_id.curriculum_id)
  1131.  
  1132.                 course = ins.curriculum_id.course_id
  1133.  
  1134.         form = QuizForm(request.POST or None)
  1135.         errors = None
  1136.         if form.is_valid():
  1137.             st_time = form.cleaned_data['starttime']
  1138.             k1 = st_time.hour
  1139.             k2 = st_time.minute
  1140.             k3 = st_time.second
  1141.             start_date_time = datetime.datetime.combine(form.cleaned_data['startdate'], datetime.time(k1, k2, k3))
  1142.             st_time = form.cleaned_data['endtime']
  1143.             k1 = st_time.hour
  1144.             k2 = st_time.minute
  1145.             k3 = st_time.second
  1146.             end_date_time = datetime.datetime.combine(form.cleaned_data['enddate'], datetime.time(k1, k2, k3))
  1147.             duration = end_date_time - start_date_time
  1148.             days, seconds = duration.days, duration.seconds
  1149.             hours, remainder = divmod(duration.seconds, 3600)
  1150.             minutes, seconds = divmod(remainder, 60)
  1151.  
  1152.             # If you want to take into account fractions of a second
  1153.             seconds += duration.microseconds / 1e6
  1154.  
  1155.             description = form.cleaned_data['description'].replace('\r\n', '/')
  1156.             rules = form.cleaned_data['rules'].replace('\r\n', '/')
  1157.             obj = Quiz.objects.create(
  1158.                 course_id=course,
  1159.                 quiz_name=form.cleaned_data['name'],
  1160.                 description=description,
  1161.                 rules=rules,
  1162.                 number_of_question=form.cleaned_data['number_of_questions'],
  1163.                 negative_marks=form.cleaned_data['negative_marks'],
  1164.                 start_time=start_date_time,
  1165.                 end_time=end_date_time,
  1166.                 d_day=days,
  1167.                 d_hour=hours,
  1168.                 d_minute=minutes,
  1169.                             )
  1170.             return redirect('/ocms/' + course_code + '/edit_quiz/' + str(obj.pk))
  1171.         if form.errors:
  1172.             errors = form.errors
  1173.         return render(request, 'coursemanagement/createcontest.html',
  1174.                       {'form': form, 'errors': errors})
  1175.  
  1176.     else:
  1177.         return HttpResponse("unauthorized Access!!It will be reported!!")
  1178.  
  1179.  
  1180. @login_required
  1181. def edit_quiz_details(request, course_code, quiz_code):
  1182.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1183.     if extrainfo.user_type == 'faculty':
  1184.         x = request.POST.get('number')
  1185.         quiz = Quiz.objects.select_related().get(pk=quiz_code)
  1186.         if x == 'edit1':
  1187.             st_time = request.POST.get('starttime')
  1188.             st_date = request.POST.get('startdate_month') + " " + request.POST.get('startdate_day')
  1189.             st_date = st_date + " " + request.POST.get('startdate_year')
  1190.             string = str(st_date) + " " + str(st_time)
  1191.             datetime_object = datetime.datetime.strptime(string, '%m %d %Y %H:%M')
  1192.             quiz.start_time = datetime_object
  1193.             quiz.save()
  1194.         elif x == 'edit2':
  1195.             st_time = request.POST.get('endtime')
  1196.             st_date = request.POST.get('enddate_month') + " " + request.POST.get('enddate_day')
  1197.             st_date = st_date + " " + request.POST.get('enddate_year')
  1198.             string = str(st_date) + " " + str(st_time)
  1199.             datetime_object = datetime.datetime.strptime(string, '%m %d %Y %H:%M')
  1200.             quiz.end_time = datetime_object
  1201.             quiz.save()
  1202.         elif x == 'edit3':
  1203.             number = request.POST.get('number_of_questions')
  1204.             score = int(quiz.total_score / quiz.number_of_question)
  1205.             quiz.number_of_question = number
  1206.             quiz.total_score = int(number) * score
  1207.             quiz.save()
  1208.         elif x == 'edit4':
  1209.             score = request.POST.get('per_question_score')
  1210.             quiz.total_score = int(score) * quiz.number_of_question
  1211.             quiz.save()
  1212.         return HttpResponse("Done")
  1213.  
  1214.     else:
  1215.         return HttpResponse("unautherized Access!!It will be reported!!")
  1216.  
  1217.  
  1218. @login_required
  1219. def edit_quiz(request, course_code, quiz_code):
  1220.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1221.     if extrainfo.user_type == 'faculty':
  1222.         lec = 1
  1223.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  1224.         for ins in instructor:
  1225.             if ins.curriculum_id.course_code == course_code:
  1226.                 curriculum = ins.curriculum_id
  1227.                 course = ins.curriculum_id.course_id
  1228.         # errors = None
  1229.         quiz = Quiz.objects.select_related().get(pk=quiz_code)
  1230.         questions = QuizQuestion.objects.select_related('question').filter(quiz_id=quiz)
  1231.         topic_list = []
  1232.         for q in questions:
  1233.             topic_list.append(q.question.topic)
  1234.         counter = dict(collections.Counter(topic_list))
  1235.         form = QuizForm()
  1236.         questions_left = quiz.number_of_question - len(questions)
  1237.         description = quiz.description
  1238.         description = [z.encode('ascii', 'ignore') for z in description.split('/')]
  1239.         rules = quiz.rules
  1240.         rules = [z.encode('ascii', 'ignore') for z in rules.split('/')]
  1241.         questionbank = QuestionBank.objects.select_related().filter(instructor_id=extrainfo, course_id=course)
  1242.         topic = Topics.objects.select_related().filter(course_id=course)
  1243.         return render(request, 'coursemanagement/editcontest.html',
  1244.                       {'details': quiz, 'questionbank': questionbank, 'topics': topic,
  1245.                        'course': course, 'lecturer': lec, 'form': form,
  1246.                        'counter': counter, 'questions': questions, 'description': description,
  1247.                        'rules': rules, 'questions_left': questions_left, 'curriculum': curriculum})
  1248.     else:
  1249.         return HttpResponse("unauthorized Access!!It will be reported!!")
  1250.  
  1251.  
  1252. @login_required
  1253. def edit_quiz_topic(request, course_code, quiz_code, topic_id):
  1254.     user = request.user
  1255.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1256.     lec = 1
  1257.     if extrainfo.user_type == "faculty":
  1258.         instructor = Curriculum_Instructor.objects.select_related().filter(instructor_id=extrainfo)
  1259.         for ins in instructor:
  1260.             if ins.course_id.course_id == course_code:
  1261.                 course = ins.course_id
  1262.         quiz_question = QuizQuestion.objects.select_related('question').filter(quiz_id=quiz_code)
  1263.         quest = []
  1264.         quiz = Quiz.objects.select_related().get(pk=quiz_code)
  1265.         for q in quiz_question:
  1266.             if str(q.question.topic.pk) == topic_id:
  1267.                 quest.append(q.question)
  1268.  
  1269.         topic = Topics.objects.select_related().get(id=topic_id)
  1270.         return render(request, 'coursemanagement/topicwisequiz.html',
  1271.                       {'Lecturer': lec, 'questions': quest,
  1272.                        'quiz': quiz, 'topic': topic, 'course': course})
  1273.  
  1274.  
  1275. @login_required
  1276. def remove_quiz_question(request, course_code, quiz_code, topic_id):
  1277.     user = request.user
  1278.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1279.     if extrainfo.user_type == "faculty":
  1280.         question = Question.objects.select_related().get(pk=request.POST.get('pk'))
  1281.         question_remove = QuizQuestion.objects.select_related().get(question=question, quiz_id=quiz_code)
  1282.         question_remove.delete()
  1283.         data = {'message''question deleted'}
  1284.         return HttpResponse(json.dumps(data), content_type='application/json')
  1285.  
  1286.  
  1287. @login_required
  1288. def add_question_topicwise(request, course_code, quiz_id):
  1289.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1290.     if extrainfo.user_type == 'faculty':
  1291.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  1292.         for ins in instructor:
  1293.             if ins.curriculum_id.course_code == course_code:
  1294.                 course = ins.curriculum_id.course_id
  1295.         ques_bank = request.POST.get('qbank')
  1296.         quiz = Quiz.objects.select_related().get(pk=quiz_id)
  1297.         topic = request.POST.get('topic')
  1298.         questions = Question.objects.select_related().filter(question_bank=ques_bank, topic=topic)
  1299.         questions_already_present = QuizQuestion.objects.select_related().filter(quiz_id=quiz_id)
  1300.         question_already_present = []
  1301.         for ques in questions_already_present:
  1302.             question_already_present.append(ques.question)
  1303.         temp = []
  1304.         if questions_already_present:
  1305.             for question in questions:
  1306.                 if question not in question_already_present:
  1307.                     temp.append(question)
  1308.             questions = temp
  1309.         context = {
  1310.                     'questions': questions,
  1311.                     'course': course,
  1312.                     'details': quiz
  1313.                     }
  1314.         return render(request, 'coursemanagement/select_question.html', context)
  1315.  
  1316.  
  1317. @login_required
  1318. def add_questions_to_quiz(request, course_id, quiz_id):
  1319.     course = Course.objects.select_related().get(pk=course_id)
  1320.     curriculum = Curriculum.objects.select_related().get(course_id = course)
  1321.     course_code = curriculum.course_code
  1322.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1323.     if extrainfo.user_type == 'faculty':
  1324.         questions_selected = request.POST.getlist('questions_selected')
  1325.         quiz = Quiz.objects.select_related().get(pk=quiz_id)
  1326.         for questions in questions_selected:
  1327.             question = Question.objects.select_related().get(pk=int(questions))
  1328.             QuizQuestion.objects.create(
  1329.                 quiz_id=quiz,
  1330.                 question=question
  1331.             )
  1332.         return redirect('/ocms/' + course_code + '/edit_quiz/' + quiz_id)
  1333.  
  1334.  
  1335. @login_required
  1336. def preview_quiz(request, course_code, quiz_code):
  1337.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1338.     if extrainfo.user_type == 'faculty':
  1339.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  1340.         for ins in instructor:
  1341.             if ins.curriculum_id.course_code == course_code:
  1342.                 course = ins.curriculum_id.course_id
  1343.     quiz = Quiz.objects.select_related().get(pk=quiz_code)
  1344.     questions = QuizQuestion.objects.select_related().filter(quiz_id=quiz)
  1345.  
  1346.     total_marks = 0
  1347.     for q in questions:
  1348.         total_marks = total_marks + q.question.marks
  1349.     rules = quiz.rules
  1350.     rules = [z.encode('ascii', 'ignore') for z in rules.split('/')]
  1351.  
  1352.     context = {
  1353.         'contest': quiz,
  1354.         'course': course,
  1355.         'rules': rules,
  1356.         'questions': questions,
  1357.         'totalmarks': total_marks,
  1358.     }
  1359.     return render(request, 'coursemanagement/preview_quiz.html', context)
  1360.  
  1361.  
  1362. @login_required
  1363. def remove_quiz(request, course_code):
  1364.     quiz = Quiz.objects.select_related().get(pk=request.POST.get('pk'))
  1365.     quizQuestion = QuizQuestion.objects.select_related().filter(quiz_id=quiz)
  1366.     for q in quizQuestion:
  1367.         q.delete()
  1368.     quiz.delete()
  1369.     return HttpResponse("Done")
  1370.  
  1371.  
  1372. @login_required
  1373. def ajax_assess(request, course_code):
  1374.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1375.     if extrainfo.user_type == "faculty":
  1376.         instructor = Curriculum_Instructor.objects.select_related('curriculum_id').filter(instructor_id=extrainfo)
  1377.         for ins in instructor:
  1378.             if ins.curriculum_id.course_code == course_code:
  1379.                 course = ins.curriculum_id.course_id
  1380.                 # registered_students = Register.objects.filter(curr_id = ins.curriculum_id.curriculum_id)
  1381.         sa = StudentAssignment.objects.select_related().get(pk=request.POST.get('pk'))
  1382.         sa.score = request.POST.get('marks')
  1383.         sa.save()
  1384.         student = []        
  1385.         student.append(sa.student_id.id.user)
  1386.         # for reg_student in registered_students:
  1387.         # #     student.append(Student.objects.get(id = str(reg_student.student_id)).id.user)
  1388.         course_management_notif(request.user, student,  "An Assignment has been graded!", course.pk, str(course),course_code, 0)
  1389.         return HttpResponse("Marks uploaded")    
  1390.  
  1391.  
  1392. @login_required
  1393. def ajax_feedback(request, course_code):
  1394.     sa = StudentAssignment.objects.select_related().get(pk=request.POST.get('pk'))
  1395.     sa.feedback = request.POST.get('feedback')
  1396.     sa.save()
  1397. #    print(sa,"qwerty")
  1398.     return HttpResponse("Feedback uploaded")
  1399.  
  1400. #For adding objective assignments for practice
  1401. @login_required
  1402. def create_practice_contest(request, course_code):
  1403.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1404.  
  1405.     if extrainfo.user_type == 'faculty':
  1406.         instructor = Instructor.objects.filter(instructor_id=extrainfo)
  1407.         for ins in instructor:
  1408.             if ins.course_id.course_id == course_code:
  1409.                 course = ins.course_id
  1410.         form = PracticeForm(request.POST or None)
  1411.         errors = None
  1412.         if form.is_valid():
  1413.             description = form.cleaned_data['description'].replace('\r\n', '/')
  1414.             obj = Practice.objects.create(
  1415.                 course_id=course,
  1416.                 prac_quiz_name=form.cleaned_data['name'],
  1417.                 negative_marks=form.cleaned_data['negative_marks'],
  1418.                 number_of_question=form.cleaned_data['number_of_questions'],
  1419.                 description=description,
  1420.                 total_score =form.cleaned_data['total_score'],
  1421.                 )
  1422.             # print "Done"
  1423.             return redirect('/ocms/' + course_code + '/edit_practice_contest/' + str(obj.pk))
  1424.             '''except:
  1425.                 return HttpResponse('Unexpected Error')'''
  1426.         if form.errors:
  1427.             errors = form.errors
  1428.         return render(request, 'coursemanagement/create_practice_contest.html',
  1429.                       {'form': form, 'errors': errors})
  1430.  
  1431. @login_required
  1432. def edit_practice_contest(request, course_code, practice_contest_code):
  1433.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1434.     if extrainfo.user_type == 'faculty':
  1435.         lec = 1
  1436.         instructor = Instructor.objects.filter(instructor_id=extrainfo)
  1437.         for ins in instructor:
  1438.             if ins.course_id.course_id == course_code:
  1439.                 course = ins.course_id
  1440.         # errors = None
  1441.         practice_contest = Practice.objects.get(pk=practice_contest_code)
  1442.         questions = PracticeQuestion.objects.filter(prac_quiz_id=practice_contest)
  1443.         topic_list = []
  1444.         for q in questions:
  1445.             topic_list.append(q.question.topic)
  1446.         counter = dict(collections.Counter(topic_list))
  1447.         form = PracticeQuestionFormObjective()
  1448.         questions_left = practice_contest.number_of_question - len(questions)
  1449.         description = practice_contest.description
  1450.         description = [z.encode('ascii', 'ignore') for z in description.split('/')]
  1451.  
  1452.         #questionbank = QuestionBank.objects.filter(instructor_id=extrainfo, course_id=course)
  1453.         #topic = Topics.objects.filter(course_id=course)
  1454.         return render(request, 'coursemanagement/edit_practice_contest.html',
  1455.                       {'details': practice_contest, #'questionbank': questionbank, 'topics': topic,
  1456.                        'course': course, 'lecturer': lec, 'form': form,
  1457.                        'counter': counter, 'questions': questions, 'description': description,
  1458.                         'questions_left': questions_left})
  1459.     else:
  1460.         return HttpResponse("unautherized Access!!It will be reported!!")
  1461.  
  1462. @login_required
  1463. def edit_practice_details(request, course_code,practice_contest_code):
  1464.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1465.     if extrainfo.user_type == 'faculty':
  1466.         x = request.POST.get('number')
  1467.         practice_contest = Practice.objects.select_related().get(pk=practice_contest_code)
  1468.  
  1469.         if x == 'edit1':
  1470.             number = request.POST.get('number_of_questions')
  1471.             score = int(practice_contest.total_score / practice_contest.number_of_question)
  1472.             practice_contest.number_of_question = number
  1473.            # practice_contest.total_score = int(number) * score
  1474.             practice_contest.save()
  1475.         elif x == 'edit2':
  1476.             score = request.POST.get('total_score')
  1477.             practice_contest.total_score = int(score) * practice_contest.number_of_question
  1478.             practice_contest.save()
  1479.         return HttpResponse("Done")
  1480.  
  1481.     else:
  1482.         return HttpResponse("unauthorized Access!!It will be reported!!")
  1483.  
  1484. @login_required
  1485. def add_questions_to_practice_contest(request, course_code, practice_contest_id):
  1486.     extrainfo = ExtraInfo.objects.select_related().get(user=request.user)
  1487.     if extrainfo.user_type == 'faculty':
  1488.         questions_selected = request.POST.getlist('questions_selected')
  1489.         quiz = Quiz.objects.select_related().get(pk=quiz_id)
  1490.         for questions in questions_selected:
  1491.             question = Question.objects.select_related().get(pk=int(questions))
  1492.             PracticeQuestion.objects.create(
  1493.                 quiz_id=quiz,
  1494.                 question=question
  1495.             )
  1496.         return redirect('/ocms/' + course_code + '/edit_quiz/' + quiz_id)
  1497.  
  1498. def add_practice_question(request, course_code, practice_contest_code):
  1499.     user = request.user
  1500.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1501.     if extrainfo.user_type == "faculty":
  1502.         prac_question = PracticeQuestion.objects.select_related().filter(pk=practice_contest_code)
  1503.      #   topic = Topics.objects.get(id=request.POST.get('topic'))
  1504.         try:
  1505.             filename, file_extenstion = os.path.splitext(request.FILES['image'].name)
  1506.             image = request.FILES['image']
  1507.         #    topic_name = topic.topic_name.replace(" ", "_")[:-2]
  1508.             full_path = settings.MEDIA_ROOT + "/online_cms/" + course_code
  1509.             full_path = full_path + "/pq/" +practice_contest_code+ "/" + topic_name + "/"
  1510.             url = settings.MEDIA_URL + filename
  1511.             if not os.path.isdir(full_path):
  1512.                 cmd = "mkdir " + full_path
  1513.                 subprocess.call(cmd, shell=True)
  1514.             fs = FileSystemStorage(full_path, url)
  1515.             fs.save(image.name, image)
  1516.             uploaded_file_url = "/media/online_cms/" + course_code
  1517.             uploaded_file_url = uploaded_file_url + "/pq/" + practice_contest_code + "/"
  1518.             uploaded_file_url = uploaded_file_url + "/" + image.name
  1519.         except:
  1520.             uploaded_file_url = None
  1521.  
  1522.         Question.objects.create(
  1523.             prac_question=pq[0],
  1524.          #   topic=topic,
  1525.             image=uploaded_file_url,
  1526.             question=request.POST.get('problem-statement'),
  1527.             options1=request.POST.get('option1'),
  1528.             options2=request.POST.get('option2'),
  1529.             options3=request.POST.get('option3'),
  1530.             options4=request.POST.get('option4'),
  1531.             options5=request.POST.get('option5'),
  1532.             answer=request.POST.get('answer'),
  1533.  
  1534.         )
  1535.         return redirect('/ocms/' + course_code + '/edit_practice_contest/'+str(pq[0].id))
  1536.  
  1537. # @csrf_protect
  1538. # @login_required
  1539. # def edit_marks(request, course_code):
  1540. #     user = request.user
  1541. #     extrainfo = ExtraInfo.objects.get(user=user)
  1542.  
  1543. #     if extrainfo.user_type == 'faculty':
  1544. #         instructor = Curriculum_Instructor.objects.filter(instructor_id=extrainfo)
  1545.  
  1546. #         for ins in instructor:
  1547. #             if ins.curriculum_id.course_code == course_code:
  1548. #                 registered_students = Register.objects.filter(curr_id = ins.curriculum_id.curriculum_id)
  1549.  
  1550.  
  1551. #         exam = request.POST.get('examtype')
  1552. #         score = request.POST.getlist('enteredmarks')
  1553.  
  1554. #         List = list()
  1555.  
  1556. #         for i in range(len(registered_students)):
  1557. #             m_id = registered_students[i]            
  1558. #             s = score[i]
  1559.  
  1560. #             # rows = StoreMarks.objects.filter(mid=m_id, exam_type=exam)
  1561. #             num = StoreMarks.objects.filter(mid=m_id, exam_type=exam).count()
  1562. #             record = StoreMarks.objects.filter(mid=m_id, exam_type=exam).values_list('marks', flat=True)
  1563.  
  1564. #             List.append(list(record))
  1565.  
  1566. #             if num==0:
  1567. #                 StoreMarks.objects.create(
  1568. #                     mid=m_id,
  1569. #                     exam_type=exam,
  1570. #                     marks=s
  1571. #                     )
  1572. #             else:
  1573. #                 StoreMarks.objects.filter(mid=m_id, exam_type=exam).update(marks=s)
  1574.  
  1575. #         #print(registered_students)
  1576.  
  1577.  
  1578. #         return HttpResponse("Upload successful")  
  1579. #         context= {'m_id':m_id,'registered_students': registered_students, 'record':List}
  1580. #     return render(request, 'coursemanagement/assessment.html', context)
  1581.  
  1582. @csrf_protect
  1583. @login_required
  1584. def get_exam_data(request,course_code):   #it is store the type of exam helpful in storing the marks
  1585.     exam_name = request.POST['exam_name']
  1586.     data = serializers.serialize('json', StoreMarks.objects.filter(exam_type=exam_name))
  1587.     return HttpResponse(data, content_type='application/json')
  1588.  
  1589.  
  1590. #to store the attendance of the student by taking from templates (attendance.html)
  1591. @login_required
  1592. def submit_attendance(request, course_code):
  1593.  
  1594.     user = request.user
  1595.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1596.     course_id = Curriculum.objects.select_related().get(course_code=course_code)
  1597.  
  1598.     if extrainfo.user_type == 'faculty':   #only faculty can change the attendance of the students
  1599.         instructor_old = Curriculum_Instructor.objects.select_related().filter(instructor_id=extrainfo, curriculum_id_id=course_id)
  1600.     for x in instructor_old:
  1601.         instructor = x
  1602.  
  1603.     if request.method == 'POST':
  1604.         form = AttendanceForm(request.POST)     #from the django forms using AttendanceForm
  1605.  
  1606.         if form.is_valid():
  1607.         #     for item in form.cleaned_data['Present_absent']:
  1608.         #         print(item)
  1609.             try:
  1610.                 date =  request.POST['date']
  1611.             except:
  1612.                 return HttpResponse("Please Enter The Form Properly")
  1613.  
  1614.  
  1615.             #mark the attendance according to the student roll no.
  1616.             all_students = request.POST.getlist('Roll')
  1617.             present_students = request.POST.getlist('Present_absent')
  1618.  
  1619.  
  1620.             for student in all_students:
  1621.  
  1622.                 s_id = Student.objects.select_related().get(id = student)
  1623.                 present = False
  1624.                 if student in present_students:
  1625.                     present = True
  1626.  
  1627.                 Student_attendance.objects.create(
  1628.                         student_id = s_id,
  1629.                         instructor_id = instructor,
  1630.                         date = date,
  1631.                         present = present
  1632.                     )
  1633.  
  1634.  
  1635.     return HttpResponse("Feedback uploaded")
  1636.  
  1637. #to store the grading scheme created by the faculty
  1638. @login_required
  1639. def create_grading_scheme(request, course_code):
  1640.  
  1641.     user = request.user
  1642.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1643.     course_id = Curriculum.objects.select_related().get(course_code=course_code)
  1644.     if extrainfo.user_type == 'faculty':   #only faculty can change the attendance of the students
  1645.         if request.method == 'POST':
  1646.                          
  1647.             form_data = {}
  1648.             form_data = request.POST.copy()
  1649.             del form_data['add_item_wtg']
  1650.             del form_data['add_eval_type']
  1651.             del form_data['csrfmiddlewaretoken']
  1652.  
  1653.             # data to be sent to the gradingscheme table
  1654.             key_list = list(form_data.keys())
  1655.  
  1656.             course_id = Course.objects.select_related().get(id=course_id.course_id_id)    
  1657.             no_of_evaluation_types = len(form_data) - 20
  1658.             
  1659.             for i in range(no_of_evaluation_types):
  1660.                 already_existing_data = GradingScheme.objects.filter(course_id=course_id, type_of_evaluation=key_list[i])
  1661.                 if already_existing_data.exists():
  1662.                     grading_scheme_object = already_existing_data.first()
  1663.                     grading_scheme_object.weightage = form_data[key_list[i]]
  1664.                     grading_scheme_object.save()
  1665.                 else:
  1666.                     grading_scheme = GradingScheme.objects.create(
  1667.                         course_id=course_id,
  1668.                         type_of_evaluation=key_list[i],
  1669.                         weightage=form_data[key_list[i]]
  1670.                     )
  1671.                     grading_scheme.save()
  1672.  
  1673.             # data to be sent to gradingscheme_grades table
  1674.             already_existing_data2 = GradingScheme_grades.objects.filter(course_id=course_id)
  1675.             if already_existing_data2.exists():
  1676.                 already_existing_data2.update(
  1677.                     course_id = course_id,
  1678.                     O_Lower = form_data['O_Lower'],
  1679.                     O_Upper = form_data['O_Upper'],
  1680.                     A_plus_Lower = form_data['A_plus_Lower'],
  1681.                     A_plus_Upper = form_data['A_plus_Upper'],
  1682.                     A_Lower = form_data['A_Lower'],
  1683.                     A_Upper = form_data['A_Upper'],
  1684.                     B_plus_Lower = form_data['B_plus_Lower'],
  1685.                     B_plus_Upper = form_data['B_plus_Upper'],
  1686.                     B_Lower = form_data['B_Lower'],
  1687.                     B_Upper = form_data['B_Upper'],
  1688.                     C_plus_Lower = form_data['C_plus_Lower'],
  1689.                     C_plus_Upper = form_data['C_plus_Upper'],
  1690.                     C_Lower = form_data['C_Lower'],
  1691.                     C_Upper = form_data['C_Upper'],
  1692.                     D_plus_Lower = form_data['D_plus_Lower'],
  1693.                     D_plus_Upper = form_data['D_plus_Upper'],
  1694.                     D_Lower = form_data['D_Lower'],
  1695.                     D_Upper = form_data['D_Upper'],
  1696.                     F_Lower = form_data['F_Lower'],
  1697.                     F_Upper = form_data['F_Upper']
  1698.                 )
  1699.             else:
  1700.                 grading_scheme_grades = GradingScheme_grades.objects.create(
  1701.                         course_id = course_id,
  1702.                         O_Lower = form_data['O_Lower'],
  1703.                         O_Upper = form_data['O_Upper'],
  1704.                         A_plus_Lower = form_data['A_plus_Lower'],
  1705.                         A_plus_Upper = form_data['A_plus_Upper'],
  1706.                         A_Lower = form_data['A_Lower'],
  1707.                         A_Upper = form_data['A_Upper'],
  1708.                         B_plus_Lower = form_data['B_plus_Lower'],
  1709.                         B_plus_Upper = form_data['B_plus_Upper'],
  1710.                         B_Lower = form_data['B_Lower'],
  1711.                         B_Upper = form_data['B_Upper'],
  1712.                         C_plus_Lower = form_data['C_plus_Lower'],
  1713.                         C_plus_Upper = form_data['C_plus_Upper'],
  1714.                         C_Lower = form_data['C_Lower'],
  1715.                         C_Upper = form_data['C_Upper'],
  1716.                         D_plus_Lower = form_data['D_plus_Lower'],
  1717.                         D_plus_Upper = form_data['D_plus_Upper'],
  1718.                         D_Lower = form_data['D_Lower'],
  1719.                         D_Upper = form_data['D_Upper'],
  1720.                         F_Lower = form_data['F_Lower'],
  1721.                         F_Upper = form_data['F_Upper']
  1722.                     )
  1723.                 grading_scheme_grades.save()
  1724.                 course(request, course_code)
  1725.             return HttpResponse("Upload successful.")
  1726.     
  1727.  
  1728. @login_required
  1729. def add_academic_calendar(request):
  1730.     """
  1731.     to add an entry to the academic calendar to be uploaded 
  1732.  
  1733.     @param:
  1734.         request - contains metadata about the requested page.
  1735.  
  1736.     @variables:
  1737.         from_date - The starting date for the academic calendar event.
  1738.         to_date - The ending date for the academic caldendar event.
  1739.         desc - Description for the academic calendar event.
  1740.         c = object to save new event to the academic calendar.
  1741.     """
  1742.     user = request.user
  1743.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1744.     
  1745.     if extrainfo.id == 'id_admin':
  1746.         calendar = Calendar.objects.all()
  1747.         context= {
  1748.             'academic_calendar' :calendar,
  1749.             'tab_id' :['4','1']
  1750.         }
  1751.         if request.method == "POST":
  1752.             try:
  1753.                 from_date = request.POST.getlist('from_date')
  1754.                 to_date = request.POST.getlist('to_date')
  1755.                 desc = request.POST.getlist('description')[0]
  1756.                 from_date = from_date[0].split('-')
  1757.                 from_date = [int(i) for i in from_date]
  1758.                 from_date = datetime.datetime(*from_date).date()
  1759.                 to_date = to_date[0].split('-')
  1760.                 to_date = [int(i) for i in to_date]
  1761.                 to_date = datetime.datetime(*to_date).date()
  1762.             except Exception as e:
  1763.                 from_date=""
  1764.                 to_date=""
  1765.                 desc=""
  1766.                 pass
  1767.             c = Calendar(
  1768.             from_date=from_date,
  1769.             to_date=to_date,
  1770.             description=desc)
  1771.             c.save()
  1772.             HttpResponse("Calendar Added")
  1773.  
  1774.             return render(request, 'coursemanagement/academicinfo.html', context)
  1775.     
  1776.  
  1777.  
  1778. @login_required
  1779. def update_calendar(request):
  1780.     """
  1781.     to update an entry to the academic calendar to be updated.
  1782.  
  1783.     @param:
  1784.         request - contains metadata about the requested page.
  1785.  
  1786.     @variables:
  1787.         from_date - The starting date for the academic calendar event.
  1788.         to_date - The ending date for the academic caldendar event.
  1789.         desc - Description for the academic calendar event.
  1790.         prev_desc - Description for the previous event which is to be updated.
  1791.         get_calendar_details = Get the object of the calendar instance from the database for the previous Description.
  1792.  
  1793.     """
  1794.     user = request.user
  1795.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1796.  
  1797.     if extrainfo.id == 'id_admin':
  1798.         calendar = Calendar.objects.all()
  1799.         context= {
  1800.             'academic_calendar' :calendar,
  1801.             'tab_id' :['4','1']
  1802.         }
  1803.         if request.method == "POST":
  1804.             try:
  1805.                 from_date = request.POST.getlist('from_date')
  1806.                 to_date = request.POST.getlist('to_date')
  1807.                 desc = request.POST.getlist('description')[0]
  1808.                 prev_desc = request.POST.getlist('prev_desc')[0]
  1809.                 from_date = from_date[0].split('-')
  1810.                 from_date = [int(i) for i in from_date]
  1811.                 from_date = datetime.datetime(*from_date).date()
  1812.                 to_date = to_date[0].split('-')
  1813.                 to_date = [int(i) for i in to_date]
  1814.                 to_date = datetime.datetime(*to_date).date()
  1815.                 get_calendar_details = Calendar.objects.all().filter(description=prev_desc).first()
  1816.                 get_calendar_details.description = desc
  1817.                 get_calendar_details.from_date = from_date
  1818.                 get_calendar_details.to_date = to_date
  1819.                 get_calendar_details.save()
  1820.             except Exception as e:
  1821.                 from_date=""
  1822.                 to_date=""
  1823.                 desc=""
  1824.             return render(request, 'coursemanagement/academicinfo.html', context)
  1825.         return render(request, 'coursemanagement/academicinfo.html', context)
  1826.     
  1827. @login_required
  1828. def add_timetable(request):
  1829.     """
  1830.     acad-admin can upload the time table(any type of) of the semester.
  1831.  
  1832.     @param:
  1833.         request - contains metadata about the requested page.
  1834.  
  1835.     @variables:
  1836.         acadTtForm - data of delete dictionary in post request
  1837.         timetable - all timetable from database
  1838.     """
  1839.     user = request.user
  1840.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1841.  
  1842.     if extrainfo.id == 'id_admin':
  1843.         if request.method == 'POST':
  1844.             try:
  1845.                 timetable = request.FILES.get('img')
  1846.                 programme = request.POST.get('programme')
  1847.                 batch = request.POST.get('batch')
  1848.                 branch = request.POST.get('branch')
  1849.                 filename, file_extenstion = os.path.splitext(request.FILES.get('img').name)
  1850.             except:
  1851.                 return HttpResponse("Please Enter The Form Properly", status=400)
  1852.             
  1853.             full_path = settings.MEDIA_ROOT + "/Administrator/academic_information/"
  1854.             url = settings.MEDIA_URL + filename
  1855.             if not os.path.isdir(full_path):
  1856.                 cmd = "mkdir " + full_path
  1857.                 subprocess.call(cmd, shell=True)
  1858.             fs = FileSystemStorage(full_path, url)
  1859.             fs.save(filename+file_extenstion, timetable)
  1860.             uploaded_file_url = "Administrator/academic_information/" + filename + file_extenstion
  1861.             # uploaded_file_url = full_path + filename + file_extenstion
  1862.             timetb = Timetable(
  1863.                 time_table = uploaded_file_url,
  1864.                 programme = programme,
  1865.                 batch = batch,
  1866.                 branch = branch
  1867.             )
  1868.             timetb.save()
  1869.                 
  1870.             return HttpResponse("Upload successful.")
  1871.         else:
  1872.             return HttpResponse("Not found.")
  1873.         
  1874. @login_required
  1875. def delete_timetable(request):
  1876.     """
  1877.     acad-admin can delete the outdated timetable from the server.
  1878.  
  1879.     @param:
  1880.         request - contains metadata about the requested page.
  1881.  
  1882.     @variables:
  1883.         data - data of delete dictionary in post request
  1884.         t - Object of time table to be deleted
  1885.     """
  1886.     user = request.user
  1887.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1888.     
  1889.  
  1890.     if extrainfo.id == 'id_admin':
  1891.         if request.method == "POST":
  1892.             pk = request.POST.get('pk')
  1893.             t = Timetable.objects.get(pk=pk)
  1894.             t.delete()
  1895.             return HttpResponse("TimeTable Deleted")
  1896.  
  1897. @login_required
  1898. def submit_marks(request, course_code):
  1899.  
  1900.     user = request.user
  1901.     extrainfo = ExtraInfo.objects.select_related().get(user=user)
  1902.     course_id = Curriculum.objects.select_related().get(course_code=course_code)
  1903.     if extrainfo.user_type == 'faculty':
  1904.         if request.method == 'POST':
  1905.                          
  1906.             form_data = {}
  1907.             form_data = request.POST.copy()
  1908.             del form_data['csrfmiddlewaretoken']
  1909.             year = datetime.datetime.now().year
  1910.             
  1911.             # print('number is ', int(len(form_data.getlist('stu_marks'))/3))
  1912.             for i in range(int(len(form_data.getlist('stu_marks'))/3)):
  1913.                 student = Student.objects.select_related().get(id=str(form_data.getlist('stu_marks')[(i*3)]))
  1914.                 batch = str(student.batch)
  1915.                 # print(batch)
  1916.                 already_existing_data = Student_grades.objects.filter(student_id=form_data.getlist('stu_marks')[(i*3)])
  1917.                 if already_existing_data.exists():
  1918.                     already_existing_data.update(
  1919.                         semester = semester(student.id.id[:4]),
  1920.                         year = year,
  1921.                         student_id = student,
  1922.                         total_marks = (form_data.getlist('stu_marks')[(i*3+1)]),
  1923.                         grade = str(form_data.getlist('stu_marks')[(i*3+2)]),
  1924.                         batch = batch,
  1925.                         course_id = course_id.course_id,
  1926.                     )
  1927.                 else:
  1928.                     student_grades = Student_grades.objects.create(
  1929.                         semester = semester(student.id.id[:4]),
  1930.                         year = year,
  1931.                         student_id = student,
  1932.                         total_marks = (form_data.getlist('stu_marks')[(i*3+1)]),
  1933.                         grade = str(form_data.getlist('stu_marks')[(i*3+2)]),
  1934.                         batch = batch,
  1935.                         course_id = course_id.course_id,
  1936.                     )
  1937.                     student_grades.save()
  1938.             return HttpResponse("Upload successful.")

Editor

You can edit this paste and save as new:


File Description
  • views
  • Paste Code
  • 19 Apr-2024
  • 85.09 Kb
You can Share it: