def faculty_HomePage(requests): context = {'faculty_DashboardPage': "active"} # Redirect user to login page if not authorized and faculty try: processLogin.InstructorVerification(requests) except: logout(requests) return render(requests, 'Module_Account/login.html', context) requests.session['userType'] = "Instructor" faculty_username = requests.user.email.split('@')[0] all_SocialAccount = SocialAccount.objects.all() for each_SocialAccount in all_SocialAccount: data = each_SocialAccount.extra_data if data['email'] == requests.user.email: requests.session['user_picture'] = data['picture'] requests.session['user_name'] = data['name'].replace('_', '').strip() try: #Populates the info for the side nav bar for instructor utilities.populateRelevantCourses(requests, instructorEmail=requests.user.email) except Exception as e: traceback.print_exc() context['error_message'] = e.args[0] context['course_section_count'] = len( requests.session['courseList_updated']) context['ITOpsLab_count'] = len(requests.session['courseList_ITOpsLab']) return render(requests, 'Module_TeamManagement/Instructor/instructorDashboard.html', context)
def configureDB_telegram(requests): response = {"configure_telegram" : "active"} utilities.populateRelevantCourses(requests,instructorEmail=requests.user.email) response['courses'] = requests.session['courseList_updated'] if requests.method == "GET": return render(requests, "Module_TeamManagement/Instructor/instructorTools.html", response) try: username = requests.user.email.split('@')[0] phone_number = requests.POST.get('phone_number') login_code = requests.POST.get('login_code') toolType = 'Telegram' if requests.POST.get('type') == None else requests.POST.get('type') facultyObj = Faculty.objects.get(username=username) registered_course = facultyObj.course_section.all() if len(phone_number) == 8: phone_number = str('+65') + phone_number client = tele_util.getClient(username) if not client.is_user_authorized(): if phone_number != None and login_code == None: client.send_code_request(phone_number) encrypt_phone_number = utilities.encode(phone_number) facultyObj.phone_number = encrypt_phone_number facultyObj.save() return HttpResponse('') elif phone_number != None and login_code != None: try: client.sign_in(phone=phone_number, code=login_code) except PhoneNumberUnoccupiedError: client.sign_up(phone=phone_number, code=login_code) print(toolType) for course_section in registered_course: bootstrap.configureCourseToolsList(course_section.course_section_id,toolType) # Add faculty telegram username into DB # myself = client.get_me() # facultyObj.telegram_username = '******' + str(myself.username) # facultyObj.save() tele_util.disconnectClient(client) except Exception as e: traceback.print_exc() response['error_message'] = e.args[0] return render(requests, "Module_TeamManagement/Instructor/instructorTools.html", response) response['message'] = 'Telegram Account Configured' # return render(requests, "Module_TeamManagement/Instructor/instructorTools.html", response) return faculty_HomePage(requests)
def configureDB_students(requests): response = {"configureDB_students" : "active"} # Retrieve all the course courseObject = Course.objects.all() courseList = [] for course in courseObject: courseList.append(course.course_title) response['courses'] = courseList if requests.method == "GET": return render(requests, "Module_TeamManagement/Instructor/uploadcsv.html", response) try: file = requests.FILES.get("file", False) faculty_username = requests.user.email.split('@')[0] course_title = requests.POST.get("course_title") bootstrapFile = {} if course_title == None: raise Exception('Please enter a valid course title') if not file: raise Exception('Please enter a valid file') if file.name.endswith('.xlsx'): if 'student_information' in file.name.lower(): bootstrapFile['course_title'] = course_title bootstrapFile['faculty_username'] = faculty_username bootstrapFile['file_path'] = file.temporary_file_path() else: raise Exception("Invalid file information. Please upload students information only.") else: raise Exception("Invalid file type. Please upload .xlsx only") # If file is .xlsx then proceed with processing response['results'] = bootstrap.bootstrap_Students(requests,bootstrapFile) except Exception as e: # Uncomment for debugging - to print stack trace wihtout halting the process # traceback.print_exc() response['error_message'] = e.args[0] return render(requests, "Module_TeamManagement/Instructor/uploadcsv.html", response) # Reflush the nav bar utilities.populateRelevantCourses(requests, instructorEmail=requests.user.email) response['message'] = 'Successful Upload' # return render(requests, "Module_TeamManagement/Instructor/uploadcsv.html", response) return faculty_Dashboard(requests)
def configureDB_teams(requests): response = {"configureDB_teams": "active"} if requests.method == "GET": utilities.populateRelevantCourses(requests, instructorEmail=requests.user.email) response['courses'] = requests.session['courseList_updated'] return render(requests, "Module_TeamManagement/Instructor/instructorTeams.html", response) try: file = requests.FILES.get("file", False) faculty_email = requests.user.email course_section = requests.POST.get("course_section") bootstrapFile = {} if course_section == None: raise Exception('Please enter a valid course section number') if not file: raise Exception('Please enter a valid file') if file.name.endswith('.xlsx'): if 'team_information' in file.name.lower(): bootstrapFile['faculty_email'] = faculty_email bootstrapFile['course_section'] = course_section bootstrapFile['file_path'] = file.temporary_file_path() else: raise Exception( "Invalid file information. Please upload teams information only." ) else: raise Exception("Invalid file type. Please upload .xlsx only") # If file is .xlsx then proceed with processing response['results'] = bootstrap.update_Teams(bootstrapFile) except Exception as e: traceback.print_exc() response['error_message'] = e.args[0] response['courses'] = requests.session['courseList_updated'] return render(requests, "Module_TeamManagement/Instructor/instructorTeams.html", response) response['message'] = 'Teams Configured' return faculty_Overview(requests)
def home(requests): context = {} # Redirect user to login page if not authorized and student try: processLogin.studentVerification(requests) except: logout(requests) return render(requests, 'Module_Account/login.html', context) context["home"] = "active" requests.session['userType'] = "Student" student_email = requests.user.email all_SocialAccount = SocialAccount.objects.all() for each_SocialAccount in all_SocialAccount: data = each_SocialAccount.extra_data if data['email'] == student_email: requests.session['user_picture'] = data['picture'] requests.session['user_name'] = data['name'].replace('_', '').strip() # Populates the info for the side nav bar for instructor utilities.populateRelevantCourses(requests, studentEmail=student_email) # Reads web scrapper results trailResults = utilities.populateTrailheadInformation( requests, student_email) context.update(trailResults) # Get number of weeks since school term start and reamining weeks till school term ends past_weeks, remaining_weeks = utilities.getRemainingWeeks() if past_weeks != None and remaining_weeks != None: context['past_weeks'] = past_weeks context['remaining_weeks'] = remaining_weeks context['progress'] = (past_weeks / (past_weeks + remaining_weeks)) * 100 else: context['past_weeks'] = 0 context['remaining_weeks'] = 0 context['progress'] = 0 return render(requests, "Module_TeamManagement/Student/studentHome.html", context)
def configureDB_clt(requests): response = {"configureDB_clt": "active"} if requests.method == "GET" and requests.GET.get("user") == "faculty": utilities.populateRelevantCourses(requests, instructorEmail=requests.user.email) response['courses'] = requests.session['courseList_updated'] return render(requests, "Module_TeamManagement/Instructor/instructorTools.html", response) elif requests.method == "GET" and (requests.GET.get("user") == "student" or requests.POST.get("user") == "student"): utilities.populateRelevantCourses(requests, studentEmail=requests.user.email) response['courses'] = requests.session['courseList_updated'] return render(requests, "Module_TeamManagement/Student/studentTools.html", response) try: user = requests.POST.get("user") if user == "student": student_email = requests.user.email type = requests.POST.get("type") link = requests.POST.get("link") course = requests.POST.get("course_title") if course == None: raise Exception('Please specify a course.') elif type == None: raise Exception('Please specify a learning tool type.') elif len(link) == 0: raise Exception('Please specify a learning tool link.') elif "https://trailhead.salesforce.com/en/me/" not in link: raise Exception('Please specify a valid learning tool link.') id = student_email.split('@')[0] + "_" + type class_studentObj = Class.objects.filter( student=student_email).filter(course_section=course) try: # Update cltObj = Cloud_Learning_Tools.objects.get(id=id) cltObj.website_link = link cltObj.save() except: # Create cltObj = Cloud_Learning_Tools.objects.create( id=id, type=type, website_link=link, ) cltObj.save() for student in class_studentObj: student.clt_id.add(cltObj) utilities.webScrapper_SingleLink(student_email, link, course_section=course.replace( ' ', '')) return home(requests) file = requests.FILES.get("file", False) faculty_email = requests.user.email action = requests.POST.get("action") bootstrapFile = {} cleToolName = requests.POST.get("type") if action == 'batch': course = requests.POST.get("course_title") else: course = requests.POST.get("course_section") bootstrap.configureCourseToolsList( course, cleToolName ) #Configures the course section database to include list of tools into the course section for display on dashboard if file: if file.name.endswith('.xlsx'): if 'learning_tools' in file.name.lower(): bootstrapFile['faculty_email'] = faculty_email bootstrapFile['course'] = course bootstrapFile['action'] = action bootstrapFile['file_path'] = file.temporary_file_path() else: raise Exception( "Invalid file information. Please upload tools information only." ) else: raise Exception("Invalid file type. Please upload .xlsx only") else: raise Exception("Please upload an excel file") # If file is .xlsx then proceed with processing response['results'] = bootstrap.update_CLT(bootstrapFile, course) utilities.webScrapper(course_selected=course) except Exception as e: traceback.print_exc() response['error_message'] = e.args[0] if requests.POST.get("user") == "student": utilities.populateRelevantCourses(requests, studentEmail=requests.user.email) response['courses'] = requests.session['courseList_updated'] return render(requests, "Module_TeamManagement/Student/studentTools.html", response) if action == 'batch': utilities.populateRelevantCourses( requests, instructorEmail=requests.user.email) response['courses'] = requests.session['courseList_updated'] return render( requests, "Module_TeamManagement/Instructor/instructorTools.html", response) else: return faculty_Overview(requests) response['message'] = 'Learning Tools Configured' if action == 'batch': utilities.populateRelevantCourses(requests, instructorEmail=requests.user.email) response['courses'] = requests.session['courseList_updated'] return render(requests, "Module_TeamManagement/Instructor/instructorTools.html", response) else: return faculty_Overview(requests)
def configureDB_course(requests): response = {"configureDB_course": "active"} # Retrieve all the course courseObject = Course.objects.all() courseList = [] for course in courseObject: courseList.append(course.course_title) response['courses'] = courseList if requests.method == "GET": return render(requests, "Module_TeamManagement/Instructor/uploadcsv.html", response) try: file = requests.FILES.get("file", False) if file: return configureDB_students(requests) course_title = requests.POST.get("course_title") facultyObj = Faculty.objects.get(email=requests.user.email) itOps_tool = requests.POST.get("add_tool") if course_title == None: raise Exception('Please enter a valid course title') courseObj = Course.objects.get(course_title=course_title) course_section_id = course_title + 'G0' if requests.session['configured_Tools'] == None: tools = [itOps_tool] else: tools = [ 'Telegram' ] if 'Telegram' in requests.session['configured_Tools'] else [] if itOps_tool != None: tools.append(itOps_tool) # Create/Retrieve (if exists) course_section object try: course_sectioObj = Course_Section.objects.get( course_section_id=course_section_id) except: course_sectioObj = Course_Section.objects.create( course_section_id=course_section_id, course=courseObj, section_number='G0', learning_tools='_'.join(tools) if len(tools) > 0 else None, to_string=course_title + ' G0', ) course_sectioObj.save() # Associate course with faculty facultyObj.course_section.add(course_sectioObj) except Exception as e: traceback.print_exc() response['error_message'] = e.args[0] return render(requests, "Module_TeamManagement/Instructor/uploadcsv.html", response) # Reflush the nav bar utilities.populateRelevantCourses(requests, instructorEmail=requests.user.email) response['message'] = 'Course created' return faculty_Dashboard(requests)
def faculty_Dashboard(requests): context = {"faculty_Dashboard": "active"} # Redirect user to login page if not authorized and faculty try: processLogin.InstructorVerification(requests) except: logout(requests) return render(requests, 'Module_Account/login.html', context) requests.session['userType'] = "Instructor" faculty_username = requests.user.email.split('@')[0] all_SocialAccount = SocialAccount.objects.all() for each_SocialAccount in all_SocialAccount: data = each_SocialAccount.extra_data if data['email'] == requests.user.email: requests.session['user_picture'] = data['picture'] requests.session['user_name'] = data['name'].replace('_', '').strip() try: courseStudents = [] #Populates the info for the side nav bar for instructor utilities.populateRelevantCourses(requests, instructorEmail=requests.user.email) facultyObj = Faculty.objects.get(email=requests.user.email) registered_course_section = facultyObj.course_section.all() courses = {} students = [] tele_data = {} previouscourse = "a" #filler for course_section in registered_course_section: course_title = course_section.course.course_title if "G0" in (course_section.course_section_id): courses[course_title] = {"count": 0, "sectionCount": 0} else: if course_title not in courses: courses[course_title] = {} if previouscourse != "a": courses[previouscourse]["count"] = len(courseStudents) courses[previouscourse][ "sectionCount"] = sectionCounter courses[previouscourse]["toolImage_list"] = toolsList courseStudents = [] previoussection = "a" previouscourse = course_title sectionCounter = 0 toolsList = [] if previoussection != course_section: sectionCounter += 1 classObj = Class.objects.all().filter( course_section=course_section) for student in classObj: students.append(student) courseStudents.append(student) try: currentCourseTools = course_section.learning_tools.split( "_") for tools in currentCourseTools: if tools not in toolsList: toolsList.append(tools) except: pass previoussection = course_section if previouscourse != "a": courses[previouscourse]["count"] = len(courseStudents) courses[previouscourse]["sectionCount"] = sectionCounter courses[previouscourse]["toolImage_list"] = toolsList context['section_count'] = len(registered_course_section) context['course_count'] = len(courses) context['course_list'] = courses context['student_count'] = len(students) except: traceback.print_exc() context = {'messages': ['Invalid user account']} return render(requests, 'Module_Account/login.html', context) context["courses"] = requests.session['courseList_updated'] # Get number of weeks since school term start and reamining weeks till school term ends past_weeks, remaining_weeks = utilities.getRemainingWeeks() if past_weeks != None and remaining_weeks != None: context['past_weeks'] = past_weeks context['remaining_weeks'] = remaining_weeks context['progress'] = (past_weeks / (past_weeks + remaining_weeks)) * 100 else: context['past_weeks'] = 0 context['remaining_weeks'] = 0 context['progress'] = 0 # Reads web scrapper results trailResults = utilities.populateTrailheadInformation( requests, instructorEmail=requests.user.email) context.update(trailResults) context[ 'message'] = 'Successful retrieval of faculty\'s overview information' #print(context) return render(requests, "Module_TeamManagement/Instructor/instructorHome.html", context)