Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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)