Beispiel #1
0
def classes_next(request, school_id):
    nextlink = request.GET.get('nextLink')
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)

    education_service = EducationService(user.tenant_id, token)
    #school = education_service.get_school(school_id)
    my_classes = education_service.get_my_classes(school_id)
    all_classes, classnextlink = education_service.get_classes(school_id, top=12, nextlink=nextlink)

    for c in all_classes:
        my_class = next((mc for mc in my_classes if c.id == mc.id), None)
        c.custom_data['is_my'] = my_class != None
        if my_class != None:
            c.members = my_class.members

    # my_section_list = [m.to_dict() for m in my_classes]

    ajax_result = {}
    ajax_result['classes'] = {}
    ajax_result['classes']['value'] = [{
          'id': c.id,
          'is_my': c.custom_data['is_my'],
          'display_name': c.display_name,
          'code': c.code,
          'teachers': [{ 'display_name': t.display_name } for t in c.teachers],
          'term_name': c.term.display_name,
          'term_start_time': c.term.start_date,
          'term_end_time': c.term.end_date } for c in all_classes]
    ajax_result['classes']['next_link'] = classnextlink
    # ajax_result['MyClasss'] = my_section_list

    return JsonResponse(ajax_result, safe=False)
Beispiel #2
0
def aboutme(request):
    user = AuthService.get_current_user(request)
    
    context = { 'user': user }
    login_as =""
    if user.local_user.is_authenticated:
        context['show_color'] = user.local_user.is_authenticated
        context['colors'] = constant.favorite_colors        
        context['favorite_color'] = user_service.get_favorite_color(user.user_id)
    if user.is_admin:
        login_as ="Admin"
    if not user.is_admin and user.o365_user is not None:
        token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)        
        education_service = EducationService(user.tenant_id, token)            
        me = education_service.get_me() 
        my_school_id = me.schools[0].id
        
        if me.is_teacher:
            login_as="Teacher"
        if me.is_student:
            login_as="Student"
        
        context['me'] = me
        context['groups'] = education_service.get_my_classes(my_school_id)
    else:
        context['groups'] = []
    context['login_as'] = login_as
    context['role']=login_as
    return render(request, 'managements/aboutme.html', context)
Beispiel #3
0
def get_submissions(request,class_id,assignment_id):
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)  
    submissions = education_service.get_Submissions(class_id,assignment_id)   
    ms_graph_service = MSGraphService(token)

    result=[]
    for submission in submissions:
        userId =  submission.submittedBy["user"]["id"];
        user = ms_graph_service.get_user_info(userId)                
        resources= education_service.get_Submission_Resources(class_id,assignment_id,submission.id)
        array={}
        array["displayName"]=user["displayName"]
        array["submittedDateTime"]  = submission.submittedDateTime 
        
        resources_array=[]
        for resource in resources:
            resources_dict={}
            resources_dict["displayName"] = resource.resource["displayName"]
            resources_array.append(resources_dict)
        array["resources"]=  resources_array  
        result.append(array)

    return JsonResponse(result, safe=False)
Beispiel #4
0
def get_assignment_submission_resources(request,class_id,assignment_id):
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)
    assignemtnResources = education_service.get_Assignment_Resources(class_id,assignment_id)
    submissionResources = education_service.get_Assignment_Submissions_By_User(class_id,assignment_id,user.o365_user_id)
    
    result={}
    resourceArray=[] 
    submissionResourcesArray=[]
    for resource in assignemtnResources:
        obj={}
        obj["id"]=resource.id
        obj["resource"]=resource.resource["displayName"]
        resourceArray.append(obj)
    result["resources"]=resourceArray;
    
    result["submissionId"]=submissionResources[0].id
    for resource in submissionResources:
       for item in resource.resources:
           obj={}
           obj["id"]=item["id"]
           obj["resource"]=item["resource"]["displayName"]
           submissionResourcesArray.append(obj)
    result["submissionResources"]=submissionResourcesArray;
           
    return JsonResponse(result, safe=False)
Beispiel #5
0
def get_assignment_resources(request,class_id,assignment_id):
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)
    resources = education_service.get_Assignment_Resources(class_id,assignment_id)   
    result=[]
    for resource in resources:
        resourceArray={} 
        resourceArray["id"]=resource.id
        resourceArray["resource"]=resource.resource["displayName"]
        result.append(resourceArray)

    return JsonResponse(result, safe=False)
Beispiel #6
0
def classes(request, school_id):
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)
    me = education_service.get_me()
    role = get_user_role(user, me)
    education_service = EducationService(user.tenant_id, token)
    school = education_service.get_school(school_id)
    my_classes = education_service.get_my_classes(school_id)
    all_classes, classesnextlink = education_service.get_classes(school_id, 12)

    for c in all_classes:
        my_class = next((mc for mc in my_classes if c.id == mc.id), None)
        c.custom_data['is_my'] = my_class != None
        if my_class != None:
            c.members = my_class.members

    context = {
        'user': user,
        'school': school,
        'classesnextlink': classesnextlink,
        'classes': all_classes,
        'myclasses': my_classes,
        'school_id': school_id,
        'is_in_a_school': True,
        'me': me,
        'role':role
    }
    return render(request, 'schools/classes.html', context)
Beispiel #7
0
def update_assignment(request):
   if request.method == 'POST':
  
        post=request.POST
        files=request.FILES
        user = AuthService.get_current_user(request)
        token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
        education_service = EducationService(user.tenant_id, token)  
        assignment = education_service.get_assignment(post["classId"],post["assignmentId"])  

        if assignment.status=='draft' and post['assignmentStatus']=='assigned':
            education_service.publish_assignment(post['classId'], post['assignmentId'])
        
       
        files= request.FILES.getlist("newResource")

        if files !=None:
            resourceFolderURL = education_service.get_Assignment_Resource_Folder_URL(post["classId"],post["assignmentId"])["value"]
            ids = getIds(resourceFolderURL)
            for file in files:
               driveFile = uploadFileToOneDrive(resourceFolderURL,file,education_service)      
               resourceUrl = "https://graph.microsoft.com/v1.0/drives/" + ids[0] + "/items/" + driveFile["id"]
               education_service.add_assignment_resources(post["classId"],post["assignmentId"],driveFile["name"],resourceUrl)
    
        referer = request.META.get('HTTP_REFERER') 
        if referer.find("?")==-1:
            referer +="?tab=assignments"
        return HttpResponseRedirect(referer)
Beispiel #8
0
def new_assignment(request):
    if request.method == 'POST':        
        post=request.POST        
        user = AuthService.get_current_user(request)
        token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
        education_service = EducationService(user.tenant_id, token)
        dueDate = post["duedate"] + "T" + post["duetime"] + "Z"       
        dueDateUTC=datetime.strptime(dueDate,"%m/%d/%YT%H:%M %pZ").strftime("%Y-%m-%dT%H:%M:%SZ")
        result = education_service.add_assignment(post["classId"],post["name"],dueDateUTC)        
        jsonContent = result.content.decode('utf8')
        assignment = json.loads(jsonContent)
        if post['status']=="assigned":
           education_service.publish_assignment(post["classId"],assignment["id"])


        files= request.FILES.getlist("fileUpload")
        if files !=None:
            resourceFolderURL = education_service.get_Assignment_Resource_Folder_URL(post["classId"],assignment["id"])["value"]
            ids = getIds(resourceFolderURL)
            
            for file in files:
               driveFile = uploadFileToOneDrive(resourceFolderURL,file,education_service)      
               resourceUrl = "https://graph.microsoft.com/v1.0/drives/" + ids[0] + "/items/" + driveFile["id"]
               education_service.add_assignment_resources(post["classId"],assignment["id"],driveFile["name"],resourceUrl)
    
        
        referer = request.META.get('HTTP_REFERER') 
        if referer.find("?")==-1:
            referer +="?tab=assignments"
        return HttpResponseRedirect(referer)
 def _get_roles(self, tenant_id, user_id):
     roles = []
     # check if the user is an admin
     directory_roles = self._get_directory_roles()
     admin_role = next(
         r for r in directory_roles
         if r.display_name == constant.company_admin_role_name)
     if admin_role:
         members = admin_role.to_dict()['members']
         if any(m for m in members if m['id'] == user_id):
             roles.append(constant.Roles.Admin)
     # check if the user is a faculty or a student
     education_service = EducationService(tenant_id, self.access_token)
     me = education_service.get_me()
     if me:
         if me.is_teacher:
             roles.append(constant.Roles.Faculty)
         if me.is_student:
             roles.append(constant.Roles.Student)
     return roles
Beispiel #10
0
def newAssignmentSubmissionResource(request):
    if request.method == 'POST':
        files= request.FILES.getlist("newResource")
        if len(files)!=0:
            post=request.POST            
            user = AuthService.get_current_user(request)
            token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
            education_service = EducationService(user.tenant_id, token)  
            submissions = education_service.get_Assignment_Submissions_By_User(post["classId"],post["assignmentId"],user.o365_user_id)  
            if len(submissions)!=0:
                resourceFolderURL = submissions[0].resourcesFolderUrl
                ids = getIds(resourceFolderURL)
                for file in files:
                    driveFile = uploadFileToOneDrive(resourceFolderURL,file,education_service)      
                    resourceUrl = "https://graph.microsoft.com/v1.0/drives/" + ids[0] + "/items/" + driveFile["id"]
                    education_service.add_Submission_Resource(post["classId"],post["assignmentId"],driveFile["name"],resourceUrl,post["submissionId"])
    
        referer = request.META.get('HTTP_REFERER') 
        if referer.find("?")==-1:
            referer +="?tab=assignments"
        return HttpResponseRedirect(referer)
Beispiel #11
0
def schools(request):   
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)

    education_service = EducationService(user.tenant_id, token)
    me = education_service.get_me()

    schools = education_service.get_schools()
    for school in schools:
        school.custom_data['is_my'] = me.is_in_school(school.id)

    # sort schools: my school will be put to the top
    schools.sort(key=lambda s:s.display_name if me.is_in_school(s.id) else 'Z_' + s.display_name)
    role = get_user_role(user, me)
    context = {
        'user': user,
        'me': me,
        'role':role,
        'schools': schools
    }
    return render(request, 'schools/index.html', context)
Beispiel #12
0
def add_coteacher(request, class_id, user_object_id):    
    previousURL = request.META.get('HTTP_REFERER')    
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)
    education_service.add_member(class_id,user_object_id)
    education_service.add_owner(class_id,user_object_id)
    return HttpResponseRedirect(previousURL)
Beispiel #13
0
def class_details(request, school_id, class_id):
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)
    me = education_service.get_me()
    role = get_user_role(user, me)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)

    school = education_service.get_school(school_id)
    current_class = education_service.get_class(class_id)    
    members = education_service.get_class_members(class_id)
    teachers = [m for m in members if m.primary_role == 'teacher']
    students = [m for m in members if m.primary_role == 'student']    
    
    # set favorite colors and seating positions
    for student in students:
        favorite_color = user_service.get_favorite_color_by_o365_user_id(student.id)
        if favorite_color:
            student.custom_data['favorite_color'] = favorite_color
        seating_position = user_service.get_seating_position(student.id, class_id)
        if not seating_position:
            seating_position = 0
        student.custom_data['position'] = seating_position
   
    assignments = education_service.get_assignments(class_id)
    for assignment in assignments: 
        if assignment.dueDateTime !=None:      
            assignment.dueDateTimeLocal = datetime_from_utc_to_local(datetime.strptime(assignment.dueDateTime, '%Y-%m-%dT%H:%M:%SZ')).strftime("%m/%d/%Y")



    all_teachers = education_service.get_teachers(school.number)
    filtered_teachers = [t for t in all_teachers if all(t.id != i.id for i in teachers)]

    # set seatrange
    seatrange = range(1, 37)

    ms_token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    ms_graph_service = MSGraphService(ms_token)

    documents = ms_graph_service.get_documents(class_id)
    documents_root = ms_graph_service.get_documents_root(class_id)
    conversations = ms_graph_service.get_conversations(class_id)
    for conversation in conversations:
        conversation.custom_data['url'] = ms_graph_service.get_conversations_url(conversation.id, current_class.mail_nickname)
    conversations_root = ms_graph_service.get_conversations_root(current_class.mail_nickname)

    favorite_color = user_service.get_favorite_color_by_o365_user_id(user.o365_user_id)

    context = {
        'user': user,
        'me': me,
        'role':role,
        'is_student':me.is_student,
        'school': school,
        'class': current_class,
        'teachers': teachers,
        'students': students,
        'documents': documents,
        'documents_root': documents_root,
        'conversations': conversations,
        'conversations_root': conversations_root,
        'seatrange': seatrange,
        'school_id': school_id,
        'class_id': class_id,
        'is_in_a_school': True,
        'favorite_color': favorite_color,
        'filtered_teachers': filtered_teachers,
        'assignments' : assignments
    }
    return render(request, 'schools/classdetails.html', context)