コード例 #1
0
def QuizSubmitView(request, course_slug, lesson_slug):
    if request.method == 'POST':
        course = Course.objects.get(slug=course_slug)
        lesson = Lesson.objects.get(slug=lesson_slug)
        quiz = Quiz.objects.get(lesson__slug=lesson.slug)
        quizquestionanswers = Question.objects.filter(
            quiz__title=quiz.title)[:10]
        quizscore = 0
        quizform = request.POST.copy()
        processedquiz = {}
        for quizquestionanswer in quizquestionanswers:
            processedquiz[f'q{quizquestionanswer.id}'] = quizform[f'q{quizquestionanswer.id}']
            if processedquiz[f'q{quizquestionanswer.id}'] == quizquestionanswer.answer:
                quizscore += 1
            else:
                quizscore += 0
        try:
            quizparticipation = QuizParticipation.objects.get(
                quiz__title=quiz.title, participator__username=request.user.username)
            if quizparticipation:
                print(quizparticipation)
                schedule_next = quizparticipation.participate_next - \
                    datetime.datetime.now(tz=timezone.utc)
                if schedule_next.days > 7:
                    quizparticipation.quiz = quiz
                    quizparticipation.quiz_score = quizscore
                    quizparticipation.participate_date = datetime.datetime.now(
                        tz=timezone.utc)
                    quizparticipation.participate_next = datetime.datetime.now(tz=timezone.utc) + \
                        datetime.timedelta(days=7)
                    quizparticipation.save()
                    messages.success(
                        request, 'Thank you for your reparticipation')
                    notification = Notification()
                    notification.title = f'Thankyou for your participation in { quiz.title }'
                    notification.message = f'You scored: {quizparticipation.quiz_score}. You can participate after {quizparticipation.participate_next}'
                    notification.user = request.user
                    notification.save()
                    return redirect('courses:lesson-detail', course_slug, lesson_slug)
                else:
                    messages.success(
                        request, 'You can not retake within 7 days')
                    return redirect('courses:lesson-detail', course_slug, lesson_slug)
        except:
            quizparticipation = QuizParticipation()
            quizparticipation.quiz = quiz
            quizparticipation.quiz_score = quizscore
            quizparticipation.participate_date = datetime.datetime.now(
                tz=timezone.utc)
            quizparticipation.participate_next = datetime.datetime.now(tz=timezone.utc) + \
                datetime.timedelta(days=7)
            quizparticipation.participator = request.user
            quizparticipation.save()
            messages.success(request, 'Thank you for your participation')
            notification = Notification()
            notification.title = f'Thankyou for your participation in { quiz.title }'
            notification.message = f'You scored: {quizparticipation.quiz_score}. You can participate after {quizparticipation.participate_next}'
            notification.user = request.user
            notification.save()
    return redirect('courses:lesson-detail', course_slug, lesson_slug)
コード例 #2
0
ファイル: listeners.py プロジェクト: alanjds/arecibo
def default_notification(instance, **kw):
    """ Given an error see if we need to send a notification """
    log("Firing signal: default_notification")

    # todo, this will be changed to lookup a user profile as per
    # http://github.com/andymckay/arecibo/issues/issue/4
    if instance.priority >= 5:
        return

    notification = Notification()
    notification.error = instance
    notification.user = [ str(u.key()) for u in approved_users() ]
    notification.save()
コード例 #3
0
ファイル: views.py プロジェクト: tommydangerous/spadetree
def new_note(request, pk, format=None):
    """Create a new note for choice."""
    choice = get_object_or_404(Choice, pk=pk)
    if request.user not in [choice.tutee, choice.tutor]:
        return HttpResponseRedirect(reverse('choices.views.requests'))
    if request.method == 'POST' and request.POST.get('content'):
        choice_note = ChoiceNote(choice=choice, 
            content=request.POST.get('content'), user=request.user)
        choice_note.save()
        try:
            channel = Channel.objects.get(choice=choice)
            # Create notification for this channel
            notification = Notification()
            notification.action      = 'new'
            notification.channel     = channel
            notification.choice_note = choice_note
            notification.model       = 'choice_note'
            notification.user        = request.user
            notification.save()
        except Channel.DoesNotExist:
            pass
        if format and format == '.json':
            data = {
                'choice_note': choice_note.to_json(),
            }
        elif request.is_ajax():
            d = {
                'choice': choice,
                'choice_note': choice_note,
            }
            choice_note_template = loader.get_template(
                'choices/choice_note.html')
            choice_note_form = loader.get_template(
                'choices/choice_note_form.html')
            context = RequestContext(request, add_csrf(request, d))
            data = {
                'choice_note_template': choice_note_template.render(
                    context),
                'choice_note_form': choice_note_form.render(context)
            }
        if (format and format == '.json') or request.is_ajax():
            return HttpResponse(json.dumps(data),
                mimetype='application/json')
    return HttpResponseRedirect(reverse('choices.views.detail',
        args=[choice.pk]))
コード例 #4
0
ファイル: listeners.py プロジェクト: andymckay/arecibo
def default_issue_notification(instance, **kw):
    """ Given an issue see default_issue_notification we need to send a notification """
    log("Firing signal: default_notification")

    users = approved_users()

    if not users.count():
        return
    
    notification = Notification()
    notification.type = "Issue"
    notification.type_key = str(instance.key())
    notification.user = [ str(u.key()) for u in users ]
    notification.save()

# turn this on when its all working
#issue_created.connect(default_issue_notification, dispatch_uid="default_issue_notification")
#issue_changed.connect(default_issue_notification, dispatch_uid="default_issue_notification")
コード例 #5
0
 def emit(self, record):
     from django.contrib.auth.models import User
     from notifications.models import Notification
     for user in User.objects.all():
         if user.has_perm('auth.logging_notifications'):
             notif = Notification()
             notif.user = user
             notif.title = "%s [%s:%s]" % (record.levelname,
                                           record.funcName, record.lineno)
             notif.level = str([
                 item[0] for item in Notification.LEVEL_CHOICES
                 if item[1] == record.levelname
             ][0])
             message = record.getMessage()
             if record.exc_text:
                 message += "\n\n"
                 message = message + record.exc_text
             notif.message = message
             notif.save()
コード例 #6
0
ファイル: listeners.py プロジェクト: andymckay/arecibo
def default_notification(instance, **kw):
    """ Given an error see if we need to send a notification """
    log("Firing signal: default_notification")

    users = approved_users()
    filtered = []
    for user in users:
        profile = get_profile(user)
        if profile.notification and instance.priority <= profile.notification:
            filtered.append(user)
    
    if not filtered:
        return
    
    notification = Notification()
    notification.type = "Error"
    notification.type_key = str(instance.key())
    notification.user = [ str(u.key()) for u in filtered ]
    notification.save()
コード例 #7
0
def default_notification(instance, **kw):
    """ Given an error see if we need to send a notification """
    log("Firing signal: default_notification")

    users = approved_users()
    filtered = []
    for user in users:
        profile = get_profile(user)
        if profile.notification and instance.priority <= profile.notification:
            filtered.append(user)

    if not filtered:
        return

    notification = Notification()
    notification.type = "Error"
    notification.type_key = str(instance.key())
    notification.user = [str(u.key()) for u in filtered]
    notification.save()
コード例 #8
0
def default_issue_notification(instance, **kw):
    """ Given an issue see default_issue_notification we need to send a notification """
    log("Firing signal: default_notification")

    users = approved_users()

    if not users.count():
        return

    notification = Notification()
    notification.type = "Issue"
    notification.type_key = str(instance.key())
    notification.user = [str(u.key()) for u in users]
    notification.save()


# turn this on when its all working
#issue_created.connect(default_issue_notification, dispatch_uid="default_issue_notification")
#issue_changed.connect(default_issue_notification, dispatch_uid="default_issue_notification")
コード例 #9
0
ファイル: signals.py プロジェクト: rgeorgeoff/django-adt
def create_rank_notification(sender, instance, created, **kwargs):

    old_rank = instance.rank_tracker.changed().get('rank')

    if old_rank:

        notification = Notification()

        if old_rank < instance.rank_id:
            # promotion
            notification.type = Notification.PROMOTION

        if old_rank > instance.rank_id:
            # demotion
            notification.type = Notification.DEMOTION

        if instance.rank_id is None:
            # kicked
            notification.type = Notification.KICKED

        notification.user = instance
        notification.rank_id = instance.rank_id
        notification.save()
コード例 #10
0
ファイル: signals.py プロジェクト: pombredanne/django-adt
def create_rank_notification(sender, instance, created, **kwargs):

    old_rank = instance.rank_tracker.changed().get('rank')

    if old_rank:

        notification = Notification()

        if old_rank < instance.rank_id:
            # promotion
            notification.type = Notification.PROMOTION

        if old_rank > instance.rank_id:
            # demotion
            notification.type = Notification.DEMOTION

        if instance.rank_id is None:
            # kicked
            notification.type = Notification.KICKED

        notification.user = instance
        notification.rank_id = instance.rank_id
        notification.save()