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')
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
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')
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})
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 })