Example #1
0
def invite_teacher_to_group(request, group_id):
    """Invite teacher to a group."""
    group = get_object_or_404(
        model.Group.objects.filter(owner=request.user.profile), id=group_id)

    if request.method == 'POST':
        form = forms.InviteTeacherForm(request.POST, group=group)
        if form.is_valid():
            with xact.xact():
                teacher = form.save()
            tracking.track(
                request,
                'invited teacher',
                invitedEmail=teacher.user.email,
                groupId=group_id,
                )
            return redirect('group', group_id=group.id)
    else:
        form = forms.InviteTeacherForm(group=group)

    return TemplateResponse(
        request,
        'village/invite_elder/teacher_to_group.html',
        {
            'group': group,
            'form': form,
            'elders': model.contextualized_elders(
                group.all_elders).order_by('school_staff', 'name'),
            },
        )
Example #2
0
def village(request, student_id):
    """The main chat view for a student/village."""
    try:
        rel = get_relationship_or_404(student_id, request.user.profile)
    except http.Http404:
        if not request.user.is_superuser:
            raise
        rel = None
        student = get_object_or_404(model.Profile, pk=student_id)
    else:
        student = rel.student

    group = get_querystring_group(request, student)

    posts = _get_posts(request.user.profile, student=student)

    if rel and not request.impersonating:
        model.unread.mark_village_read(rel.student, rel.elder)

    return TemplateResponse(
        request,
        'village/post_list/village.html',
        {
            'student': student,
            'group': group,
            'relationship': rel,
            'elders': model.contextualized_elders(
                student.elder_relationships).order_by('school_staff', 'name'),
            'read_only': rel is None,
            'posts': posts,
            'post_char_limit': model.post_char_limit(rel) if rel else 0,
            'posting_url': reverse(
                'create_post', kwargs={'student_id': student.id}),
            },
        )
Example #3
0
def invite_teacher(request, student_id):
    """Invite teacher to a student's village."""
    rel = get_relationship_or_404(student_id, request.user.profile)
    group = get_querystring_group(request, rel.student)

    if request.method == 'POST':
        form = forms.InviteTeacherForm(request.POST, rel=rel)
        if form.is_valid():
            with xact.xact():
                teacher = form.save()
            tracking.track(
                request,
                'invited teacher',
                invitedEmail=teacher.user.email,
                studentId=student_id,
                )
            return redirect_to_village(rel.student, group)
    else:
        form = forms.InviteTeacherForm(rel=rel)

    return TemplateResponse(
        request,
        'village/invite_elder/teacher.html',
        {
            'group': group,
            'student': rel.student,
            'form': form,
            'elders': model.contextualized_elders(
                rel.student.elder_relationships).order_by(
                'school_staff', 'name'),
            },
        )
Example #4
0
def invite_family(request, student_id):
    """Invite family member to a student's village."""
    rel = get_relationship_or_404(student_id, request.user.profile)
    group = get_querystring_group(request, rel.student)

    if request.method == 'POST':
        form = forms.InviteFamilyForm(request.POST, rel=rel)
        if form.is_valid():
            with xact.xact():
                form.save()
            tracking.track(request, 'invited family')
            return redirect_to_village(rel.student, group)
    else:
        phone = request.GET.get('phone', None)
        initial = {}
        if phone is not None:
            initial['phone'] = phone
        form = forms.InviteFamilyForm(initial=initial, rel=rel)

    return TemplateResponse(
        request,
        'village/invite_elder/family.html',
        {
            'group': group,
            'student': rel.student,
            'inviter': model.elder_in_context(rel),
            'elders': model.contextualized_elders(
                rel.student.elder_relationships).order_by(
                'school_staff', 'name'),
            'form': form,
            },
        )
    def test_can_values_list(self, db):
        """Can get values_list from contextualized elders."""
        rel1 = factories.RelationshipFactory.create()
        rel2 = factories.RelationshipFactory.create()
        qs = model.contextualized_elders(model.Relationship.objects.all())

        assert set(qs.values_list(
            'id', flat=True)) == {rel1.from_profile_id, rel2.from_profile_id}
    def test_profiles(self, db):
        """Given profiles, yields them with role_in_context."""
        elder1 = factories.ProfileFactory.create(role='foo')
        elder2 = factories.ProfileFactory.create(role='bar')
        qs = model.contextualized_elders(model.Profile.objects.all())

        assert set(qs) == {elder1, elder2}
        assert set([e.role_in_context for e in qs]) == {'foo', 'bar'}
Example #7
0
    def test_can_values_list(self, db):
        """Can get values_list from contextualized elders."""
        rel1 = factories.RelationshipFactory.create()
        rel2 = factories.RelationshipFactory.create()
        qs = model.contextualized_elders(model.Relationship.objects.all())

        assert set(qs.values_list('id', flat=True)) == {
            rel1.from_profile_id, rel2.from_profile_id}
    def test_relationships(self, db):
        """Given relationships, yields elders with role_in_context."""
        rel1 = factories.RelationshipFactory.create(from_profile__role='foo')
        rel2 = factories.RelationshipFactory.create(description='bar')
        qs = model.contextualized_elders(model.Relationship.objects.all())

        assert set(qs) == {rel1.elder, rel2.elder}
        assert set([e.role_in_context for e in qs]) == {'foo', 'bar'}
Example #9
0
    def test_profiles(self, db):
        """Given profiles, yields them with role_in_context."""
        elder1 = factories.ProfileFactory.create(role='foo')
        elder2 = factories.ProfileFactory.create(role='bar')
        qs = model.contextualized_elders(model.Profile.objects.all())

        assert set(qs) == {elder1, elder2}
        assert set([e.role_in_context for e in qs]) == {'foo', 'bar'}
Example #10
0
def edit_elder(request, elder_id, student_id=None, group_id=None):
    """Edit a village elder."""
    elder = get_object_or_404(
        model.Profile.objects.select_related('user'), id=elder_id)
    # can't edit the profile of another school staff
    if elder.school_staff:
        raise http.Http404
    if student_id is not None:
        teacher_rel = get_relationship_or_404(student_id, request.user.profile)
        editor = model.elder_in_context(teacher_rel)
        elder_rel = get_relationship_or_404(student_id, elder)
        elder = model.elder_in_context(elder_rel)
        all_elders = elder_rel.student.elder_relationships
        group = get_querystring_group(request, elder_rel.student)
    else:
        elder_rel = None
        editor = request.user.profile
        if group_id is not None:
            group = get_object_or_404(model.Group.objects.filter(
                    owner=request.user.profile), pk=group_id)
        else:
            group = model.AllStudentsGroup(request.user.profile)
        all_elders = group.all_elders

    if request.method == 'POST':
        form = forms.EditFamilyForm(request.POST, instance=elder, rel=elder_rel)
        success = False
        if elder_rel and request.POST.get('remove', False):
            with xact.xact():
                elder_rel.delete()
            success = True
        elif form.is_valid():
            with xact.xact():
                form.save(editor=editor)
            messages.success(request, u"Changes saved!")
            success = True
        if success:
            if elder_rel:
                return redirect('village', student_id=student_id)
            elif group and not group.is_all:
                return redirect('group', group_id=group.id)
            return redirect('all_students')
    else:
        form = forms.EditFamilyForm(instance=elder, rel=elder_rel)

    return TemplateResponse(
        request,
        'village/elder_form/edit_elder.html',
        {
            'form': form,
            'group': group,
            'student': elder_rel.student if elder_rel else None,
            'inviter': editor,
            'elder': elder,
            'elders': model.contextualized_elders(
                all_elders).order_by('school_staff', 'name'),
            },
        )
    def test_can_order(self, db):
        """Can order a contextualized queryset of relationships."""
        rel1 = factories.RelationshipFactory.create(from_profile__name='B')
        rel2 = factories.RelationshipFactory.create(from_profile__name='A')
        qs = model.contextualized_elders(model.Relationship.objects.all())

        qs = qs.order_by('name')

        assert list(qs) == [rel2.elder, rel1.elder]
Example #12
0
    def test_can_order(self, db):
        """Can order a contextualized queryset of relationships."""
        rel1 = factories.RelationshipFactory.create(from_profile__name='B')
        rel2 = factories.RelationshipFactory.create(from_profile__name='A')
        qs = model.contextualized_elders(model.Relationship.objects.all())

        qs = qs.order_by('name')

        assert list(qs) == [rel2.elder, rel1.elder]
Example #13
0
    def test_relationships(self, db):
        """Given relationships, yields elders with role_in_context."""
        rel1 = factories.RelationshipFactory.create(
            from_profile__role='foo')
        rel2 = factories.RelationshipFactory.create(
            description='bar')
        qs = model.contextualized_elders(model.Relationship.objects.all())

        assert set(qs) == {rel1.elder, rel2.elder}
        assert set([e.role_in_context for e in qs]) == {'foo', 'bar'}
    def test_can_filter_exclude(self, db):
        """Can filter/exclude a contextualized queryset of relationships."""
        rel1 = factories.RelationshipFactory.create()
        rel2 = factories.RelationshipFactory.create()
        factories.RelationshipFactory.create()
        qs = model.contextualized_elders(model.Relationship.objects.all())

        qs = qs.filter(pk__in=[rel1.elder.pk, rel2.elder.pk]).exclude(
            pk=rel2.elder.pk)

        assert set(qs) == {rel1.elder}
Example #15
0
    def test_can_filter_exclude(self, db):
        """Can filter/exclude a contextualized queryset of relationships."""
        rel1 = factories.RelationshipFactory.create()
        rel2 = factories.RelationshipFactory.create()
        factories.RelationshipFactory.create()
        qs = model.contextualized_elders(model.Relationship.objects.all())

        qs = qs.filter(
            pk__in=[rel1.elder.pk, rel2.elder.pk]
            ).exclude(pk=rel2.elder.pk)

        assert set(qs) == {rel1.elder}
Example #16
0
def dashboard(request, group_id=None):
    """Group dashboard."""
    if group_id is None:
        group = model.AllStudentsGroup(request.user.profile)
    else:
        group = get_object_or_404(
            model.Group.objects.filter(owner=request.user.profile),
            id=group_id,
            )

    return TemplateResponse(
        request,
        'village/dashboard.html',
        {
            'group': group,
            'elders': model.contextualized_elders(
                group.all_elders).order_by('school_staff', 'name'),
            'student_count': group.students.count(),
            'teacher_count': group.all_elders.filter(school_staff=True).count(),
            'family_count': group.all_elders.filter(school_staff=False).count(),
            },
        )
Example #17
0
def group(request, group_id=None):
    """The main chat view for a group."""
    if group_id is None:
        group = model.AllStudentsGroup(request.user.profile)
        posting_url = reverse('create_post')
    else:
        group = get_object_or_404(
            model.Group.objects.filter(owner=request.user.profile),
            id=group_id,
            )
        posting_url = reverse('create_post', kwargs={'group_id': group.id})

    return TemplateResponse(
        request,
        'village/post_list/group.html',
        {
            'group': group,
            'elders': model.contextualized_elders(
                group.all_elders).order_by('school_staff', 'name'),
            'posts': _get_posts(request.user.profile, group=group),
            'post_char_limit': model.post_char_limit(request.user.profile),
            'posting_url': posting_url,
            },
        )
Example #18
0
 def test_must_be_profiles_or_relationships(self):
     """Raises ValueError if given unrecognized queryset."""
     with pytest.raises(ValueError):
         model.contextualized_elders(model.Group.objects.all())
 def test_must_be_profiles_or_relationships(self):
     """Raises ValueError if given unrecognized queryset."""
     with pytest.raises(ValueError):
         model.contextualized_elders(model.Group.objects.all())