Пример #1
0
    def dispatch(self, request, *args, **kwargs):
        subject = get_object_or_404(Subject, slug=kwargs.get('slug', ''))

        if not has_subject_permissions(request.user, subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(Restore, self).dispatch(request, *args, **kwargs)
Пример #2
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        topic = get_object_or_404(Topic, slug = slug)

        existe_meta = Goals.objects.filter(topic=topic).exists()
        existe_boletim = Bulletin.objects.filter(topic=topic).exists()

        if not existe_meta:
            messages.error(request,_("The topic %s has no goals, so you can't create a Bulletin.") %(topic) )
            caminho1 = request.META['HTTP_REFERER']
            return redirect(caminho1)

        if existe_meta:
            meta_geral = Goals.objects.get(topic=topic)
            if meta_geral.limit_submission_date.date() > datetime.datetime.today().date():
                messages.error(request,_("The deadline to submit the goals of the topic %s has not yet closed, so you can't create a Bulletin.") %(topic) )
                caminho2 = request.META['HTTP_REFERER']
                return redirect(caminho2)

        if existe_boletim:
            messages.error(request,_("The topic %s already has a Bulletin, so you can't create another.") %(topic) )
            caminho3 = request.META['HTTP_REFERER']
            return redirect(caminho3)

        if not has_subject_permissions(request.user, topic.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(CreateView, self).dispatch(request, *args, **kwargs)
Пример #3
0
    def post(self, request, *args, **kwargs):
        subject = get_object_or_404(Subject, slug = self.kwargs.get('slug', ''))

        if has_subject_permissions(self.request.user, subject):
            return self.render_to_response(self.get_context_data())
        else:
            return HttpResponseForbidden()
Пример #4
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        topic = get_object_or_404(Topic, slug = slug)

        if not has_subject_permissions(request.user, topic.subject):
            return redirect(reverse_lazy('subjects:home'))
        return super(CreateView, self).dispatch(request, *args, **kwargs)
Пример #5
0
    def post(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        questionary = get_object_or_404(Questionary, slug = slug)

        user = request.POST.get('selected_student', None)

        self.object_list = questionary

        if has_subject_permissions(request.user, questionary.topic.subject):
            if questionary.all_students:
                self.students = User.objects.filter(subject_student = questionary.topic.subject).order_by('social_name', 'username')
            else:
                self.students = User.objects.filter(resource_students = questionary).order_by('social_name', 'username')

            if not user is None:
                self.userquest = UserQuest.objects.filter(student__email = user, questionary = questionary)

                if self.userquest:
                    self.userquest = self.userquest.get()
                    self.userquestions = UserAnswer.objects.filter(user_quest = self.userquest).order_by('order')
            else:
                self.userquest = UserQuest.objects.filter(student = self.students.first(), questionary = questionary)
                
                if self.userquest:
                    self.userquest = self.userquest.get()
                    self.userquestions = UserAnswer.objects.filter(user_quest = self.userquest).order_by('order')
        
        return self.render_to_response(self.get_context_data())
Пример #6
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        link = get_object_or_404(Link, slug = slug)

        if not has_subject_permissions(request.user, link.topic.subject):
            return redirect(reverse_lazy('subjects:home'))
        return super(DeleteLinkView, self).dispatch(request, *args, **kwargs)
Пример #7
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        goals = get_object_or_404(Goals, slug = slug)

        if not has_subject_permissions(request.user, goals):
            return redirect(reverse_lazy('subjects:home'))

        return super(Reports, self).dispatch(request, *args, **kwargs)
Пример #8
0
    def dispatch(self, request, *args, **kwargs):
        id = self.kwargs.get('pk', '')
        question = get_object_or_404(Question, pk = id)

        if not has_subject_permissions(request.user, question.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(QuestionDeleteView, self).dispatch(request, *args, **kwargs)
Пример #9
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        webpage = get_object_or_404(Webpage, slug = slug)

        if not has_subject_permissions(request.user, webpage.topic.subject):
        	return redirect(reverse_lazy('subjects:home'))

        return super(StatisticsView, self).dispatch(request, *args, **kwargs)
Пример #10
0
    def dispatch(self, request, *args, **kwargs):
        params = self.request.GET
        subject = Subject.objects.get(id=params['subject_id'])

        if not has_subject_permissions(request.user, subject):
            return redirect(reverse('subjects:home'))

        return super(ReportView, self).dispatch(request, *args, **kwargs)
Пример #11
0
	def dispatch(self, request, *args, **kwargs):
		slug = self.kwargs.get('slug', '')
		group = get_object_or_404(StudentsGroup, slug = slug)

		if not has_subject_permissions(request.user, group.subject):
			return redirect(reverse_lazy('subjects:home'))

		return super(DeleteView, self).dispatch(request, *args, **kwargs)
Пример #12
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        webconference = get_object_or_404(Webconference, slug = slug)
        self.webconference = webconference

        if not has_subject_permissions(request.user, webconference.topic.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(SendMessage, self).dispatch(request, *args, **kwargs)
Пример #13
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        resource = get_object_or_404(Resource, slug = slug)
        topic = resource.topic

        if not has_subject_permissions(request.user, topic.subject) and not has_resource_permissions(request.user, resource):
            return redirect(reverse_lazy('subjects:home'))

        return super(ViewPDFFile, self).dispatch(request, *args, **kwargs)
Пример #14
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        filelink = get_object_or_404(FileLink, slug = slug)
        self.filelink = filelink
        
        if not has_subject_permissions(request.user, filelink.topic.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(SendMessage, self).dispatch(request, *args, **kwargs)
Пример #15
0
    def dispatch(self, request, *args, **kwargs):
        id = self.kwargs.get('pk', '')
        question = get_object_or_404(Question, pk=id)

        if not has_subject_permissions(request.user, question.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(QuestionDeleteView,
                     self).dispatch(request, *args, **kwargs)
Пример #16
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        ytvideo = get_object_or_404(YTVideo, slug = slug)
        self.ytvideo = ytvideo
        
        if not has_subject_permissions(request.user, ytvideo.topic.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(SendMessage, self).dispatch(request, *args, **kwargs)
Пример #17
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        bulletin = get_object_or_404(Bulletin, slug = slug)
        self.bulletin = bulletin

        if not has_subject_permissions(request.user, bulletin.topic.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(SendMessage, self).dispatch(request, *args, **kwargs)
Пример #18
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        questionary = get_object_or_404(Questionary, slug=slug)

        if not has_subject_permissions(request.user,
                                       questionary.topic.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(DeleteView, self).dispatch(request, *args, **kwargs)
Пример #19
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get("slug", "")
        topic = get_object_or_404(Topic, slug=slug)

        if not has_subject_permissions(request.user, topic.subject):
            return redirect(reverse_lazy("subjects:home"))

        return super(PDFFileCreateView, self).dispatch(request, *args,
                                                       **kwargs)
Пример #20
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        pdf_file = get_object_or_404(PDFFile, slug = slug)
        self.pdf_file = pdf_file
        
        if not has_subject_permissions(request.user, pdf_file.topic.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(SendMessage, self).dispatch(request, *args, **kwargs)
Пример #21
0
    def get_queryset(self):
        slug = self.kwargs.get('slug', '')
        questionary = get_object_or_404(Questionary, slug = slug)

        if has_subject_permissions(self.request.user, questionary.topic.subject):
            if questionary.all_students:
                self.students = User.objects.filter(subject_student = questionary.topic.subject).order_by('social_name', 'username')
            else:
                self.students = User.objects.filter(resource_students = questionary).order_by('social_name', 'username')

            self.userquest = UserQuest.objects.filter(student = self.students.first(), questionary = questionary)
            
            if self.userquest:
                self.userquest = self.userquest.get()
                self.userquestions = UserAnswer.objects.filter(user_quest = self.userquest).order_by('order')
        else:
            self.userquest = UserQuest.objects.filter(student = self.request.user, questionary = questionary)
            if self.userquest:
                self.userquest = self.userquest.get()
                self.userquestions = UserAnswer.objects.filter(user_quest = self.userquest).order_by('order')
            else:
                self.userquest = UserQuest.objects.create(student = self.request.user, questionary = questionary)
                q_ids = [0]
                entries = []

                for specs in questionary.spec_questionary.all():
                    cats = list(specs.categories.values_list('id', flat = True))
                    n_questions = specs.n_questions

                    with connection.cursor() as cursor:
                        cursor.execute('SELECT DISTINCT question_id FROM banco_questoes_question_categories AS a WHERE %s <@ (SELECT array_agg(tag_id) FROM public.banco_questoes_question_categories AS c WHERE c.question_id = a.question_id) AND NOT a.question_id = any(%s)', [cats, q_ids])
                        rows = cursor.fetchall()

                        list_q = []

                        for row in rows:
                            list_q.append(row[0])

                        random.shuffle(list_q)

                        q_ids = q_ids + (list_q[0:n_questions])
                
                questions = Question.objects.filter(pk__in = q_ids)

                orders = list(range(1, questions.count()+1))
                random.shuffle(orders)

                for question in questions.all():
                    entries.append(UserAnswer(user_quest = self.userquest, question = question, order = orders[0]))

                    orders.pop(0)

                UserAnswer.objects.bulk_create(entries)

                self.userquestions = UserAnswer.objects.filter(user_quest = self.userquest).order_by('order')

        return questionary
Пример #22
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        questionary = get_object_or_404(Questionary, slug = slug)
        self.questionary = questionary
        
        if not has_subject_permissions(request.user, questionary.topic.subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(SendMessage, self).dispatch(request, *args, **kwargs)
Пример #23
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        subject = get_object_or_404(Subject, slug=slug)

        if not has_subject_permissions(request.user, subject):
            return redirect(reverse_lazy('subjects:home'))

        return super(QuestionCreateView,
                     self).dispatch(request, *args, **kwargs)
Пример #24
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get("slug", "")
        pdf_file = get_object_or_404(PDFFile, slug=slug)
        self.pdf_file = pdf_file

        if not has_subject_permissions(request.user, pdf_file.topic.subject):
            return redirect(reverse_lazy("subjects:home"))

        return super(SendMessage, self).dispatch(request, *args, **kwargs)
Пример #25
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get("slug", "")
        webconference = get_object_or_404(Webconference, slug=slug)
        self.webconference = webconference

        if not has_subject_permissions(request.user,
                                       webconference.topic.subject):
            return redirect(reverse_lazy("subjects:home"))

        return super(SendMessage, self).dispatch(request, *args, **kwargs)
Пример #26
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get("slug", "")
        material_delivery = get_object_or_404(MaterialDelivery, slug=slug)
        self.material_delivery = material_delivery

        if not has_subject_permissions(request.user,
                                       material_delivery.topic.subject):
            return redirect(reverse_lazy("subjects:home"))

        return super(SendMessage, self).dispatch(request, *args, **kwargs)
Пример #27
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get("slug", "")
        resource = get_object_or_404(Resource, slug=slug)
        topic = resource.topic

        if not has_subject_permissions(
                request.user, topic.subject) and not has_resource_permissions(
                    request.user, resource):
            return redirect(reverse_lazy("subjects:home"))

        return super(ViewPDFFile, self).dispatch(request, *args, **kwargs)
Пример #28
0
    def get_queryset(self):
        slug = self.kwargs.get('slug', '')
        goal = get_object_or_404(Goals, slug = slug)

        if has_subject_permissions(self.request.user, goal.topic.subject):
            self.students = User.objects.filter(subject_student = goal.topic.subject).order_by('social_name', 'username')

            goals = MyGoals.objects.filter(user = self.students.first(), item__goal = goal)
        else:
            goals = MyGoals.objects.filter(user = self.request.user, item__goal = goal)

        return goals
Пример #29
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        questionary = get_object_or_404(Questionary, slug = slug)

        if not has_resource_permissions(request.user, questionary):
            return redirect(reverse_lazy('subjects:home'))

        if not has_subject_permissions(self.request.user, questionary.topic.subject):
            if timezone.now() < questionary.data_ini:
                messages.error(self.request, _('The questionary "%s" from topic "%s" can only be answered after %s'%(str(questionary), str(questionary.topic), (formats.date_format(questionary.data_ini, "SHORT_DATETIME_FORMAT")))))

                return redirect(reverse_lazy('subjects:view', kwargs={"slug": questionary.topic.subject.slug}))

        return super(InsideView, self).dispatch(request, *args, **kwargs)
Пример #30
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        goals = get_object_or_404(Goals, slug = slug)

        if not has_resource_permissions(request.user, goals):
            return redirect(reverse_lazy('subjects:home'))

        if has_subject_permissions(request.user, goals.topic.subject):
            return redirect(reverse_lazy('goals:view', kwargs = {'slug': goals.slug}))

        if MyGoals.objects.filter(item__goal = goals, user = request.user).exists():
            return redirect(reverse_lazy('goals:view', args = (), kwargs = {'slug': slug}))

        return super(SubmitView, self).dispatch(request, *args, **kwargs)
Пример #31
0
    def post(self, request, *args, **kwargs):
        difficulties = self.request.POST.get('difficulties', None)
        user_selected = request.POST.get('selected_student', None)

        slug = self.kwargs.get('slug', '')
        bulletin = get_object_or_404(Bulletin, slug=slug)

        self.object = bulletin

        if has_subject_permissions(request.user, bulletin.topic.subject):
            if not user_selected is None:
                user = User.objects.get(email = user_selected)
                self.student = user
        else:
            if not difficulties is None and not difficulties == "":
                print(difficulties)
                message = _("#Difficulty(ies) found in %s")%(str(bulletin)) + ":<p>" + difficulties + "</p>"

                brodcast_dificulties(self.request, message, bulletin.topic.subject)

                self.log_context = {}
                self.log_context['category_id'] = bulletin.topic.subject.category.id
                self.log_context['category_name'] = bulletin.topic.subject.category.name
                self.log_context['category_slug'] = bulletin.topic.subject.category.slug
                self.log_context['subject_id'] = bulletin.topic.subject.id
                self.log_context['subject_name'] = bulletin.topic.subject.name
                self.log_context['subject_slug'] = bulletin.topic.subject.slug
                self.log_context['topic_id'] = bulletin.topic.id
                self.log_context['topic_name'] = bulletin.topic.name
                self.log_context['topic_slug'] = bulletin.topic.slug
                self.log_context['bulletin_id'] = bulletin.id
                self.log_context['bulletin_name'] = bulletin.name
                self.log_context['bulletin_slug'] = bulletin.slug

                self.log_action = "send_difficulties"

                super(NewWindowView, self).createLog(self.request.user, self.log_component, self.log_action,
                                             self.log_resource, self.log_context)

                self.log_action = "view"
                self.log_context = {}

                messages.success(self.request, message = _("Difficulties sent to the subject professor(s)"))

                return self.render_to_response(context = self.get_context_data())
            else:
                messages.error(self.request, message = _("You should inform some difficulty"))
                return self.render_to_response(context = self.get_context_data())

        return self.render_to_response(context = self.get_context_data())
Пример #32
0
    def get_queryset(self):
        slug = self.kwargs.get('slug', '')
        subject = get_object_or_404(Subject, slug = slug)

        if has_subject_permissions(self.request.user, subject):
            self.students = User.objects.filter(subject_student = subject).order_by('social_name', 'username')

            notifications = Notification.objects.filter(user = self.students.first(), task__resource__topic__subject = subject, creation_date = datetime.now()).order_by("task__limit_date", "task__end_date")
        else:
            notifications = Notification.objects.filter(user = self.request.user, task__resource__topic__subject = subject, creation_date = datetime.now()).order_by("task__limit_date", "task__end_date")
            notifications.update(viewed = True)
            
        self.total = notifications.count()

        return notifications
Пример #33
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        topic = get_object_or_404(Topic, slug = slug)

        if not has_subject_permissions(request.user, topic.subject):
            return redirect(reverse_lazy('subjects:home'))

        questions = Question.objects.filter(subject = topic.subject)

        if not questions.exists():
            messages.error(self.request, _('The questions database is empty. Before creating a new questionary you must provide questions to the questions database'))

            return redirect(reverse_lazy('subjects:view', kwargs = {'slug': topic.subject.slug}))

        return super(QuestionaryCreateView, self).dispatch(request, *args, **kwargs)
Пример #34
0
    def get_queryset(self):
        slug = self.kwargs.get('slug', '')
        subject = get_object_or_404(Subject, slug=slug)

        order = get_order_by(self.request.GET.get("order_by", None))
        search = self.request.GET.get("search", None)

        if has_subject_permissions(self.request.user, subject):
            user = self.request.GET.get("selected_student", None)

            self.students = User.objects.filter(
                subject_student=subject).order_by('social_name', 'username')

            if not user is None:
                notifications = Notification.objects.filter(
                    user__email=user,
                    task__resource__topic__subject=subject).order_by(*order)
            else:
                notifications = Notification.objects.filter(
                    user=self.students.first(),
                    task__resource__topic__subject=subject).order_by(*order)
        else:
            notifications = Notification.objects.filter(
                user=self.request.user,
                task__resource__topic__subject=subject).order_by(*order)

        self.total = notifications.filter(creation_date=datetime.now()).count()

        if search:
            queries = Q(task__resource__name__icontains=search)
            queries |= Q(task__action__icontains=search)

            if search.isdigit():
                queries |= Q(level=search)

            if is_date(search):
                search_date = strToDate(search)

                queries |= Q(creation_date=search_date)
                queries |= Q(task__limit_date=search_date)
                queries |= Q(task__end_date=search_date)
                queries |= Q(meta__date=search_date)

            notifications = notifications.filter(queries).order_by(*order)

        self.num_rows = notifications.count()

        return notifications
Пример #35
0
    def get_success_url(self):
        messages.success(self.request, _('The Goals specification for the topic %s was updated successfully!')%(self.object.topic.name))

        if has_subject_permissions(self.request.user, self.object.topic.subject):
            success_url = reverse_lazy('goals:view', kwargs = {'slug': self.object.slug})
        else:
            success_url = reverse_lazy('goals:submit', kwargs = {'slug': self.object.slug})

            if self.object.show_window:
                self.request.session['resources'] = {}
                self.request.session['resources']['new_page'] = True
                self.request.session['resources']['new_page_url'] = reverse('goals:window_submit', kwargs = {'slug': self.object.slug})

                success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug})

        return success_url
Пример #36
0
    def post(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        goal = get_object_or_404(Goals, slug = slug)

        user = request.POST.get('selected_student', None)

        if has_subject_permissions(request.user, goal.topic.subject):
            self.students = User.objects.filter(subject_student = goal.topic.subject).order_by('social_name', 'username')

            if not user is None:
                self.object_list = MyGoals.objects.filter(user__email = user, item__goal = goal)
            else:
                self.object_list = MyGoals.objects.filter(user = self.request.user, item__goal = goal)	
        else:
            self.object_list = MyGoals.objects.filter(user = self.request.user, item__goal = goal)

        return self.render_to_response(self.get_context_data())
Пример #37
0
    def get_context_data(self, **kwargs):
        subject = get_object_or_404(Subject, slug = self.kwargs.get('slug', ''))

        context = {}
        
        context["title"] = _("Analytics")

        self.log_context['category_id'] = subject.category.id
        self.log_context['category_name'] = subject.category.name
        self.log_context['category_slug'] = subject.category.slug
        self.log_context['subject_id'] = subject.id
        self.log_context['subject_name'] = subject.name
        self.log_context['subject_slug'] = subject.slug
        
        if has_subject_permissions(self.request.user, subject):
            student = self.request.POST.get('selected_student', None)
            context['sub_students'] = subject.students.all()
            context['student'] = self.request.POST.get('selected_student', subject.students.first().email)

            self.log_context['student'] = context['student']

            if not student is None:
                student = User.objects.get(email = student)
                context["graph_data"] = json.dumps(get_pend_graph(student, subject))
                context["tags_cloud"] = getAccessedTags(subject, student)
                context["metrics_url"] = reverse('dashboards:other_metrics', args = (subject.slug, student.email,), kwargs = {})
            else:
                student = User.objects.get(email = context['student'])
                context["graph_data"] = json.dumps(get_pend_graph(student, subject))
                context["tags_cloud"] = getAccessedTags(subject, student)
                context["metrics_url"] = reverse('dashboards:other_metrics', args = (subject.slug, student.email,), kwargs = {})
        else:
            context["tags_cloud"] = getAccessedTags(subject, self.request.user)
            context["graph_data"] = json.dumps(get_pend_graph(self.request.user, subject))
            context["metrics_url"] = reverse('dashboards:other_metrics', args = (subject.slug, self.request.user.email,), kwargs = {})

        context["subject"] = subject
        context["qtd_students"] = subject.students.count()
        context['javascript_files'] = []
        context['style_files'] = ['dashboards/css/general.css', 'dashboards/css/dashboards_category.css']
        
        super(SubjectView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) 

        return context
Пример #38
0
    def post(self, request, *args, **kwargs):
        slug = self.kwargs.get('slug', '')
        subject = get_object_or_404(Subject, slug = slug)

        user = request.POST.get('selected_student', None)

        if has_subject_permissions(request.user, subject):
            self.students = User.objects.filter(subject_student = subject).order_by('social_name', 'username')

            if not user is None:
                self.object_list = Notification.objects.filter(user__email = user, task__resource__topic__subject = subject, creation_date = datetime.now()).order_by("task__limit_date", "task__end_date")
            else:
                self.object_list = Notification.objects.filter(user = self.request.user, task__resource__topic__subject = subject, creation_date = datetime.now()).order_by("task__limit_date", "task__end_date")
        else:
            self.object_list = Notification.objects.filter(user = self.request.user, task__resource__topic__subject = subject, creation_date = datetime.now()).order_by("task__limit_date", "task__end_date")

        self.total = self.object_list.count()

        return self.render_to_response(self.get_context_data())
Пример #39
0
    def get_object(self):
        slug = self.kwargs.get("slug", "")
        material_delivery = get_object_or_404(MaterialDelivery, slug=slug)

        if has_subject_permissions(self.request.user,
                                   material_delivery.topic.subject):
            viewAsStudent = self.request.session.get(
                material_delivery.topic.subject.slug, False)

            if material_delivery.all_students:
                self.students = User.objects.filter(
                    subject_student=material_delivery.topic.subject
                ) \
                .annotate(has_delivered=Exists(StudentMaterial.objects.filter(deliver__delivery=material_delivery, deliver__student=OuterRef("id")))) \
                .order_by("-has_delivered", "username", "last_name")
            else:
                self.students = User.objects.filter(
                    resource_students=material_delivery
                ) \
                .annotate(has_delivered=Exists(StudentMaterial.objects.filter(deliver__delivery=material_delivery, deliver__student=OuterRef("id")))) \
                .order_by("-has_delivered","username", "last_name")

            if not viewAsStudent:
                deliver = StudentDeliver.objects.filter(
                    student=self.students.first(), delivery=material_delivery)

                if deliver.exists():
                    self.studentDeliver = deliver.first()
                else:
                    self.studentDeliver = StudentDeliver.objects.create(
                        delivery=material_delivery,
                        student=self.students.first())
        else:
            deliver = StudentDeliver.objects.filter(student=self.request.user,
                                                    delivery=material_delivery)

            if deliver.exists():
                self.studentDeliver = deliver.first()
            else:
                self.studentDeliver = StudentDeliver.objects.create(
                    delivery=material_delivery, student=self.request.user)

        return material_delivery
Пример #40
0
    def get_queryset(self):
        slug = self.kwargs.get('slug', '')
        subject = get_object_or_404(Subject, slug = slug)

        order = get_order_by(self.request.GET.get("order_by", None))
        search = self.request.GET.get("search", None)

        if has_subject_permissions(self.request.user, subject):
            user = self.request.GET.get("selected_student", None)

            self.students = User.objects.filter(subject_student = subject).order_by('social_name', 'username')

            if not user is None:
                notifications = Notification.objects.filter(user__email = user, task__resource__topic__subject = subject).order_by(*order)
            else:
                notifications = Notification.objects.filter(user = self.students.first(), task__resource__topic__subject = subject).order_by(*order)
        else:
            notifications = Notification.objects.filter(user = self.request.user, task__resource__topic__subject = subject).order_by(*order)

        self.total = notifications.filter(creation_date = datetime.now()).count()
        
        if search:
            queries = Q(task__resource__name__icontains = search)
            queries |= Q(task__action__icontains = search)

            if search.isdigit():
                queries |= Q(level = search)

            if is_date(search):
                search_date = strToDate(search)

                queries |= Q(creation_date = search_date)
                queries |= Q(task__limit_date = search_date)
                queries |= Q(task__end_date = search_date)
                queries |= Q(meta__date = search_date)

            notifications = notifications.filter(queries).order_by(*order)

        self.num_rows = notifications.count()

        return notifications
Пример #41
0
    def dispatch(self, request, *args, **kwargs):
        slug = self.kwargs.get("slug", "")
        topic = get_object_or_404(Topic, slug=slug)

        existe_meta = Goals.objects.filter(topic=topic).exists()
        existe_boletim = Bulletin.objects.filter(topic=topic).exists()

        if not existe_meta:
            messages.error(
                request,
                _("The topic %s has no goals, so you can't create a Bulletin.")
                % (topic),
            )
            caminho1 = request.META["HTTP_REFERER"]
            return redirect(caminho1)

        if existe_meta:
            meta_geral = Goals.objects.get(topic=topic)
            if (meta_geral.limit_submission_date.date() >
                    datetime.datetime.today().date()):
                messages.error(
                    request,
                    _("The deadline to submit the goals of the topic %s has not yet closed, so you can't create a Bulletin."
                      ) % (topic),
                )
                caminho2 = request.META["HTTP_REFERER"]
                return redirect(caminho2)

        if existe_boletim:
            messages.error(
                request,
                _("The topic %s already has a Bulletin, so you can't create another."
                  ) % (topic),
            )
            caminho3 = request.META["HTTP_REFERER"]
            return redirect(caminho3)

        if not has_subject_permissions(request.user, topic.subject):
            return redirect(reverse_lazy("subjects:home"))

        return super(CreateView, self).dispatch(request, *args, **kwargs)
Пример #42
0
    def post(self, request, *args, **kwargs):
        slug = self.kwargs.get("slug", "")
        questionary = get_object_or_404(Questionary, slug=slug)

        user = request.POST.get("selected_student", None)

        self.object_list = questionary

        if has_subject_permissions(request.user, questionary.topic.subject):
            if questionary.all_students:
                self.students = User.objects.filter(
                    subject_student=questionary.topic.subject).order_by(
                        "social_name", "username")
            else:
                self.students = User.objects.filter(
                    resource_students=questionary).order_by(
                        "social_name", "username")

            if not user is None:
                self.userquest = UserQuest.objects.filter(
                    student__email=user, questionary=questionary)

                if self.userquest:
                    self.userquest = self.userquest.get()
                    self.userquestions = UserAnswer.objects.filter(
                        user_quest=self.userquest).order_by("order")
            else:
                self.userquest = UserQuest.objects.filter(
                    student=self.students.first(), questionary=questionary)

                if self.userquest:
                    self.userquest = self.userquest.get()
                    self.userquestions = UserAnswer.objects.filter(
                        user_quest=self.userquest).order_by("order")

        return self.render_to_response(self.get_context_data())
Пример #43
0
    def get_queryset(self):
        slug = self.kwargs.get('slug', '')
        subject = get_object_or_404(Subject, slug=slug)

        if has_subject_permissions(self.request.user, subject):
            self.students = User.objects.filter(
                subject_student=subject).order_by('social_name', 'username')

            notifications = Notification.objects.filter(
                user=self.students.first(),
                task__resource__topic__subject=subject,
                creation_date=datetime.now()).order_by("task__limit_date",
                                                       "task__end_date")
        else:
            notifications = Notification.objects.filter(
                user=self.request.user,
                task__resource__topic__subject=subject,
                creation_date=datetime.now()).order_by("task__limit_date",
                                                       "task__end_date")
            notifications.update(viewed=True)

        self.total = notifications.count()

        return notifications
Пример #44
0
    def get_context_data(self, **kwargs):
        subject = get_object_or_404(Subject, slug=self.kwargs.get('slug', ''))

        context = {}

        context["title"] = _("Analytics")

        self.log_context['category_id'] = subject.category.id
        self.log_context['category_name'] = subject.category.name
        self.log_context['category_slug'] = subject.category.slug
        self.log_context['subject_id'] = subject.id
        self.log_context['subject_name'] = subject.name
        self.log_context['subject_slug'] = subject.slug

        if has_subject_permissions(self.request.user, subject):
            student = self.request.POST.get('selected_student', None)
            students = subject.students.all()
            students = sorted(
                students,
                key=lambda student: student.username)  # Ordem Alfabética
            context['sub_students'] = students
            context['student'] = self.request.POST.get(
                'selected_student',
                subject.students.first().email)

            self.log_context['student'] = context['student']

            if not student is None:
                student = User.objects.get(email=student)
                context["graph_data"] = json.dumps(
                    get_pend_graph(student, subject))
                context["tags_cloud"] = reverse('dashboards:cloudy_data',
                                                args=(
                                                    subject.slug,
                                                    student.email,
                                                ),
                                                kwargs={})
                context["metrics_url"] = reverse('dashboards:other_metrics',
                                                 args=(
                                                     subject.slug,
                                                     student.email,
                                                 ),
                                                 kwargs={})
            else:
                student = User.objects.get(email=context['student'])
                context["graph_data"] = json.dumps(
                    get_pend_graph(student, subject))
                context["tags_cloud"] = reverse('dashboards:cloudy_data',
                                                args=(
                                                    subject.slug,
                                                    student.email,
                                                ),
                                                kwargs={})
                context["metrics_url"] = reverse('dashboards:other_metrics',
                                                 args=(
                                                     subject.slug,
                                                     student.email,
                                                 ),
                                                 kwargs={})
        else:
            context["tags_cloud"] = reverse('dashboards:cloudy_data',
                                            args=(
                                                subject.slug,
                                                self.request.user.email,
                                            ),
                                            kwargs={})
            context["graph_data"] = json.dumps(
                get_pend_graph(self.request.user, subject))
            context["metrics_url"] = reverse('dashboards:other_metrics',
                                             args=(
                                                 subject.slug,
                                                 self.request.user.email,
                                             ),
                                             kwargs={})

        context["subject"] = subject
        context["qtd_students"] = subject.students.count()
        context['javascript_files'] = []
        context['style_files'] = [
            'dashboards/css/style.css', 'dashboards/css/general.css',
            'dashboards/css/dashboards_category.css'
        ]

        super(SubjectView, self).createLog(self.request.user,
                                           self.log_component, self.log_action,
                                           self.log_resource, self.log_context)

        return context
Пример #45
0
    def get_queryset(self):
        slug = self.kwargs.get("slug", "")
        questionary = get_object_or_404(Questionary, slug=slug)

        if has_subject_permissions(self.request.user,
                                   questionary.topic.subject):
            if questionary.all_students:
                self.students = User.objects.filter(
                    subject_student=questionary.topic.subject).order_by(
                        "username", "last_name")
            else:
                self.students = User.objects.filter(
                    resource_students=questionary).order_by(
                        "username", "last_name")

            self.userquest = UserQuest.objects.filter(
                student=self.students.first(), questionary=questionary)

            if self.userquest:
                self.userquest = self.userquest.get()
                self.userquestions = UserAnswer.objects.filter(
                    user_quest=self.userquest).order_by("order")
        else:
            self.userquest = UserQuest.objects.filter(
                student=self.request.user, questionary=questionary)
            if self.userquest:
                self.userquest = self.userquest.get()
                self.userquestions = UserAnswer.objects.filter(
                    user_quest=self.userquest).order_by("order")
            else:
                self.userquest = UserQuest.objects.create(
                    student=self.request.user, questionary=questionary)
                q_ids = [0]
                entries = []

                for specs in questionary.spec_questionary.all():
                    cats = list(specs.categories.values_list("id", flat=True))
                    n_questions = specs.n_questions

                    with connection.cursor() as cursor:
                        cursor.execute(
                            "SELECT DISTINCT question_id FROM banco_questoes_question_categories AS a JOIN banco_questoes_question AS b ON a.question_id = b.id WHERE %s <@ (SELECT array_agg(tag_id) FROM public.banco_questoes_question_categories AS c WHERE c.question_id = a.question_id) AND NOT a.question_id = any(%s) AND b.subject_id = %s",
                            [cats, q_ids, questionary.topic.subject.id],
                        )
                        rows = cursor.fetchall()

                        list_q = []

                        for row in rows:
                            list_q.append(row[0])

                        random.shuffle(list_q)

                        q_ids = q_ids + (list_q[0:n_questions])

                questions = Question.objects.filter(pk__in=q_ids)

                orders = list(range(1, questions.count() + 1))
                random.shuffle(orders)

                for question in questions.all():
                    entries.append(
                        UserAnswer(
                            user_quest=self.userquest,
                            question=question,
                            order=orders[0],
                        ))

                    orders.pop(0)

                UserAnswer.objects.bulk_create(entries)

                self.userquestions = UserAnswer.objects.filter(
                    user_quest=self.userquest).order_by("order")

        return questionary
Пример #46
0
def subject_permissions(user, subject):
    return permissions.has_subject_permissions(user, subject)
Пример #47
0
    def get_context_data(self, **kwargs):
        subject = get_object_or_404(Subject, slug=self.kwargs.get("slug", ""))

        context = {}

        context["title"] = _("Analytics")

        self.log_context["category_id"] = subject.category.id
        self.log_context["category_name"] = subject.category.name
        self.log_context["category_slug"] = subject.category.slug
        self.log_context["subject_id"] = subject.id
        self.log_context["subject_name"] = subject.name
        self.log_context["subject_slug"] = subject.slug

        context["avatar_audios"] = []
        context["avatar_ganntInfo"] = []
        context["avatar_ganntTips"] = []

        if has_subject_permissions(self.request.user, subject):
            student = self.request.POST.get("selected_student", None)

            if student is None:
                student = self.kwargs.get("email", None)

            students = subject.students.all()
            students = sorted(
                students, key=lambda student: student.username
            )  # Ordem Alfabética
            context["sub_students"] = students
            context["student"] = (
                student if not student is None else subject.students.first().email
            )

            self.log_context["student"] = context["student"]

            if not student is None:
                student = User.objects.get(email=student)
                context["graph_data"] = get_pend_graph(student, subject)
                context["tags_cloud"] = reverse(
                    "dashboards:cloudy_data",
                    args=(subject.slug, student.email,),
                    kwargs={},
                )
                context["metrics_url"] = reverse(
                    "dashboards:other_metrics",
                    args=(subject.slug, student.email,),
                    kwargs={},
                )
            else:
                student = User.objects.get(email=context["student"])
                context["graph_data"] = get_pend_graph(student, subject)
                context["tags_cloud"] = reverse(
                    "dashboards:cloudy_data",
                    args=(subject.slug, student.email,),
                    kwargs={},
                )
                context["metrics_url"] = reverse(
                    "dashboards:other_metrics",
                    args=(subject.slug, student.email,),
                    kwargs={},
                )

            if subject.display_avatar:
                context["avatar_audios"] = generalInfo(subject, student)
                context["avatar_ganntInfo"] = ganntInfo()
                context["avatar_ganntTips"] = ganntTips(context["graph_data"])
        else:
            context["tags_cloud"] = reverse(
                "dashboards:cloudy_data",
                args=(subject.slug, self.request.user.email,),
                kwargs={},
            )
            context["graph_data"] = get_pend_graph(self.request.user, subject)
            context["metrics_url"] = reverse(
                "dashboards:other_metrics",
                args=(subject.slug, self.request.user.email,),
                kwargs={},
            )

            if subject.display_avatar:
                context["avatar_audios"] = generalInfo(subject, self.request.user)
                context["avatar_ganntInfo"] = ganntInfo()
                context["avatar_ganntTips"] = ganntTips(context["graph_data"])

        context["graph_data"] = json.dumps(context["graph_data"], default=str)
        context["subject"] = subject
        context["qtd_students"] = subject.students.count()
        context["javascript_files"] = []
        context["style_files"] = [
            "dashboards/css/style.css",
            "dashboards/css/general.css",
            "dashboards/css/dashboards_category.css",
        ]

        super(SubjectView, self).createLog(
            self.request.user,
            self.log_component,
            self.log_action,
            self.log_resource,
            self.log_context,
        )

        return context
Пример #48
0
    def post(self, request, *args, **kwargs):
        difficulties = self.request.POST.get("difficulties", None)
        user_selected = request.POST.get("selected_student", None)

        slug = self.kwargs.get("slug", "")
        bulletin = get_object_or_404(Bulletin, slug=slug)

        self.object = bulletin

        if has_subject_permissions(request.user, bulletin.topic.subject):
            if not user_selected is None:
                user = User.objects.get(email=user_selected)
                self.student = user
        else:
            if not difficulties is None and not difficulties == "":
                print(difficulties)
                message = (_("#Difficulty(ies) found in %s") %
                           (str(bulletin)) + ":<p>" + difficulties + "</p>")

                brodcast_dificulties(self.request, message,
                                     bulletin.topic.subject)

                self.log_context = {}
                self.log_context[
                    "category_id"] = bulletin.topic.subject.category.id
                self.log_context[
                    "category_name"] = bulletin.topic.subject.category.name
                self.log_context[
                    "category_slug"] = bulletin.topic.subject.category.slug
                self.log_context["subject_id"] = bulletin.topic.subject.id
                self.log_context["subject_name"] = bulletin.topic.subject.name
                self.log_context["subject_slug"] = bulletin.topic.subject.slug
                self.log_context["topic_id"] = bulletin.topic.id
                self.log_context["topic_name"] = bulletin.topic.name
                self.log_context["topic_slug"] = bulletin.topic.slug
                self.log_context["bulletin_id"] = bulletin.id
                self.log_context["bulletin_name"] = bulletin.name
                self.log_context["bulletin_slug"] = bulletin.slug

                self.log_action = "send_difficulties"

                super(NewWindowView, self).createLog(
                    self.request.user,
                    self.log_component,
                    self.log_action,
                    self.log_resource,
                    self.log_context,
                )

                self.log_action = "view"
                self.log_context = {}

                messages.success(
                    self.request,
                    message=_("Difficulties sent to the subject professor(s)"),
                )

                return self.render_to_response(context=self.get_context_data())
            else:
                messages.error(self.request,
                               message=_("You should inform some difficulty"))
                return self.render_to_response(context=self.get_context_data())

        return self.render_to_response(context=self.get_context_data())
Пример #49
0
    def get_context_data(self, **kwargs):
        context = super(InsideView, self).get_context_data(**kwargs)

        context["title"] = self.object.name

        context["topic"] = self.object.topic
        context["subject"] = self.object.topic.subject

        self.log_context["category_id"] = self.object.topic.subject.category.id
        self.log_context[
            "category_name"] = self.object.topic.subject.category.name
        self.log_context[
            "category_slug"] = self.object.topic.subject.category.slug
        self.log_context["subject_id"] = self.object.topic.subject.id
        self.log_context["subject_name"] = self.object.topic.subject.name
        self.log_context["subject_slug"] = self.object.topic.subject.slug
        self.log_context["topic_id"] = self.object.topic.id
        self.log_context["topic_name"] = self.object.topic.name
        self.log_context["topic_slug"] = self.object.topic.slug
        self.log_context["bulletin_id"] = self.object.id
        self.log_context["bulletin_name"] = self.object.name
        self.log_context["bulletin_slug"] = self.object.slug
        self.log_context["timestamp_start"] = str(int(time.time()))

        super(InsideView, self).createLog(
            self.request.user,
            self.log_component,
            self.log_action,
            self.log_resource,
            self.log_context,
        )

        self.request.session["log_id"] = Log.objects.latest("id").id

        topic = self.object.topic
        slug = self.kwargs.get("slug", "")
        bulletin = get_object_or_404(Bulletin, slug=slug)
        students = User.objects.filter(
            subject_student=bulletin.topic.subject).order_by(
                "social_name", "username")
        if has_subject_permissions(self.request.user, bulletin.topic.subject):
            if not self.student is None:
                estudante = self.student
            else:
                estudante = students.first()
        else:
            estudante = self.request.user

        meta_geral = Goals.objects.get(topic=topic)
        metas = GoalItem.objects.filter(goal=meta_geral)
        metas_pessoais = []
        n_submeteu = False
        for m in metas:
            if MyGoals.objects.filter(item=m, user=estudante).exists():
                metas_pessoais.append(
                    MyGoals.objects.get(item=m, user=estudante))
                n_submeteu = False
            else:
                n_submeteu = True

        itens_da_meta = sorted(list(metas), key=lambda met: met.id)
        metas_pessoais = sorted(list(metas_pessoais), key=lambda me: me.id)
        lista_metas = [{
            "description": geral.description,
            "desejada": geral.ref_value
        } for geral in itens_da_meta]

        for x in range(len(lista_metas)):
            if n_submeteu:
                lista_metas[x]["estabelecida"] = lista_metas[x]["desejada"]
            else:
                lista_metas[x]["estabelecida"] = metas_pessoais[x].value

        alcancadas, medias = read_excel_file(estudante, meta_geral,
                                             len(itens_da_meta), bulletin)
        maximos, medianas, resultados, titulos = read_excel_file_indicators(
            estudante, bulletin)

        for x in range(len(lista_metas)):
            lista_metas[x]["alcancada"] = alcancadas[x]
            lista_metas[x]["media"] = medias[x]

        qtd_atendida = 0
        qtd_metas = len(itens_da_meta)
        for x in range(len(lista_metas)):
            # Caso 1: Meta alcançada foi maior que a meta desejada
            caso1 = lista_metas[x]["alcancada"] >= lista_metas[x]["desejada"]

            # Caso 2: Meta alcançada foi maior que a meta estabelecida
            caso2 = lista_metas[x]["alcancada"] >= lista_metas[x][
                "estabelecida"]
            if caso1 or caso2:
                qtd_atendida += 1

        porcentagem = calcula_porcentagem(qtd_atendida, qtd_metas)

        # Adicionando ao contexto
        context["metas"] = lista_metas
        context["percent"] = porcentagem
        context["maximos"] = maximos
        context["medianas"] = medianas
        context["resultados"] = resultados
        context["titulos"] = titulos
        context["student"] = self.request.POST.get("selected_student",
                                                   students.first().email)
        context["students"] = students
        return context