def edit(request, course_prefix, course_suffix, file_id): common_page_data = request.common_page_data try: file = File.objects.get(id=file_id, course=common_page_data['draft_course']) except File.DoesNotExist: raise Http404 form = FileEditForm(instance=file, course=common_page_data['draft_course']) reverseview = 'courses.files.actions.edit' cg_info = ContentGroup.groupinfo_by_id('file', file.image.id) parent = cg_info.get('__parent', None) if not parent: parent_val = "none,none" else: parent_val = "%s,%d" % (cg_info['__parent_tag'], parent.image.id) return render( request, 'files/upload.html', { 'file': file, 'parent_val': parent_val, 'reverseview': reverseview, 'common_page_data': common_page_data, 'form': form, })
def edit(request, course_prefix, course_suffix, file_id): common_page_data=request.common_page_data try: file=File.objects.get(id=file_id, course=common_page_data['draft_course']) except File.DoesNotExist: raise Http404 form = FileEditForm(instance=file, course=common_page_data['draft_course']) reverseview = 'courses.files.actions.edit' cg_info = ContentGroup.groupinfo_by_id('file', file.image.id) parent = cg_info.get('__parent', None) if not parent: parent_val = "none,none" else: parent_val = "%s,%d" % (cg_info['__parent_tag'], parent.image.id) return render(request, 'files/upload.html', {'file':file, 'parent_val':parent_val, 'reverseview': reverseview, 'common_page_data': common_page_data, 'form': form, })
def edit(request): course_prefix = request.POST.get("course_prefix") course_suffix = request.POST.get("course_suffix") file_id = request.POST.get("file_id", "-1") common_page_data = get_common_page_data(request, course_prefix, course_suffix) try: file = File.objects.get(id=int(file_id), course=common_page_data["draft_course"]) except File.DoesNotExist: raise Http404 if request.method == "POST": form = FileEditForm(request.POST, course=common_page_data["draft_course"], instance=file) if form.is_valid(): form.save() file.commit() parent_type = request.POST.get("parent") if parent_type and parent_type[:4] != "none": parent_type, parent_id = parent_type.split(",") else: parent_type, parent_id = None, None if parent_type: parent_ref = ContentGroup.groupable_types[parent_type].objects.get(id=long(parent_id)) content_group_groupid = ContentGroup.add_parent(file.image.course, parent_type, parent_ref.image) ContentGroup.add_child( content_group_groupid, "file", file.image, display_style=request.POST.get("display_style", "list") ) else: # file should have no parents, so delete its place in a contentgroup if it's a child try: cgobj = file.image.contentgroup_set.get() if cgobj.level != 1: cgobj.delete() except ContentGroup.DoesNotExist: # nothing to do if the file is not in a contentgroup pass return redirect("courses.views.course_materials", course_prefix, course_suffix) else: form = FileEditForm(instance=file, course=common_page_data["course"]) reverseview = "courses.files.actions.edit" cg_info = ContentGroup.groupinfo_by_id("file", file.image.id) parent = cg_info.get("__parent", None) if not parent: parent_val = "none,none" else: parent_val = "%s,%d" % (cg_info["__parent_tag"], parent.image.id) return render( request, "files/upload.html", { "file": file, "parent_val": parent_val, "reverseview": reverseview, "common_page_data": common_page_data, "form": form, }, )
def edit(request): course_prefix = request.POST.get("course_prefix") course_suffix = request.POST.get("course_suffix") file_id = request.POST.get("file_id","-1") common_page_data = get_common_page_data(request, course_prefix, course_suffix) try: file=File.objects.get(id=int(file_id), course=common_page_data['draft_course']) except File.DoesNotExist: raise Http404 if request.method == "POST": form = FileEditForm(request.POST, course=common_page_data['draft_course'], instance=file) if form.is_valid(): form.save() file.commit() parent_type = request.POST.get('parent') if parent_type and parent_type[:4] != 'none': parent_type, parent_id = parent_type.split(',') else: parent_type, parent_id = None, None if parent_type: parent_ref = ContentGroup.groupable_types[parent_type].objects.get(id=long(parent_id)) if parent_ref != file: # Don't bother updating the ContentGroup if self this is already the parent of the group # (which is implicitly the case for all non-grouped items) content_group_groupid = ContentGroup.add_parent(file.image.course, parent_type, parent_ref.image) ContentGroup.add_child(content_group_groupid, 'file', file.image, display_style=request.POST.get('display_style','list')) else: #file should have no parents, so delete its place in a contentgroup if it's a child try: cgobj = file.image.contentgroup_set.get() if cgobj.level != 1: cgobj.delete() except ContentGroup.DoesNotExist: #nothing to do if the file is not in a contentgroup pass return redirect('courses.views.course_materials', course_prefix, course_suffix) else: form = FileEditForm(instance=file, course=common_page_data['course']) reverseview = 'courses.files.actions.edit' cg_info = ContentGroup.groupinfo_by_id('file', file.image.id) parent = cg_info.get('__parent', None) if not parent: parent_val = "none,none" else: parent_val = "%s,%d" % (cg_info['__parent_tag'], parent.image.id) return render(request, 'files/upload.html', {'file':file, 'parent_val':parent_val, 'reverseview': reverseview, 'common_page_data': common_page_data, 'form': form, })
def last_completed_record(exam, student, include_contentgroup=False): """Helper function to get the last completed record of this exam. If include_contentgroup is True, will include records from all of the other exams in the contentgroup. """ try: if include_contentgroup: cginfo = ContentGroup.groupinfo_by_id('exam',exam.id) exam_list = cginfo.get('exam',[exam]) #default to a singleton list consisting of just this exam record = ExamRecord.objects.filter(exam__in=exam_list, complete=True, student=student).latest('last_updated') else: record = ExamRecord.objects.filter(exam=exam, complete=True, student=student).latest('last_updated') return record except ExamRecord.DoesNotExist: return None
def generate_default_quiz_formula(selfclass, course): """ This method will return a default quiz grading formula for the course, WHICH MUST BE READY MODE. The default logic is: * linear sum of ExamScores, except * take the max of all quizzes in the same Content Group * In-Video Quizzes don't count """ quizzes = set( Exam.objects.filter(course=course, exam_type='problemset', invideo=False, is_deleted=False, live_datetime__isnull=False)) content_groups = ContentGroup.objects.filter(course=course, level=1, exam__isnull=False, exam__exam_type='problemset', exam__live_datetime__isnull=False) \ .select_related('exam').order_by("exam__live_datetime") #top level quizzes parent_quizzes = map(lambda g: g.exam, content_groups) all_quiz_groups = [] #add all the quizzes that are in groups first for parent in parent_quizzes: groupinfo = ContentGroup.groupinfo_by_id('exam', parent.id) members = groupinfo['exam'] slugs = map(lambda i: i.slug, members) all_quiz_groups.append(slugs) quizzes = quizzes - set(members) #print(quizzes) #now add quizzes that are singletons for q in quizzes: all_quiz_groups.append([q.slug]) #print((all_quiz_groups)) #now just output a formula that's a linear sum of the maxes of all the groups def stringify_inner_list(lst): return "max( %s )" % " , ".join(map(lambda li: "{{%s}}" % li, lst)) strout = " + ".join( map(lambda li: stringify_inner_list(li), all_quiz_groups)) #print(strout) return strout
def generate_default_quiz_formula(selfclass, course): """ This method will return a default quiz grading formula for the course, WHICH MUST BE READY MODE. The default logic is: * linear sum of ExamScores, except * take the max of all quizzes in the same Content Group * In-Video Quizzes don't count """ quizzes = set(Exam.objects.filter(course=course, exam_type='problemset', invideo=False, is_deleted=False, live_datetime__isnull=False)) content_groups = ContentGroup.objects.filter(course=course, level=1, exam__isnull=False, exam__exam_type='problemset', exam__live_datetime__isnull=False) \ .select_related('exam').order_by("exam__live_datetime") #top level quizzes parent_quizzes = map(lambda g:g.exam, content_groups) all_quiz_groups = [] #add all the quizzes that are in groups first for parent in parent_quizzes: groupinfo = ContentGroup.groupinfo_by_id('exam', parent.id) members = groupinfo['exam'] slugs = map(lambda i: i.slug, members) all_quiz_groups.append(slugs) quizzes = quizzes-set(members) #print(quizzes) #now add quizzes that are singletons for q in quizzes: all_quiz_groups.append([q.slug]) #print((all_quiz_groups)) #now just output a formula that's a linear sum of the maxes of all the groups def stringify_inner_list(lst): return "max( %s )" % " , ".join(map(lambda li: "{{%s}}" % li, lst)) strout = " + ".join(map(lambda li: stringify_inner_list(li), all_quiz_groups)) #print(strout) return strout
def edit(request): course_prefix = request.POST.get("course_prefix") course_suffix = request.POST.get("course_suffix") file_id = request.POST.get("file_id", "-1") common_page_data = get_common_page_data(request, course_prefix, course_suffix) try: file = File.objects.get(id=int(file_id), course=common_page_data['draft_course']) except File.DoesNotExist: raise Http404 if request.method == "POST": form = FileEditForm(request.POST, course=common_page_data['draft_course'], instance=file) if form.is_valid(): form.save() file.commit() parent_type = request.POST.get('parent') if parent_type and parent_type[:4] != 'none': parent_type, parent_id = parent_type.split(',') else: parent_type, parent_id = None, None if parent_type: parent_ref = ContentGroup.groupable_types[ parent_type].objects.get(id=long(parent_id)) if parent_ref != file: # Don't bother updating the ContentGroup if self this is already the parent of the group # (which is implicitly the case for all non-grouped items) content_group_groupid = ContentGroup.add_parent( file.image.course, parent_type, parent_ref.image) ContentGroup.add_child(content_group_groupid, 'file', file.image, display_style=request.POST.get( 'display_style', 'list')) else: #file should have no parents, so delete its place in a contentgroup if it's a child try: cgobj = file.image.contentgroup_set.get() if cgobj.level != 1: cgobj.delete() except ContentGroup.DoesNotExist: #nothing to do if the file is not in a contentgroup pass return redirect('courses.views.course_materials', course_prefix, course_suffix) else: form = FileEditForm(instance=file, course=common_page_data['course']) reverseview = 'courses.files.actions.edit' cg_info = ContentGroup.groupinfo_by_id('file', file.image.id) parent = cg_info.get('__parent', None) if not parent: parent_val = "none,none" else: parent_val = "%s,%d" % (cg_info['__parent_tag'], parent.image.id) return render( request, 'files/upload.html', { 'file': file, 'parent_val': parent_val, 'reverseview': reverseview, 'common_page_data': common_page_data, 'form': form, })