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(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 index(request): current_year = get_current_year() courses = Course.objects.filter(is_active=True).order_by('name') archive_courses = Course.objects.exclude(is_active=True).order_by('year', 'name') context = { 'current_year' : current_year, 'courses' : courses, 'archive_courses' : archive_courses, } return render_to_response('index.html', context, context_instance=RequestContext(request))
def courses_list(request, year=None): if year is None: year_object = get_current_year() else: year_object = get_object_or_404(Year, start_year=year) if year_object is None: raise Http404 courses_list = Course.objects.filter(year=year_object).order_by('name') context = { 'courses_list': courses_list, 'year': year_object, } return render_to_response('course_list.html', context, context_instance=RequestContext(request))
def courses_list(request, year=None): if year is None: year_object = get_current_year() else: year_object = get_object_or_404(Year, start_year=year) if year_object is None: raise Http404 courses_list = Course.objects.filter(year=year_object).order_by('name') context = { 'courses_list': courses_list, 'year': year_object, } return render_to_response('course_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) 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(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 is_current_year_student(self): return Group.objects.filter(year=get_current_year()).filter(students=self.user).count() > 0
def user_courses(request, username=None, year=None): user = request.user lang = user.profile.language user_to_show = user if username: user_to_show = get_object_or_404(User, username=username) if user_to_show != user: user_school_teach_user_to_show = False groups_user_to_show = user_to_show.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_teacher = Course.objects.filter(teachers=user) schools_teacher = School.objects.filter(courses__in=courses_teacher) if schools_teacher & schools_user_to_show: user_school_teach_user_to_show = True if not (user.is_staff or user_school_teach_user_to_show): raise PermissionDenied 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() courses = Course.objects.filter(groups__in=groups).distinct() tables = [{}, {}] for course in courses: tasks = Task.objects\ .filter(course=course, groups__in=groups, is_hidden=False) \ .exclude(type=Task.TYPE_MATERIAL)\ .distinct() issues = Issue.objects.filter(student=user_to_show, task__in=tasks) if StudentCourseMark.objects.filter(student=user_to_show, course=course): mark = StudentCourseMark.objects.get(student=user_to_show, course=course).mark else: mark = None student_summ_score = issues \ .filter(task__parent_task__isnull=True) \ .filter( Q(task__type=Task.TYPE_SEMINAR) | Q(task__score_after_deadline=True) | ~Q(task__score_after_deadline=False, status_field__tag=IssueStatus.STATUS_ACCEPTED_AFTER_DEADLINE) ) \ .distinct() \ .aggregate(Sum('mark'))['mark__sum'] or 0 new_course_statistics = dict() new_course_statistics['name'] = course.name new_course_statistics['url'] = course.get_absolute_url() new_course_statistics['issues_count'] = [] for status in course.issue_status_system.statuses.all(): new_course_statistics['issues_count'].append( (status.color, status.get_name(lang), issues.filter(status_field=status).count())) new_course_statistics['tasks'] = tasks.exclude( type=Task.TYPE_SEMINAR).count() new_course_statistics['mark'] = mark if mark else '--' new_course_statistics['summ_score'] = student_summ_score is_archive = int(not course.is_active) table_year = unicode(course.year) table_key = course.issue_status_system.id if table_year not in tables[is_archive]: tables[is_archive][table_year] = dict() if table_key in tables[is_archive][table_year]: tables[is_archive][table_year][table_key].append( new_course_statistics) else: tables[is_archive][table_year][table_key] = [new_course_statistics] context = { 'tables': [sorted(x.iteritems()) for x in tables], 'current_year': unicode(current_year) if current_year is not None else '', 'user_to_show': user_to_show, 'user': user, } return render(request, 'user_courses.html', context)
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 is_current_year_student(self): return Group.objects.filter(year=get_current_year()).filter(students=self.user).count() > 0
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))
def user_courses(request, username=None, year=None): user = request.user lang = user.get_profile().language user_to_show = user if username: user_to_show = get_object_or_404(User, username=username) if user_to_show != user: user_school_teach_user_to_show = False groups_user_to_show = user_to_show.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_teacher = Course.objects.filter(teachers=user) schools_teacher = School.objects.filter(courses__in=courses_teacher) if schools_teacher & schools_user_to_show: user_school_teach_user_to_show = True if not (user.is_staff or user_school_teach_user_to_show): raise PermissionDenied 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() courses = Course.objects.filter(groups__in=groups).distinct() tables = [{}, {}] for course in courses: tasks = Task.objects\ .filter(course=course, groups__in=groups, is_hidden=False) \ .exclude(type=Task.TYPE_MATERIAL)\ .distinct() issues = Issue.objects.filter(student=user_to_show, task__in=tasks) if StudentCourseMark.objects.filter(student=user_to_show, course=course): mark = StudentCourseMark.objects.get(student=user_to_show, course=course).mark else: mark = None student_summ_score = issues \ .filter(task__parent_task__isnull=True) \ .filter( Q(task__type=Task.TYPE_SEMINAR) | Q(task__score_after_deadline=True) | ~Q(task__score_after_deadline=False, status_field__tag=IssueStatus.STATUS_ACCEPTED_AFTER_DEADLINE) ) \ .distinct() \ .aggregate(Sum('mark'))['mark__sum'] or 0 new_course_statistics = dict() new_course_statistics['name'] = course.name new_course_statistics['url'] = course.get_absolute_url() new_course_statistics['issues_count'] = [] for status in course.issue_status_system.statuses.all(): new_course_statistics['issues_count'].append((status.color, status.get_name(lang), issues.filter(status_field=status).count())) new_course_statistics['tasks'] = tasks.exclude(type=Task.TYPE_SEMINAR).count() new_course_statistics['mark'] = mark if mark else '--' new_course_statistics['summ_score'] = student_summ_score is_archive = int(not course.is_active) table_year = unicode(course.year) table_key = course.issue_status_system.id if table_year not in tables[is_archive]: tables[is_archive][table_year] = dict() if table_key in tables[is_archive][table_year]: tables[is_archive][table_year][table_key].append(new_course_statistics) else: tables[is_archive][table_year][table_key] = [new_course_statistics] context = { 'tables': [sorted(x.iteritems()) for x in tables], 'current_year': unicode(current_year) if current_year is not None else '', 'user_to_show': user_to_show, 'user': user, } return render_to_response('user_courses.html', context, context_instance=RequestContext(request))