예제 #1
0
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,
        })
예제 #2
0
파일: views.py 프로젝트: Gerund/class2go
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,
             })
예제 #3
0
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,
        },
    )
예제 #4
0
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,
                  })
예제 #5
0
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
예제 #6
0
    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
예제 #7
0
    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
예제 #8
0
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,
        })