示例#1
0
 def get_queryset(self):
     project_pks = self.request.query_params.getlist(
         'projects[]') + self.request.query_params.getlist(
             'projects')  # jquery's .get uses the []
     queryset = NewExam.objects.all()
     projects = projects_visible_to_user(self.request.user)
     if len(project_pks):
         projects = projects.filter(pk__in=[int(pk) for pk in project_pks])
     queryset = queryset.filter(editoritem__project__in=projects).filter(
         editoritem__in=EditorItem.objects.filter(
             EditorItem.filter_can_be_viewed_by(self.request.user)))
     return queryset
示例#2
0
 def get_viewable_items(self):
     return self.base_queryset().filter(
         EditorItem.filter_can_be_viewed_by(self.request.user))
示例#3
0
文件: exam.py 项目: numbas/editor
    def form_valid(self, form):
        exam_file = form.cleaned_data.get('file')

        content = exam_file.read().decode('utf-8')
        project = form.cleaned_data.get('project')

        ei = EditorItem(content=content, author=self.request.user, project=project)
        ei.locale = project.default_locale

        ei.save()
        ei.set_licence(project.default_licence)
        obj = ei.get_parsed_content()

        def add_contributors(item,contributor_data):
            root = self.request.build_absolute_uri('/')
            for c in contributor_data:
                if c['profile_url'][:len(root)]==root:
                    rest = c['profile_url'][len(root):]
                    try:
                        match = resolve(rest)
                        if match.url_name != 'view_profile':
                            raise Resolver404()
                        pk = match.kwargs['pk']
                        user = User.objects.get(pk=pk)
                        Contributor.objects.create(item=item,user=user)
                    except (Resolver404,User.DoesNotExist):
                        Contributor.objects.create(item=item,name=c['name'],profile_url=c['profile_url'])
                else:
                    Contributor.objects.create(item=item,name=c['name'],profile_url=c['profile_url'])

        contributors = obj.data.get('contributors',[])
        add_contributors(ei,contributors)

        exam = NewExam()
        exam.editoritem = ei
        exam.save()

        exam_object = NumbasObject(source=content)

        groups = []
        for group in exam_object.data['question_groups']:
            qs = []
            for q in group['questions']:
                question_object = NumbasObject(data=q, version=exam_object.version)

                qei = EditorItem(
                    content=str(question_object),
                    author=ei.author
                )
                qei.set_licence(ei.licence)
                qei.project = ei.project
                qei.save()

                qo = NewQuestion()
                qo.editoritem = qei
                qo.save()

                extensions = Extension.objects.filter(location__in=exam_object.data['extensions'])
                qo.extensions.add(*extensions)
                qs.append(qo.pk)

                contributors = q.get('contributors',[])
                add_contributors(qei,contributors)

            groups.append(qs)
        exam.set_question_groups(groups)

        self.exam = exam

        return HttpResponseRedirect(self.get_success_url())
示例#4
0
    def form_valid(self, form):
        exam_file = form.cleaned_data.get('file')

        content = exam_file.read().decode('utf-8')
        project = form.cleaned_data.get('project')

        ei = EditorItem(content=content, author=self.request.user, project=project)
        ei.locale = project.default_locale

        ei.save()
        ei.set_licence(project.default_licence)
        obj = ei.get_parsed_content()

        def add_contributors(item,contributor_data):
            root = self.request.build_absolute_uri('/')
            for c in contributor_data:
                if c['profile_url'][:len(root)]==root:
                    rest = c['profile_url'][len(root):]
                    try:
                        match = resolve(rest)
                        if match.url_name != 'view_profile':
                            raise Resolver404()
                        pk = match.kwargs['pk']
                        user = User.objects.get(pk=pk)
                        Contributor.objects.create(item=item,user=user)
                    except (Resolver404,User.DoesNotExist):
                        Contributor.objects.create(item=item,name=c['name'],profile_url=c['profile_url'])
                else:
                    Contributor.objects.create(item=item,name=c['name'],profile_url=c['profile_url'])

        contributors = obj.data.get('contributors',[])
        add_contributors(ei,contributors)

        exam = NewExam()
        exam.editoritem = ei
        exam.save()

        exam_object = NumbasObject(source=content)

        groups = []
        for group in exam_object.data['question_groups']:
            qs = []
            for q in group['questions']:
                question_object = NumbasObject(data=q, version=exam_object.version)

                qei = EditorItem(
                    content=str(question_object),
                    author=ei.author
                )
                qei.set_licence(ei.licence)
                qei.project = ei.project
                qei.save()

                qo = NewQuestion()
                qo.editoritem = qei
                qo.save()

                extensions = Extension.objects.filter(location__in=exam_object.data['extensions'])
                qo.extensions.add(*extensions)
                qs.append(qo.pk)

                contributors = q.get('contributors',[])
                add_contributors(qei,contributors)

            groups.append(qs)
        exam.set_question_groups(groups)

        self.exam = exam

        return HttpResponseRedirect(self.get_success_url())
示例#5
0
 def get_queryset(self):
     queryset = NewQuestion.objects.all()
     queryset = queryset.filter(editoritem__in=EditorItem.objects.filter(
         EditorItem.filter_can_be_viewed_by(self.request.user)))
     return queryset
示例#6
0
文件: exam.py 项目: skelletore/editor
    def form_valid(self, form):
        exam_file = form.cleaned_data.get('file')

        content = exam_file.read().decode('utf-8')
        project = form.cleaned_data.get('project')

        ei = EditorItem(content=content, author=self.request.user, project=project)
        ei.locale = project.default_locale

        ei.save()
        ei.set_licence(project.default_licence)

        exam = NewExam()
        exam.editoritem = ei
        exam.save()

        exam_object = NumbasObject(source=content)

        groups = []
        for group in exam_object.data['question_groups']:
            qs = []
            for q in group['questions']:
                question_object = NumbasObject(data=q, version=exam_object.version)

                qei = EditorItem(
                    content=str(question_object),
                    author=ei.author
                )
                qei.set_licence(ei.licence)
                qei.project = ei.project
                qei.save()

                qo = NewQuestion()
                qo.editoritem = qei
                qo.save()

                extensions = Extension.objects.filter(location__in=exam_object.data['extensions'])
                qo.extensions.add(*extensions)
                qs.append(qo.pk)
            groups.append(qs)
        exam.set_question_groups(groups)

        self.exam = exam

        return HttpResponseRedirect(self.get_success_url())
示例#7
0
    def form_valid(self, form):
        exam_file = form.cleaned_data.get('file')

        content = exam_file.read().decode('utf-8')
        project = form.cleaned_data.get('project')

        ei = EditorItem(content=content,author=self.request.user,project=project)
        ei.locale = project.default_locale

        ei.save()
        ei.set_licence(project.default_licence)

        exam = NewExam()
        exam.editoritem = ei
        exam.save()

        exam_object = NumbasObject(source=content)

        groups = []
        for group in exam_object.data['question_groups']:
            qs = []
            for q in group['questions']:
                question_object = NumbasObject(data=q,version=exam_object.version)

                qei = EditorItem(
                    content = str(question_object),
                    author = ei.author
                )
                qei.set_licence(ei.licence)
                qei.project = ei.project
                qei.save()

                qo = NewQuestion()
                qo.editoritem = qei
                qo.save()

                extensions = Extension.objects.filter(location__in=exam_object.data['extensions'])
                qo.extensions.add(*extensions)
                qs.append(qo.pk)
            groups.append(qs)
        exam.set_question_groups(groups)

        self.exam = exam

        return HttpResponseRedirect(self.get_success_url())
示例#8
0
 def get_viewable_items(self):
     return self.base_queryset().filter(EditorItem.filter_can_be_viewed_by(self.request.user))