Exemplo n.º 1
0
def get_course_stats(request):
    if request.method == "GET":
        course_id = request.GET['id']
        pledges = Pledge.objects.filter(course__id=course_id)
        avg_pledges = 'N/A'
        if pledges:
            avg_pledges = pledges.aggregate(Avg('aim')).values()[0] * 100
        count = pledges.count()
        probable_reward = 5
        if pledges:
            total_pool = pledges.aggregate(Sum('money')).values()[0]
            probable_pool = 0.2 * float(total_pool)
            probable_num_rewarded = count * 0.8
            probable_reward = probable_pool / probable_num_rewarded
        not_quizzes = PledgeQuiz.objects.filter(progress__quiz__course__id=course_id,
                                                user=request.user.userprofile).values_list(
            'progress__quiz__heading', 'progress__id', 'progress__quiz__hard_deadline', 'progress__quiz__deadline')
        today = timezone.now().date()
        quizzes = Progress.objects.filter(quiz__course__id=course_id, user=request.user.userprofile).filter(
            (Q(quiz__hard_deadline__gte=today) | Q(quiz__hard_deadline=None)) & (
                Q(quiz__deadline__gte=today) | Q(quiz__deadline=None))).values_list(
            'quiz__heading', 'id', 'score', 'quiz__hard_deadline', 'quiz__deadline')
        quizzes = [(q[0], q[1], to_date(q[3]), to_date(q[4])) for q in quizzes if convert_to_percentage(q[2]) == 0]
        quizzes = [q for q in quizzes if q not in not_quizzes]
        return HttpResponse(
            json.dumps({'fail': 0, 'avg_aim': avg_pledges, 'count': count, 'probable_reward': probable_reward,
                        'quizzes': quizzes}),
            content_type='application/json')
    return HttpResponse(json.dumps({'fail': 1}),
                        content_type='application/json')
Exemplo n.º 2
0
 def get_full_stats(self):
     grades = Progress.objects.filter(quiz__course=self.course, user=self.user).values_list('score', flat=True)
     if grades:
         grades = [convert_to_percentage(x) for x in grades]
         grades = sum(grades) / len(grades)
     else:
         grades = 0
     print "Course:", self.course
     print "Current Grade:", grades
     print "Current Aim", self.aim
     print "End date", self.pledge_end_date
     return
Exemplo n.º 3
0
 def get_full_stats(self):
     grades = Progress.objects.filter(quiz__course=self.course,
                                      user=self.user).values_list('score',
                                                                  flat=True)
     if grades:
         grades = [convert_to_percentage(x) for x in grades]
         grades = sum(grades) / len(grades)
     else:
         grades = 0
     print "Course:", self.course
     print "Current Grade:", grades
     print "Current Aim", self.aim
     print "End date", self.pledge_end_date
     return
Exemplo n.º 4
0
def get_course_stats(request):
    if request.method == "GET":
        course_id = request.GET['id']
        pledges = Pledge.objects.filter(course__id=course_id)
        avg_pledges = 'N/A'
        if pledges:
            avg_pledges = pledges.aggregate(Avg('aim')).values()[0] * 100
        count = pledges.count()
        probable_reward = 5
        if pledges:
            total_pool = pledges.aggregate(Sum('money')).values()[0]
            probable_pool = 0.2 * float(total_pool)
            probable_num_rewarded = count * 0.8
            probable_reward = probable_pool / probable_num_rewarded
        not_quizzes = PledgeQuiz.objects.filter(
            progress__quiz__course__id=course_id,
            user=request.user.userprofile).values_list(
                'progress__quiz__heading', 'progress__id',
                'progress__quiz__hard_deadline', 'progress__quiz__deadline')
        today = timezone.now().date()
        quizzes = Progress.objects.filter(
            quiz__course__id=course_id, user=request.user.userprofile).filter(
                (Q(quiz__hard_deadline__gte=today)
                 | Q(quiz__hard_deadline=None))
                & (Q(quiz__deadline__gte=today)
                   | Q(quiz__deadline=None))).values_list(
                       'quiz__heading', 'id', 'score', 'quiz__hard_deadline',
                       'quiz__deadline')
        quizzes = [(q[0], q[1], to_date(q[3]), to_date(q[4])) for q in quizzes
                   if convert_to_percentage(q[2]) == 0]
        quizzes = [q for q in quizzes if q not in not_quizzes]
        return HttpResponse(json.dumps({
            'fail': 0,
            'avg_aim': avg_pledges,
            'count': count,
            'probable_reward': probable_reward,
            'quizzes': quizzes
        }),
                            content_type='application/json')
    return HttpResponse(json.dumps({'fail': 1}),
                        content_type='application/json')
Exemplo n.º 5
0
def index_alt(request):
    try:
        user_profile = UserProfile.objects.get(user=request.user)
    except UserProfile.DoesNotExist:
        user_profile = UserProfile.objects.create(user=request.user)
    social_users = UserSocialAuth.objects.filter(user=request.user)
    sync_up_user(request.user, social_users)
    if user_profile.picture._file is None and request.user.social_auth.all().count() > 0 and \
                    request.user.social_auth.all()[0].provider == 'facebook':
        url = 'http://graph.facebook.com/{0}/picture'.format(request.user.social_auth.all()[0].uid)
        try:
            response = request2('GET', url, params={'type': 'large'})
            response.raise_for_status()
            user_profile.picture.save('{0}_social.jpg'.format(request.user.username),
                                      ContentFile(response.content))
            user_profile.save()
        except HTTPError:
            pass
    try:
        coursera_profile = CourseraProfile.objects.get(user=request.user)
    except CourseraProfile.DoesNotExist:
        coursera_profile = CourseraProfile.objects.create(user=request.user)
    try:
        edx_profile = EdxProfile.objects.get(user=request.user)
    except EdxProfile.DoesNotExist:
        edx_profile = EdxProfile.objects.create(user=request.user)
    try:
        udemy_profile = UdemyProfile.objects.get(user=request.user)
    except UdemyProfile.DoesNotExist:
        udemy_profile = UdemyProfile.objects.create(user=request.user)

    if request.method == "POST":
        if request.POST['platform'] == "coursera":
            already_exist = CourseraProfile.objects.filter(~Q(user=request.user)).filter(
                username=request.POST['username'].strip()).count() > 0
            if already_exist:
                messages.success(request, 'Someone else is already using that Coursera account')
                return redirect(reverse('users:index_alt'))
            coursera_profile.username = request.POST['username'].strip()
            coursera_profile.password = request.POST['password']
            coursera_profile.incorrect_login = False
            coursera_profile.save()
            request.user.last_login = timezone.now()
            request.user.save()
            if not request.session.get('onboarding', False):
                messages.success(request, 'Added your Coursera account refresh in a few minutes to see your courses')
            return redirect(reverse('users:index_alt'))
        elif request.POST['platform'] == "edx":
            already_exist = EdxProfile.objects.filter(~Q(user=request.user)).filter(
                email=request.POST['username'].strip()).count() > 0
            if already_exist:
                messages.success(request, 'Someone else is already using that edX account')
                return redirect(reverse('users:index_alt'))

            edx_profile.email = request.POST['username'].strip()
            edx_profile.password = request.POST['password']
            edx_profile.incorrect_login = False
            edx_profile.save()
            request.user.last_login = timezone.now()
            request.user.save()
            if not request.session.get('onboarding', False):
                messages.success(request, 'Added your Edx account refresh in a few minutes to see your courses')
            return redirect(reverse('users:index_alt'))
        elif request.POST['platform'] == "udemy":
            already_exist = UdemyProfile.objects.filter(~Q(user=request.user)).filter(
                email=request.POST['username'].strip()).count() > 0
            if already_exist:
                messages.success(request, 'Someone else is already using that Udemy account')
                return redirect(reverse('users:index_alt'))
            udemy_profile.email = request.POST['username'].strip()
            udemy_profile.password = request.POST['password']
            udemy_profile.incorrect_login = False
            udemy_profile.save()
            request.user.last_login = timezone.now()
            request.user.save()
            if not request.session.get('onboarding', False):
                messages.success(request, 'Added your Udemy account refresh in a few minutes to see your courses')
            return redirect(reverse('users:index_alt'))
        else:
            messages.error(request, "Something really went wrong, please try again or contact us")
            return redirect(reverse('user:index_alt'))

    if (coursera_profile.username == "") and (
                edx_profile.email == "") and (
                udemy_profile.email == ""):
        request.session['onboarding'] = True
        request.session.save()
        return render(request, 'users/onboarding.html')
    else:
        pledges = Pledge.objects.filter(user=request.user.userprofile)
        progresses = Progress.objects.filter(user=request.user.userprofile).order_by('quiz__deadline')
        current_courses = 0
        past_courses = 0
        coursera_courses = list(coursera_profile.courses.all())
        edx_courses = list(edx_profile.courses.all())
        udemy_courses = list(udemy_profile.courses.all())

        coursera_grades = []
        edx_grades = []
        udemy_grades = []

        for course in coursera_courses:
            if course.get_amount_progress() >= 100:
                past_courses += 1
            else:
                current_courses += 1
            grades = Progress.objects.filter(quiz__course=course, user=user_profile).values_list('score', flat=True)
            if grades:
                grades = [convert_to_percentage(x) for x in grades]
                coursera_grades.append(sum(grades) / len(grades))
            else:
                coursera_grades.append(0)

        for course in edx_courses:
            if course.get_amount_progress() >= 100:
                past_courses += 1
            else:
                current_courses += 1
            grades = Progress.objects.filter(quiz__course=course, user=user_profile).values_list('score', flat=True)
            if grades:
                grades = [convert_to_percentage(x) for x in grades]
                edx_grades.append(sum(grades) / len(grades))
            else:
                edx_grades.append(0)

        for course in udemy_courses:
            if course.get_amount_progress() >= 100:
                past_courses += 1
            else:
                current_courses += 1
            grades = Progress.objects.filter(quiz__course=course, user=user_profile).values_list('score', flat=True)
            if grades:
                grades = [convert_to_percentage(x) for x in grades]
                udemy_grades.append(sum(grades) / len(grades))
            else:
                udemy_grades.append(0)

        onboarding = request.session.get('onboarding', False)
        request.session['onboarding'] = False
        request.session.save()
        return render(request, 'users/index-alt.html',
                      {'coursera_courses': zip(coursera_courses, coursera_grades),
                       'edx_courses': zip(edx_courses, edx_grades),
                       'udemy_courses': zip(udemy_courses, udemy_grades),
                       'pledges': pledges, 'progresses': progresses, 'form': False,
                       'current_courses': current_courses,
                       'past_courses': past_courses, 'onboarding': onboarding})
Exemplo n.º 6
0
def index_alt(request):
    try:
        user_profile = UserProfile.objects.get(user=request.user)
    except UserProfile.DoesNotExist:
        user_profile = UserProfile.objects.create(user=request.user)
    social_users = UserSocialAuth.objects.filter(user=request.user)
    sync_up_user(request.user, social_users)
    if user_profile.picture._file is None and request.user.social_auth.all().count() > 0 and \
                    request.user.social_auth.all()[0].provider == 'facebook':
        url = 'http://graph.facebook.com/{0}/picture'.format(
            request.user.social_auth.all()[0].uid)
        try:
            response = request2('GET', url, params={'type': 'large'})
            response.raise_for_status()
            user_profile.picture.save(
                '{0}_social.jpg'.format(request.user.username),
                ContentFile(response.content))
            user_profile.save()
        except HTTPError:
            pass
    try:
        coursera_profile = CourseraProfile.objects.get(user=request.user)
    except CourseraProfile.DoesNotExist:
        coursera_profile = CourseraProfile.objects.create(user=request.user)
    try:
        edx_profile = EdxProfile.objects.get(user=request.user)
    except EdxProfile.DoesNotExist:
        edx_profile = EdxProfile.objects.create(user=request.user)
    try:
        udemy_profile = UdemyProfile.objects.get(user=request.user)
    except UdemyProfile.DoesNotExist:
        udemy_profile = UdemyProfile.objects.create(user=request.user)

    if request.method == "POST":
        if request.POST['platform'] == "coursera":
            already_exist = CourseraProfile.objects.filter(~Q(
                user=request.user)).filter(
                    username=request.POST['username'].strip()).count() > 0
            if already_exist:
                messages.success(
                    request,
                    'Someone else is already using that Coursera account')
                return redirect(reverse('users:index_alt'))
            coursera_profile.username = request.POST['username'].strip()
            coursera_profile.password = request.POST['password']
            coursera_profile.incorrect_login = False
            coursera_profile.save()
            request.user.last_login = timezone.now()
            request.user.save()
            if not request.session.get('onboarding', False):
                messages.success(
                    request,
                    'Added your Coursera account refresh in a few minutes to see your courses'
                )
            return redirect(reverse('users:index_alt'))
        elif request.POST['platform'] == "edx":
            already_exist = EdxProfile.objects.filter(~Q(
                user=request.user)).filter(
                    email=request.POST['username'].strip()).count() > 0
            if already_exist:
                messages.success(
                    request, 'Someone else is already using that edX account')
                return redirect(reverse('users:index_alt'))

            edx_profile.email = request.POST['username'].strip()
            edx_profile.password = request.POST['password']
            edx_profile.incorrect_login = False
            edx_profile.save()
            request.user.last_login = timezone.now()
            request.user.save()
            if not request.session.get('onboarding', False):
                messages.success(
                    request,
                    'Added your Edx account refresh in a few minutes to see your courses'
                )
            return redirect(reverse('users:index_alt'))
        elif request.POST['platform'] == "udemy":
            already_exist = UdemyProfile.objects.filter(~Q(
                user=request.user)).filter(
                    email=request.POST['username'].strip()).count() > 0
            if already_exist:
                messages.success(
                    request,
                    'Someone else is already using that Udemy account')
                return redirect(reverse('users:index_alt'))
            udemy_profile.email = request.POST['username'].strip()
            udemy_profile.password = request.POST['password']
            udemy_profile.incorrect_login = False
            udemy_profile.save()
            request.user.last_login = timezone.now()
            request.user.save()
            if not request.session.get('onboarding', False):
                messages.success(
                    request,
                    'Added your Udemy account refresh in a few minutes to see your courses'
                )
            return redirect(reverse('users:index_alt'))
        else:
            messages.error(
                request,
                "Something really went wrong, please try again or contact us")
            return redirect(reverse('user:index_alt'))

    if (coursera_profile.username == "") and (edx_profile.email
                                              == "") and (udemy_profile.email
                                                          == ""):
        request.session['onboarding'] = True
        request.session.save()
        return render(request, 'users/onboarding.html')
    else:
        pledges = Pledge.objects.filter(user=request.user.userprofile)
        progresses = Progress.objects.filter(
            user=request.user.userprofile).order_by('quiz__deadline')
        current_courses = 0
        past_courses = 0
        coursera_courses = list(coursera_profile.courses.all())
        edx_courses = list(edx_profile.courses.all())
        udemy_courses = list(udemy_profile.courses.all())

        coursera_grades = []
        edx_grades = []
        udemy_grades = []

        for course in coursera_courses:
            if course.get_amount_progress() >= 100:
                past_courses += 1
            else:
                current_courses += 1
            grades = Progress.objects.filter(quiz__course=course,
                                             user=user_profile).values_list(
                                                 'score', flat=True)
            if grades:
                grades = [convert_to_percentage(x) for x in grades]
                coursera_grades.append(sum(grades) / len(grades))
            else:
                coursera_grades.append(0)

        for course in edx_courses:
            if course.get_amount_progress() >= 100:
                past_courses += 1
            else:
                current_courses += 1
            grades = Progress.objects.filter(quiz__course=course,
                                             user=user_profile).values_list(
                                                 'score', flat=True)
            if grades:
                grades = [convert_to_percentage(x) for x in grades]
                edx_grades.append(sum(grades) / len(grades))
            else:
                edx_grades.append(0)

        for course in udemy_courses:
            if course.get_amount_progress() >= 100:
                past_courses += 1
            else:
                current_courses += 1
            grades = Progress.objects.filter(quiz__course=course,
                                             user=user_profile).values_list(
                                                 'score', flat=True)
            if grades:
                grades = [convert_to_percentage(x) for x in grades]
                udemy_grades.append(sum(grades) / len(grades))
            else:
                udemy_grades.append(0)

        onboarding = request.session.get('onboarding', False)
        request.session['onboarding'] = False
        request.session.save()
        return render(
            request, 'users/index-alt.html', {
                'coursera_courses': zip(coursera_courses, coursera_grades),
                'edx_courses': zip(edx_courses, edx_grades),
                'udemy_courses': zip(udemy_courses, udemy_grades),
                'pledges': pledges,
                'progresses': progresses,
                'form': False,
                'current_courses': current_courses,
                'past_courses': past_courses,
                'onboarding': onboarding
            })