Exemple #1
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)

    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))
Exemple #2
0
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))
Exemple #3
0
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))
Exemple #4
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)

    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))
Exemple #5
0
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))
Exemple #6
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.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)
Exemple #7
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))