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)
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()
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]))
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")
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()
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()
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()
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")
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()