def generate_invites(request): user = request.user if not Invite.user_can_generate_invite(user): return render_to_response('generate_forbidden.html', {}, context_instance=RequestContext(request)) if request.method == 'POST': return generate_invites_post(request) courses = Course.objects.filter(is_active=True) groups = Group.objects.filter(year=get_current_year()) true_courses = [] for course in courses: if user in course.teachers.all(): true_courses.append(course) groups = groups.filter(course__in=true_courses).distinct().order_by('name') context = { 'groups': groups, # 'courses' : courses, } return render_to_response('generate.html', context, context_instance=RequestContext(request))
def profile(request, username=None, year=None): user = request.user user_to_show = user if username: user_to_show = get_object_or_404(User, username=username) teacher_in_courses = Course.objects.filter(is_active=True).filter(teachers=user_to_show) user_teacher_in_courses = Course.objects.filter(is_active=True).filter(teachers=user) if user_to_show != user: if len(teacher_in_courses) == 0 and len(user_teacher_in_courses) == 0: raise PermissionDenied if year: current_year = get_object_or_404(Year, start_year=year) else: current_year = get_current_year() tasks_taken = TaskTaken.objects.filter(user=user_to_show).filter(Q( Q(status=TaskTaken.STATUS_TAKEN) | Q(status=TaskTaken.STATUS_SCORED))).filter(task__course__is_active=True) course_x_tasks = {} course_x_scores = {} for task_taken in tasks_taken: course = task_taken.task.course course_x_scores.setdefault(course, 0) task_end_date = task_taken.added_time + datetime.timedelta(days=course.max_days_without_score) course_x_tasks.setdefault(course, []) course_x_tasks[course].append((task_taken.task, task_taken.task.score_max, task_taken.score, task_end_date)) course_x_scores[course] += task_taken.score user_course_information = [] for course in sorted(course_x_tasks.keys(), key=lambda x: x.name): user_course_information.append((course,course_x_scores[course],course_x_tasks[course])) groups = user_to_show.group_set.filter(year=current_year) can_generate_invites = user_to_show == user and Invite.user_can_generate_invite(user) issues = Issue.objects.filter(student=user_to_show).order_by('task__course') if request.method == 'POST': invite_form = InviteActivationForm(request.POST) if invite_form.is_valid(): invite = get_object_or_404(Invite, key=invite_form.cleaned_data['invite']) if invite.group: invite.group.students.add(user) invite.invited_users.add(user) else: invite_form = InviteActivationForm() context = { 'user_to_show' : user_to_show, 'groups' : groups, 'user_course_information' : user_course_information, 'teacher_in_courses' : teacher_in_courses, 'can_generate_invites' : can_generate_invites, 'issues' : issues, 'invite_form' : invite_form, } return render_to_response('user_profile.html', context, context_instance=RequestContext(request))
def generate_invites_post(request): user = request.user if 'number_of_invites' not in request.POST: return HttpResponseForbidden() group_id = None if 'group_id' in request.POST: try: group_id = int(request.POST['group_id']) except ValueError: #not int return HttpResponseForbidden() #if invites_not_for_group == False and group_id is None: # return HttpResponseForbidden() try: number_of_invites = int(request.POST['number_of_invites']) except ValueError: #not int return HttpResponseForbidden() group = None group = get_object_or_404(Group, id = group_id) invites = Invite.generate_invites(number_of_invites, user, group) invite_expired_date = datetime.date.today() + datetime.timedelta(days=settings.INVITE_EXPIRED_DAYS) context = { 'invites' : invites, 'group' : group, 'invite_expired_date' : invite_expired_date, } return render_to_response('invites_list.html', context, context_instance=RequestContext(request))
def clean_invite(self): """ Validate that the invite is not already in use and exists. """ valid, message = Invite.can_be_used(self.cleaned_data['invite']) if not valid: raise forms.ValidationError(message) else: return self.cleaned_data['invite']
def generate_invites(request): user = request.user if not Invite.user_can_generate_invite(user): return render_to_response('generate_forbidden.html', {}, context_instance=RequestContext(request)) if request.method == 'POST': return generate_invites_post(request) groups = Group.objects.filter(year=get_current_year()) context = { 'groups' : groups, } return render_to_response('generate.html', context, context_instance=RequestContext(request))
def profile(request, username=None, year=None): user = request.user user_to_show = user if username: user_to_show = get_object_or_404(User, username=username) if year: current_year = get_object_or_404(Year, start_year=year) else: current_year = get_current_year() tasks_taken = TaskTaken.objects.filter(user=user_to_show).filter(Q( Q(status=TaskTaken.STATUS_TAKEN) | Q(status=TaskTaken.STATUS_SCORED))).filter(task__cource__is_active=True) cource_x_tasks = {} cource_x_scores = {} for task_taken in tasks_taken: cource = task_taken.task.cource cource_x_scores.setdefault(cource, 0) task_end_date = task_taken.added_time + datetime.timedelta(days=cource.max_days_without_score) cource_x_tasks.setdefault(cource, []) cource_x_tasks[cource].append((task_taken.task, task_taken.task.score_max, task_taken.score, task_end_date)) cource_x_scores[cource] += task_taken.score user_cource_information = [] for cource in sorted(cource_x_tasks.keys(), key=lambda x: x.name): user_cource_information.append((cource,cource_x_scores[cource],cource_x_tasks[cource])) groups = user_to_show.group_set.filter(year=current_year) teacher_in_cources = Cource.objects.filter(is_active=True).filter(teachers=user_to_show) can_generate_invites = user_to_show == user and Invite.user_can_generate_invite(user) context = { 'user_to_show' : user_to_show, 'groups' : groups, 'user_cource_information' : user_cource_information, 'teacher_in_cources' : teacher_in_cources, 'can_generate_invites' : can_generate_invites, } return render_to_response('user_profile.html', context, context_instance=RequestContext(request))
def generate_invites_post(request): user = request.user if 'number_of_invites' not in request.POST: return HttpResponseForbidden() group_id = None if 'group_id' in request.POST: try: group_id = int(request.POST['group_id']) except ValueError: # not int return HttpResponseForbidden() # if invites_not_for_group == False and group_id is None: # return HttpResponseForbidden() try: number_of_invites = int(request.POST['number_of_invites']) except ValueError: # not int return HttpResponseForbidden() group = None group = get_object_or_404(Group, id=group_id) invites = Invite.generate_invites(number_of_invites, user, group) invite_expired_date = datetime.date.today() + datetime.timedelta( days=settings.INVITE_EXPIRED_DAYS) context = { 'invites': invites, 'group': group, 'invite_expired_date': invite_expired_date, } return render_to_response('invites_list.html', context, context_instance=RequestContext(request))
def generate_invites(request): user = request.user if not Invite.user_can_generate_invite(user): return render_to_response('generate_forbidden.html', {}, context_instance=RequestContext(request)) if request.method == 'POST': return generate_invites_post(request) courses = Course.objects.filter(is_active=True) groups = Group.objects.filter(year=get_current_year()) true_courses = [] for course in courses: if user in course.teachers.all(): true_courses.append(course) groups = set(groups.filter(course__in=true_courses)) context = { 'groups' : groups, #'courses' : courses, } return render_to_response('generate.html', context, context_instance=RequestContext(request))
def SendInviteFromUser(cls, user, to_user_email): if not cls.InsightsRemainingForUser(user): return False existing_user = UserController.GetUserByUserName(to_user_email) if existing_user: if existing_user.profile.registration_status in ['WAITING', 'DECLINED']: existing_user.delete() else: return True invite = Invite(user=user, code='', to_email=to_user_email ) code = "".join( [random.choice(string.letters[:26]) for i in xrange(5)] ).upper() while Invite.objects.filter(code=code).count(): code = "".join( [random.choice(string.letters[:26]) for i in xrange(5)] ).upper() invite.code = code invite.save() try: EmailController.SendInviteEmail(to_user_email, invite.code, user.username) except Exception, e: Logger.Warn('%s - InviteController.SendInviteFromUser - error sending email' % __name__) Logger.Debug('%s - InviteController.SendInviteFromUser - error sending email: %s' % (__name__, e)) invite.delete() return False
def profile(request, username=None, year=None): user = request.user user_to_show = user if username: user_to_show = get_object_or_404(User, username=username) user_to_show_profile = user_to_show.profile show_email = True user_above_user_to_show = True if user_to_show != user: user_teach_user_to_show = False user_to_show_teach_user = False user_school_user_to_show = False user_school_teach_user_to_show = False groups_user_to_show = user_to_show.group_set.all() groups = user.group_set.all() courses_user_to_show = Course.objects.filter( groups__in=groups_user_to_show) schools_user_to_show = School.objects.filter( courses__in=courses_user_to_show) courses_user_to_show_teacher = Course.objects.filter( teachers=user_to_show) schools_user_to_show_teacher = School.objects.filter( courses__in=courses_user_to_show_teacher) courses = Course.objects.filter(groups__in=groups) schools = School.objects.filter(courses__in=courses) courses_teacher = Course.objects.filter(teachers=user) schools_teacher = School.objects.filter(courses__in=courses_teacher) if courses_user_to_show_teacher & courses: user_to_show_teach_user = True if courses_teacher & courses_user_to_show: user_teach_user_to_show = True if (schools_user_to_show | schools_user_to_show_teacher) & (schools | schools_teacher): user_school_user_to_show = True if schools_teacher & schools_user_to_show: user_school_teach_user_to_show = True if not (user.is_staff or user_school_user_to_show): if not ((courses_user_to_show | courses_user_to_show_teacher) & (courses | courses_teacher)): if not (groups_user_to_show & groups): raise PermissionDenied show_email = \ user.is_staff or \ user_to_show_profile.show_email or \ user_teach_user_to_show or \ user_to_show_teach_user user_above_user_to_show = \ user.is_staff or \ user_school_teach_user_to_show teacher_in_courses = Course.objects.filter(is_active=True).filter( teachers=user_to_show).distinct() if year: current_year = get_object_or_404(Year, start_year=year) else: current_year = get_current_year() groups = user_to_show.group_set.all().distinct() courses = Course.objects.filter(is_active=True).filter( groups__in=groups).distinct() can_generate_invites = user_to_show == user and Invite.user_can_generate_invite( user) invite_form = InviteActivationForm() if request.method == 'POST': user_profile = user.profile if 'update-avatar' in request.POST: filename = 'avatar' if 'input-avatar' in request.FILES: image_content = request.FILES['input-avatar'] user_profile.avatar.save(filename, image_content) elif request.POST['delete-avatar']: user_profile.avatar.delete() # elif request.POST['gravatar-link']: # image_content = ContentFile(requests.get(request.POST['gravatar-link']).content) # user_profile.avatar.save(filename, image_content) user_profile.save() else: invite_form = InviteActivationForm(request.POST) if invite_form.is_valid(): invite = get_object_or_404( Invite, key=invite_form.cleaned_data['invite']) if invite.group: invite.group.students.add(user) invite.invited_users.add(user) teacher_in_courses_archive = Course.objects.filter(is_active=False).filter( teachers=user_to_show).distinct() courses_archive = Course.objects.filter(is_active=False).filter( groups__in=groups).distinct() if len(teacher_in_courses or teacher_in_courses_archive) != 0 \ and len(courses or courses_archive) != 0 \ and len(groups) != 0: card_width = 'col-md-4' elif len(teacher_in_courses or teacher_in_courses_archive) != 0 \ and len(courses or courses_archive) != 0 or len(teacher_in_courses or teacher_in_courses_archive) != 0 \ and len(groups) != 0 or len(courses or courses_archive) != 0 \ and len(groups) != 0: card_width = 'col-md-6' else: card_width = 'col-md-12' age = 0 if user.is_staff and user_to_show_profile.birth_date: age = relativedelta(datetime.datetime.now(), user_to_show_profile.birth_date).years age = age if age > 0 else 0 context = { 'user_to_show': user_to_show, 'courses': group_by_year(courses), 'courses_archive': group_by_year(courses_archive), 'groups': group_by_year(groups), 'teacher_in_courses': group_by_year(teacher_in_courses), 'teacher_in_courses_archive': group_by_year(teacher_in_courses_archive), 'current_year': unicode(current_year) if current_year is not None else '', 'can_generate_invites': can_generate_invites, 'invite_form': invite_form, 'user_to_show_profile': user_to_show_profile, 'card_width': card_width, 'show_email': show_email, 'user_above_user_to_show': user_above_user_to_show, 'age': age, } return render(request, 'user_profile.html', context)
def account(request): user = request.user membership_warning = True membership = {} if request.method == 'GET': forms = AccountSettingsForm() if user.apple_receipt: # try statement in case of apple_expires_date is None for some reason try: if user.apple_expires_date >= datetime.now(): membership = { "type": "apple", "apple_product_id": user.apple_product_id, "expiration_date": user.apple_expires_date } membership_warning = None except TypeError: membership = { "type": "apple", "apple_product_id": "Apple In App Purchase", "expiration_date": None } membership_warning = None if user.stripe_subscription_id and membership_warning: stripe_sub = user.check_stripe() if stripe_sub[0] == 'active': membership = { "type": "stripe", "expiration_date": stripe_sub[1] } membership_warning = None if user.paypal_subscription_id and membership_warning: paypal_sub = user.check_paypal() if paypal_sub[0] == "active" or (paypal_sub[0] == "cancelled" and paypal_sub[1] >= datetime.now()): membership = { "type": "paypal", "expiration_date": paypal_sub[1] } membership_warning = None if membership_warning: if Invite.has_invite(request.user): membership = { "type": "invite", "expiration_date": Invite.has_invite(request.user) } membership_warning = None else: message = "User " + request.user.username + ", email: " + request.user.email \ + " has got a corrupted membership. " \ "There is no valid subscription (active or cancelled) or invitation. " send_mail("Broken membership", message, env.str('ADMIN_EMAIL'), [env.str('ADMIN_EMAIL')], fail_silently=False) else: form = AccountSettingsForm(request.POST, request.FILES) if 'delete' in request.POST: user.pic.delete() messages.success(request, 'You\'ve deleted profile picture.') elif form.is_valid() and form.cleaned_data['pic']: user.pic = form.cleaned_data['pic'] user.save() messages.success(request, 'Boom! You\'ve got new profile picture.') else: messages.warning(request, 'You need to load picture to save it') return redirect('/account') return render( request, 'account/account.html', { 'forms': forms, 'membership': membership, "membership_warning": membership_warning })
def profile(request, username=None, year=None): user = request.user user_to_show = user if username: user_to_show = get_object_or_404(User, username=username) user_to_show_profile = user_to_show.get_profile() show_email = True user_above_user_to_show = True if user_to_show != user: user_teach_user_to_show = False user_to_show_teach_user = False user_school_user_to_show = False user_school_teach_user_to_show = False groups_user_to_show = user_to_show.group_set.all() groups = user.group_set.all() courses_user_to_show = Course.objects.filter(groups__in=groups_user_to_show) schools_user_to_show = School.objects.filter(courses__in=courses_user_to_show) courses_user_to_show_teacher = Course.objects.filter(teachers=user_to_show) schools_user_to_show_teacher = School.objects.filter(courses__in=courses_user_to_show_teacher) courses = Course.objects.filter(groups__in=groups) schools = School.objects.filter(courses__in=courses) courses_teacher = Course.objects.filter(teachers=user) schools_teacher = School.objects.filter(courses__in=courses_teacher) if courses_user_to_show_teacher & courses: user_to_show_teach_user = True if courses_teacher & courses_user_to_show: user_teach_user_to_show = True if (schools_user_to_show | schools_user_to_show_teacher) & (schools | schools_teacher): user_school_user_to_show = True if schools_teacher & schools_user_to_show: user_school_teach_user_to_show = True if not (user.is_staff or user_school_user_to_show): if not ((courses_user_to_show | courses_user_to_show_teacher) & (courses | courses_teacher)): if not (groups_user_to_show & groups): raise PermissionDenied show_email = \ user.is_staff or \ user_to_show_profile.show_email or \ user_teach_user_to_show or \ user_to_show_teach_user user_above_user_to_show = \ user.is_staff or \ user_school_teach_user_to_show teacher_in_courses = Course.objects.filter(is_active=True).filter(teachers=user_to_show).distinct() if year: current_year = get_object_or_404(Year, start_year=year) else: current_year = get_current_year() groups = user_to_show.group_set.all().distinct() courses = Course.objects.filter(is_active=True).filter(groups__in=groups).distinct() can_generate_invites = user_to_show == user and Invite.user_can_generate_invite(user) invite_form = InviteActivationForm() if request.method == 'POST': user_profile = user.get_profile() if 'update-avatar' in request.POST: filename = 'avatar' if 'input-avatar' in request.FILES: image_content = request.FILES['input-avatar'] user_profile.avatar.save(filename, image_content) elif request.POST['delete-avatar']: user_profile.avatar.delete() # elif request.POST['gravatar-link']: # image_content = ContentFile(requests.get(request.POST['gravatar-link']).content) # user_profile.avatar.save(filename, image_content) user_profile.save() else: invite_form = InviteActivationForm(request.POST) if invite_form.is_valid(): invite = get_object_or_404(Invite, key=invite_form.cleaned_data['invite']) if invite.group: invite.group.students.add(user) invite.invited_users.add(user) teacher_in_courses_archive = Course.objects.filter(is_active=False).filter(teachers=user_to_show).distinct() courses_archive = Course.objects.filter(is_active=False).filter(groups__in=groups).distinct() if len(teacher_in_courses or teacher_in_courses_archive) != 0 \ and len(courses or courses_archive) != 0 \ and len(groups) != 0: card_width = 'col-md-4' elif len(teacher_in_courses or teacher_in_courses_archive) != 0 \ and len(courses or courses_archive) != 0 or len(teacher_in_courses or teacher_in_courses_archive) != 0 \ and len(groups) != 0 or len(courses or courses_archive) != 0 \ and len(groups) != 0: card_width = 'col-md-6' else: card_width = 'col-md-12' age = 0 if user.is_staff and user_to_show_profile.birth_date: age = relativedelta(datetime.datetime.now(), user_to_show_profile.birth_date).years age = age if age > 0 else 0 context = { 'user_to_show': user_to_show, 'courses': group_by_year(courses), 'courses_archive': group_by_year(courses_archive), 'groups': group_by_year(groups), 'teacher_in_courses': group_by_year(teacher_in_courses), 'teacher_in_courses_archive': group_by_year(teacher_in_courses_archive), 'current_year': unicode(current_year) if current_year is not None else '', 'can_generate_invites': can_generate_invites, 'invite_form': invite_form, 'user_to_show_profile': user_to_show_profile, 'card_width': card_width, 'show_email': show_email, 'user_above_user_to_show': user_above_user_to_show, 'age': age, } return render_to_response('user_profile.html', context, context_instance=RequestContext(request))