Commit d9b754ea authored by I.K Seneviratne's avatar I.K Seneviratne

Merge remote-tracking branch 'origin/QA_RELEASE' into monitoring_student_behavior_IT17138000

parents f99b928b b6e6d565
{% extends 'FirstApp/template.html' %}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>SLPES</title>
{% load static %}
<!-- Custom fonts for this template-->
<link rel="shortcut icon" href="{% static 'FirstApp/images/favicon.ico' %}" type="image/x-icon"/>
<link href="{% static 'FirstApp/css/all.min.css' %}" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i"
rel="stylesheet">
<!-- Custom styles for this template-->
<link href="{% static 'FirstApp/css/sb-admin-2.min.css' %}" rel="stylesheet">
</head>
<body id="page-top"> <body id="page-top">
{% block javascript %}
{% load static %}
<!-- Bootstrap core JavaScript--> <!-- Bootstrap core JavaScript-->
<script src="{% static 'FirstApp/vendor/jquery/jquery.min.js' %}"></script> <script src="{% static 'FirstApp/vendor/jquery/jquery.min.js' %}"></script>
<script src="{% static 'FirstApp/vendor/bootstrap/js/bootstrap.bundle.min.js' %}"></script> <script src="{% static 'FirstApp/vendor/bootstrap/js/bootstrap.bundle.min.js' %}"></script>
...@@ -321,6 +302,8 @@ ...@@ -321,6 +302,8 @@
}); });
</script> </script>
{% endblock %}
<!-- Page Wrapper --> <!-- Page Wrapper -->
<div id="wrapper"> <div id="wrapper">
...@@ -392,7 +375,8 @@ ...@@ -392,7 +375,8 @@
<!-- End of Topbar --> <!-- End of Topbar -->
{% block 'container-fluid' %}
{% load static %}
<!-- Begin Page Content --> <!-- Begin Page Content -->
<div class="container-fluid"> <div class="container-fluid">
...@@ -647,6 +631,7 @@ ...@@ -647,6 +631,7 @@
</div> </div>
<!-- /.container-fluid --> <!-- /.container-fluid -->
{% endblock %}
</div> </div>
<!-- End of Main Content --> <!-- End of Main Content -->
...@@ -667,6 +652,8 @@ ...@@ -667,6 +652,8 @@
</div> </div>
<!-- End of Page Wrapper --> <!-- End of Page Wrapper -->
{% block 'modal' %}
<!-- Scroll to Top Button--> <!-- Scroll to Top Button-->
<a class="scroll-to-top rounded" href="#page-top"> <a class="scroll-to-top rounded" href="#page-top">
<i class="fas fa-angle-up"></i> <i class="fas fa-angle-up"></i>
...@@ -686,7 +673,7 @@ ...@@ -686,7 +673,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="/logout">Logout</a>
</div> </div>
</div> </div>
</div> </div>
...@@ -870,6 +857,9 @@ ...@@ -870,6 +857,9 @@
<script src="{% static 'FirstApp/js/demo/chart-area-demo.js' %}"></script> <script src="{% static 'FirstApp/js/demo/chart-area-demo.js' %}"></script>
<script src="{% static 'FirstApp/js/demo/chart-pie-demo.js' %}"></script> <script src="{% static 'FirstApp/js/demo/chart-pie-demo.js' %}"></script>
{% endblock %}
</body> </body>
</html> </html>
...@@ -154,6 +154,8 @@ ...@@ -154,6 +154,8 @@
<tbody> <tbody>
{% for video in Videos %} {% for video in Videos %}
{# {% for video in lecturer_videos %} #}
<tr> <tr>
<td>{{video.name}}</td> <td>{{video.name}}</td>
<td>{{video.duration}}</td> <td>{{video.duration}}</td>
......
from django.shortcuts import render from django.shortcuts import render, redirect
from django.http import HttpResponse from django.http import HttpResponse
from django.conf.urls import url from django.conf.urls import url
from rest_framework import routers from rest_framework import routers
...@@ -43,68 +43,82 @@ def startup (request) : ...@@ -43,68 +43,82 @@ def startup (request) :
def hello(request): def hello(request):
# page = '<h1>THIS IS MY HOME</h1>' + '<h2> Hello Ishan</h2>' + '<button>Click Me</button>' # page = '<h1>THIS IS MY HOME</h1>' + '<h2> Hello Ishan</h2>' + '<button>Click Me</button>'
obj = {'Message': 'Student and Lecturer Performance Enhancement System'}
folder = os.path.join(BASE_DIR, os.path.join('static\\FirstApp\\lecturer_videos'))
videoPaths = [os.path.join(folder, file) for file in os.listdir(folder)]
videos = []
durations = []
# retrieve audio details from db
lecture_audio = LectureAudio.objects.all()
lec_audio_serializer = LectureAudioSerializer(lecture_audio, many=True)
lec_audio_data = lec_audio_serializer.data
lec_list = []
for audio in lec_audio_data: try:
lec_audio_object = {}
lec_audio_object["id"] = audio["id"] admin = request.session['admin']
lec_audio_object["date"] = audio["lecturer_date"]
lec_audio_object["subject"] = audio["subject"]["name"] obj = {'Message': 'Student and Lecturer Performance Enhancement System'}
lec_audio_object["lecturer"] = audio["lecturer"]["fname"] + " " + audio["lecturer"]["lname"] folder = os.path.join(BASE_DIR, os.path.join('static\\FirstApp\\lecturer_videos'))
lec_audio_object["lecturer_id"] = audio["lecturer"]["id"] videoPaths = [os.path.join(folder, file) for file in os.listdir(folder)]
videos = []
# append to the list durations = []
lec_list.append(lec_audio_object)
# retrieve audio details from db
# the list needs to be sorted by the date lecture_audio = LectureAudio.objects.all()
lec_list.sort(key=lambda date: dt.strptime(str(date['date']), "%Y-%m-%d"), reverse=True) lec_audio_serializer = LectureAudioSerializer(lecture_audio, many=True)
lec_audio_data = lec_audio_serializer.data
# retrieve exsiting lecture recorded videos
lec_video_meta = LecturerVideoMetaData.objects.all() lec_list = []
lec_video_meta_ser = LecturerVideoMetaDataSerializer(lec_video_meta, many=True)
lec_video_meta_data = lec_video_meta_ser.data for audio in lec_audio_data:
lec_audio_object = {}
for videoPath in videoPaths: lec_audio_object["id"] = audio["id"]
video = LecturerVideo() lec_audio_object["date"] = audio["lecturer_date"]
video = {} lec_audio_object["subject"] = audio["subject"]["name"]
cap = cv2.VideoCapture(videoPath) lec_audio_object["lecturer"] = audio["lecturer"]["fname"] + " " + audio["lecturer"]["lname"]
fps = cap.get(cv2.CAP_PROP_FPS) # OpenCV2 version 2 used "CV_CAP_PROP_FPS" lec_audio_object["lecturer_id"] = audio["lecturer"]["id"]
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
duration = int(frame_count / fps) # append to the list
durations.append(duration) lec_list.append(lec_audio_object)
videoName = os.path.basename(videoPath)
# videoName = videos.append(os.path.basename(videoPath)) # the list needs to be sorted by the date
durationObj = datetime.timedelta(seconds=duration) lec_list.sort(key=lambda date: dt.strptime(str(date['date']), "%Y-%m-%d"), reverse=True)
video['path'] = videoPath
video['name'] = videoName # retrieve exsiting lecture recorded videos
video['duration'] = str(durationObj) lec_video_meta = LecturerVideoMetaData.objects.all()
video['video_id'] = None lec_video_meta_ser = LecturerVideoMetaDataSerializer(lec_video_meta, many=True)
lec_video_meta_data = lec_video_meta_ser.data
# checking whether this video already exists
for recorded_lecture in lec_video_meta_data: for videoPath in videoPaths:
video = LecturerVideo()
print('recorded lecture: ', recorded_lecture) video = {}
cap = cv2.VideoCapture(videoPath)
if videoName == recorded_lecture['lecturer_video_id']['lecture_video_name']: fps = cap.get(cv2.CAP_PROP_FPS) # OpenCV2 version 2 used "CV_CAP_PROP_FPS"
video['isAvailable'] = True frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
video['video_id'] = recorded_lecture['lecturer_video_id']['id'] duration = int(frame_count / fps)
durations.append(duration)
videoName = os.path.basename(videoPath)
videos.append(video) # videoName = videos.append(os.path.basename(videoPath))
print('Video Name: ', video['name']) durationObj = datetime.timedelta(seconds=duration)
context = {'object': obj, 'Videos': videos, 'durations': durations, 'template_name': 'MonitorLecturerApp/template.html', 'lec_list': lec_list} video['path'] = videoPath
return render(request, 'MonitorLecturerApp/index.html', context) video['name'] = videoName
video['duration'] = str(durationObj)
video['video_id'] = None
# checking whether this video already exists
for recorded_lecture in lec_video_meta_data:
print('recorded lecture: ', recorded_lecture)
if videoName == recorded_lecture['lecturer_video_id']['lecture_video_name']:
video['isAvailable'] = True
video['video_id'] = recorded_lecture['lecturer_video_id']['id']
videos.append(video)
print('Video Name: ', video['name'])
context = {'object': obj, 'Videos': videos, 'durations': durations, 'template_name': 'MonitorLecturerApp/template.html', 'lec_list': lec_list}
return render(request, 'MonitorLecturerApp/index.html', context)
# in case the 'admin' session is not there
except KeyError as exc:
return redirect('/401')
# in case of general exceptions
except Exception as exc:
print('exception: ', exc)
return redirect('/500')
def view404(request): def view404(request):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment