예제 #1
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get_context_data(self, **kwargs):
        context = super(AssignmentDetailView, self).get_context_data(**kwargs)
        student = get_current_student(self.request)
        teacher = get_current_teacher(self.request)

        context['is_assignment_page'] = 'active'
        context['meta'] = self.get_object().as_meta(self.request)

        if student:
            # context['student'] = self.student
            context['form'] = AssignmentSubmissionForm
            slug = self.kwargs['slug']
            context['work_files'] = AssignmentWorkFile.objects.filter(
                assignment_work__assignment__slug=slug,
                assignment_work__student=student)
            context['materials'] = AssignmentFile.objects.filter(
                assignment__slug=slug)

            # print(context['work_files'])
            # print(slug)
            object = self.get_object()
            context['work'] = self.asgmt_work
            context['turned'] = self.asgmt_work.submitted
        elif teacher:
            context['students'] = Student.objects.filter(
                assignmentwork__submitted=True,
                assignmentwork__assignment=self.object)

        return context
예제 #2
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def post(self, request, *args, **kwargs):
        if not request.user.is_teacher:
            return HttpResponseForbidden()

        self.object = self.get_object()
        slug = self.kwargs.get('slug')

        teacher = get_current_teacher(self.request)

        form = self.form_class(request.POST)

        if form.is_valid():
            obj = Assignment.objects.filter(slug=slug)[0]
            obj.title = form.cleaned_data['title']
            obj.points = form.cleaned_data['points']
            dt = form.cleaned_data['date']
            tm = form.cleaned_data['time']
            obj.deadline = datetime.combine(dt, tm)
            obj.description = form.cleaned_data['description']
            obj.modified = datetime.now()
            obj.save()

            messages.success(request, f"Assignment updated")
            return self.form_valid(form)
        else:
            for msg in form.error_messages:
                messages.error(request, f"{msg}: {form.error_messages[msg]}")

            return self.form_invalid(form)
예제 #3
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get(self, request, *args, **kwargs):
        is_teacher = request.user.is_teacher
        is_student = request.user.is_student

        stream_slug = self.kwargs['slug']

        try:
            course_offering = course.models.CourseOffering.objects.filter(
                slug=stream_slug)[:1].get()
        except course.models.CourseOffering.DoesNotExist:
            course_offering = None

        if is_student:
            student = get_current_student(self.request)

            if not student.user.has_perm('view_courseoffering',
                                         course_offering):
                return HttpResponseForbidden()

            return super().get(self, request, *args, **kwargs)
        elif is_teacher:
            teacher = get_current_teacher(self.request)

            if not teacher.user.has_perm('view_courseoffering',
                                         course_offering):
                return HttpResponseForbidden()

            return super().get(self, request, *args, **kwargs)
        else:
            return HttpResponseForbidden()
예제 #4
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get(self, request, *args, **kwargs):
        if not request.user.teacher:
            return HttpResponseForbidden()

        teacher = get_current_teacher(self.request)

        if not teacher.user.has_perm('view_assignment', self.get_object()):
            return HttpResponseForbidden()

        return super().get(self, request, *args, **kwargs)
예제 #5
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get(self, request, *args, **kwargs):
        if not request.user.is_teacher:
            return HttpResponseForbidden()

        teacher = get_current_teacher(self.request)
        obj = self.get_object()

        if not teacher.user.has_perm('view_courseoffering', obj):
            return HttpResponseForbidden()

        return super().get(self, request, *args, **kwargs)
예제 #6
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get_queryset(self):
        student = get_current_student(self.request)
        teacher = get_current_teacher(self.request)

        queryset = super(CourseListView, self).get_queryset()
        if student:
            queryset = queryset.filter(courseenrollment__student=student,
                                       courseenrollment__is_hidden=False)
        elif teacher:
            queryset = queryset.filter(teacher=teacher, archive=False)

        return queryset
예제 #7
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get_context_data(self, **kwargs):
        context = super(AssignmentEditView, self).get_context_data(**kwargs)
        teacher = get_current_teacher(self.request)

        meta = Meta(title=get_site_title(f'Edit assignment'))

        context['is_assignment_page'] = 'active'
        context['meta'] = meta
        context['assignment_files'] = AssignmentFile.objects.filter(
            assignment=self.object)
        context['form'] = self.form_class()

        return context
예제 #8
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def post(self, request, *args, **kwargs):
        if not request.user.teacher:
            return HttpResponseForbidden()

        teacher = get_current_teacher(self.request)
        self.object = self.get_object()

        if not teacher.user.has_perm('change_assignment', self.object):
            return HttpResponseForbidden()

        username = self.kwargs['username']
        slug = self.kwargs['slug']

        student = Student.objects.filter(user__username=username)[0]
        form = AssignPointForm(request.POST)

        if form.is_valid():
            obj = AssignmentWork.objects.filter(
                assignment__slug=slug, student__user__username=username)[0]
            obj.points = form.cleaned_data['points']
            obj.save()

            if obj.points != -1:
                messages.success(
                    request,
                    f"Assigned {obj.points} point{pluralize(obj.points)} to {username}"
                )
            else:
                messages.info(request, f"Assignment ungraded for {username}")

            description = f"returned <b>{ self.object.title }</b> in { self.object.course_offering.course.code }"
            href = reverse('assignment:detail',
                           kwargs={'slug': self.object.slug})

            notify.send(teacher.user,
                        verb='returned',
                        recipient=student.user,
                        action_object=self.object,
                        target=self.object.course_offering,
                        description=description,
                        href=href)

            return self.form_valid(form)
        else:
            for msg in form.error_messages:
                messages.error(request, f"{msg}: {form.error_messages[msg]}")

            return self.form_invalid(form)
예제 #9
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get_context_data(self, **kwargs):
        context = super(AssignmentListView, self).get_context_data(**kwargs)
        student = get_current_student(self.request)
        teacher = get_current_teacher(self.request)
        course_slug = self.kwargs.get('slug')

        context['is_assignment_page'] = 'active'

        try:
            course_offering = course.models.CourseOffering.objects.filter(
                slug=course_slug)[:1].get()
        except course.models.CourseOffering.DoesNotExist:
            course_offering = None

        context['course'] = course_offering

        title = 'Assignments'
        if (course_offering):
            title = f'Assignment - { course_offering.course.code }'

        meta = Meta(title=get_site_title(title))

        context['meta'] = meta

        if student:
            if not course_slug:
                context[
                    'assignments_submitted'] = AssignmentWork.objects.filter(
                        assignment__course_offering__courseenrollment__is_hidden
                        =False,
                        assignment__course_offering__courseenrollment__student=
                        student,
                        student=student,
                        submitted=True).order_by('-submit_date')
            else:
                context[
                    'assignments_submitted'] = AssignmentWork.objects.filter(
                        student=student,
                        submitted=True,
                        assignment__course_offering=course_offering)

        elif teacher:
            if not course_slug:
                context[
                    'courses'] = course.models.CourseOffering.objects.filter(
                        teacher=teacher, archive=False)

        return context
예제 #10
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def post(self, request, *args, **kwargs):
        teacher = get_current_teacher(self.request)

        if not request.user.is_authenticated:
            return HttpResponseForbidden()

        if not teacher:
            return HttpResponseForbidden()

        self.object = self.get_object()
        username = self.kwargs['username']

        student = Student.objects.filter(user__username=username)[0]
        form = GradeForm(request.POST)

        if form.is_valid():
            obj = Grade.objects.filter(
                course_enrollment__student=student,
                course_enrollment__course_offered=self.object)[0]
            obj.letter_grade = form.cleaned_data['grade']
            obj.save()

            messages.success(request, f"Student record updated: {username}")
            if obj.letter_grade == None:
                verb = "ungraded"
                s = ""
            else:
                verb = "graded "
                s = f" <b>{ obj.letter_grade } GPA</b>"

            description = f"{ verb }{ s } in { self.object.course.code }"
            href = reverse('result:by_term',
                           kwargs={'pk': self.object.term.id})

            notify.send(teacher.user,
                        verb=verb,
                        recipient=student.user,
                        action_object=obj,
                        target=self.object,
                        description=description,
                        href=href)

            return self.form_valid(form)
        else:
            for msg in form.error_messages:
                messages.error(request, f"{msg}: {form.error_messages[msg]}")

            return self.form_invalid(form)
예제 #11
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get_context_data(self, **kwargs):
        context = super(CourseListView, self).get_context_data(**kwargs)
        student = get_current_student(self.request)
        teacher = get_current_teacher(self.request)
        meta = Meta(title=get_site_title('Courses'))

        context['random'] = str(uuid4())[:8]
        context['is_course_page'] = 'active'
        context['meta'] = meta
        if student:
            context['hidden_courses'] = CourseOffering.objects.filter(
                courseenrollment__student=student,
                courseenrollment__is_hidden=True)
        elif teacher:
            context['archives'] = CourseOffering.objects.filter(
                teacher=teacher, archive=True)

        return context
예제 #12
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def post(self, request, *args, **kwargs):
        is_teacher = request.user.is_teacher
        is_student = request.user.is_student

        stream_slug = self.kwargs['slug']

        try:
            course_offering = course.models.CourseOffering.objects.filter(
                slug=stream_slug)[:1].get()
        except course.models.CourseOffering.DoesNotExist:
            course_offering = None

        if not (is_student or is_teacher):
            return HttpResponseForbidden()

        if is_student:
            student = get_current_student(self.request)

            if not student.user.has_perm('view_courseoffering',
                                         course_offering):
                return HttpResponseForbidden()
        elif is_teacher:
            teacher = get_current_teacher(self.request)

            if not teacher.user.has_perm('view_courseoffering',
                                         course_offering):
                return HttpResponseForbidden()

        form = self.form_class(request.POST)

        if form.is_valid():
            obj = Post()
            obj.body = form.cleaned_data['body']
            obj.stream = course_offering
            obj.allow_comments = True
            obj.user = request.user
            obj.save()

            return redirect(obj)
        else:
            print('invalid')
            return redirect('course:stream:index', slug=stream_slug)
예제 #13
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def post(self, request, *args, **kwargs):
        is_teacher = request.user.is_teacher
        is_student = request.user.is_student

        if not (is_student or is_teacher):
            return HttpResponseForbidden()

        obj = self.get_object()

        if is_student:
            student = get_current_student(self.request)

            if not student.user.has_perm('delete_post', obj):
                return HttpResponseForbidden()
        elif is_teacher:
            teacher = get_current_teacher(self.request)

            if not teacher.user.has_perm('delete_post', obj):
                return HttpResponseForbidden()

        return super().post(self, request, *args, **kwargs)
예제 #14
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get(self, request, *args, **kwargs):
        is_teacher = request.user.is_teacher
        is_student = request.user.is_student

        obj = self.get_object()

        if is_student:
            student = get_current_student(self.request)

            if not student.user.has_perm('view_courseoffering', obj):
                return HttpResponseForbidden()

            return redirect('course:stream:index', slug=obj.slug)
        elif is_teacher:
            teacher = get_current_teacher(self.request)

            if not teacher.user.has_perm('view_courseoffering', obj):
                return HttpResponseForbidden()

            return redirect('course:stream:index', slug=obj.slug)
        else:
            return HttpResponseForbidden()
예제 #15
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get(self, request, *args, **kwargs):
        is_teacher = request.user.is_teacher
        is_student = request.user.is_student

        obj = self.get_object()

        if is_student:
            student = get_current_student(self.request)

            if not student.user.has_perm('view_assignment', obj):
                return HttpResponseForbidden()

            self.asgmt_work, _created = AssignmentWork.objects.get_or_create(
                assignment=obj, student=student)
        elif is_teacher:
            teacher = get_current_teacher(self.request)

            if not teacher.user.has_perm('view_assignment', obj):
                return HttpResponseForbidden()
        else:
            return HttpResponseForbidden()

        return super().get(self, request, *args, **kwargs)
예제 #16
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get_context_data(self, **kwargs):
        context = super(AssignmentAssignPointView,
                        self).get_context_data(**kwargs)
        student = get_current_student(self.request)
        teacher = get_current_teacher(self.request)
        slug = self.kwargs['slug']
        username = self.kwargs['username']

        context['is_assignment_page'] = 'active'
        context['meta'] = self.get_object().as_meta(self.request)
        context['submission'] = AssignmentWorkFile.objects.filter(
            assignment_work__assignment__slug=slug,
            assignment_work__student__user__username=username)
        context['materials'] = AssignmentFile.objects.filter(
            assignment__slug=slug)
        context['student_'] = Student.objects.filter(
            user__username=username)[0]
        context['assignment_work'] = AssignmentWork.objects.filter(
            assignment__slug=slug, student__user__username=username)[0]
        context['form'] = self.form_class()
        context['form']['points'].initial = context['assignment_work'].points

        return context
예제 #17
0
파일: views.py 프로젝트: progrmoiz/Saiki
    def get_queryset(self):
        student = get_current_student(self.request)
        teacher = get_current_teacher(self.request)
        course_slug = self.kwargs.get('slug')

        queryset = super(AssignmentListView, self).get_queryset()

        try:
            course_offering = course.models.CourseOffering.objects.filter(
                slug=course_slug)[:1].get()
        except course.models.CourseOffering.DoesNotExist:
            course_offering = None

        if student:
            if not course_slug:
                queryset = queryset.filter(
                    course_offering__courseenrollment__is_hidden=False,
                    course_offering__courseenrollment__student=student
                ).exclude(assignmentwork__student=student,
                          assignmentwork__submitted=True).order_by('deadline')
            else:
                queryset = queryset.filter(
                    course_offering=course_offering,
                    course_offering__courseenrollment__student=student
                ).exclude(assignmentwork__student=student,
                          assignmentwork__submitted=True)
        elif teacher:

            if not course_slug:
                queryset = queryset.filter(course_offering__teacher=teacher,
                                           course_offering__archive=False)
            else:
                queryset = queryset.filter(course_offering__teacher=teacher,
                                           course_offering__archive=False,
                                           course_offering=course_offering)

        return queryset