示例#1
0
def send_team_admin_email(request, admin_id):
    """
    Renders simple page for emailing the a Team admin
    :param request: any request
    :param admin_id: a valid id of a TeamAdministrator object
    :return: a very simple form
    """
    admin = TeamAdministrator.objects.get(id=admin_id)
    profile = name = email = ""

    if admin.entity_type == 'fan':
        profile = "/fan/%s" % admin.entity_id
        fan = FanPage.objects.get(id=admin.entity_id)
        name = fan_page_name(fan)
        email = fan.fan.email
    elif admin.entity_type == 'student':
        profile = "/cern/student/%s" % admin.entity_id
        stu = Student.objects.get(id=admin.entity_id)
        name = user_name(stu.user) or stu.display_name or 'No Name'
        email = student_email(stu)

    return render_to_response('spudderadmin/pages/reports/send_email.html', {
        'profile': profile,
        'name': name,
        'email': email
    },
                              context_instance=RequestContext(request))
示例#2
0
def send_team_admin_email(request, admin_id):
    """
    Renders simple page for emailing the a Team admin
    :param request: any request
    :param admin_id: a valid id of a TeamAdministrator object
    :return: a very simple form
    """
    admin = TeamAdministrator.objects.get(id=admin_id)
    profile = name = email = ""

    if admin.entity_type == 'fan':
        profile = "/fan/%s" % admin.entity_id
        fan = FanPage.objects.get(id=admin.entity_id)
        name = fan_page_name(fan)
        email = fan.fan.email
    elif admin.entity_type == 'student':
        profile = "/cern/student/%s" % admin.entity_id
        stu = Student.objects.get(id=admin.entity_id)
        name = user_name(stu.user) or stu.display_name or 'No Name'
        email = student_email(stu)

    return render_to_response('spudderadmin/pages/reports/send_email.html',
                              {
                                  'profile': profile,
                                  'name': name,
                                  'email': email
                              },
                              context_instance=RequestContext(request))
示例#3
0
def migrate_from_amazon(request):
    """
    Helps student migrate from account using Amazon Login
    :param request: any request
    :return: a form to migrate account (similar to registration)
        or a redirect to CERN dashboard
    """
    form = StudentMigrateForm()

    if request.method == 'POST':
        form = StudentMigrateForm(request.POST)

        if form.is_valid():
            email = (form.cleaned_data.get('email_address') or "").strip().lower()
            password = form.cleaned_data.get('password')

            try:
                stu = form.student
            except AttributeError:
                user = User.objects.get(username=email)
            else:
                user = stu.user
                user.username = email

            user.password = password
            user.save()
            messages.success(request, "<h4><i class='fa fa-check'></i> Your password has been updated.</h4>")

            for s in Student.objects.filter(user=user):
                s.migrated = True

            # Can't use a get_or_create bc don't know required field "username"
            try:
                fan = FanPage.objects.get(fan=user)
            except FanPage.DoesNotExist:
                stu = Student.objects.filter(user=user)[0]
                username = "******" % (user_name(user), "Head " if stu.isHead else "", stu.school.name)
                fan = FanPage(fan=user, username=username)
                fan.save()

                # create fan role
                role_controller = RoleController(user)
                fan_role = role_controller.role_by_entity_type_and_entity_id(
                    RoleController.ENTITY_FAN,
                    fan.id,
                    RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_FAN)
                )

            change_current_role(request, RoleController.ENTITY_FAN, fan.id)

            user.backend = "django.contrib.auth.backends.ModelBackend"
            login(request, user)

            return HttpResponseRedirect('/challenges/students')

    return render(request, 'spuddercern/pages/migrate_from_amazon.html', {'form': form})
示例#4
0
def display_name(student):
    """
    Gets either the display name or the username for the student
    :param student: any Student object
    :return: a name as string
    """
    if student.display_name:
        return student.display_name
    else:
        return user_name(student.user)
示例#5
0
def display_name(student):
    """
    Gets either the display name or the username for the student
    :param student: any Student object
    :return: a name as string
    """
    if student.display_name:
        return student.display_name
    else:
        return user_name(student.user)
def get_team_admin_name(team_admin):
    """
    Gets name for the entity of TeamAdministrator object
    :param team_admin: any TeamAdmininstrator object
    :return: a name as string
    """
    if team_admin.entity_type == 'fan':
        return fan_page_name(FanPage.objects.get(id=team_admin.entity_id))
    elif team_admin.entity_type == 'student':
        return user_name(Student.objects.get(id=team_admin.entity_id).user)
示例#7
0
def register_school(request, school_id, referral_id=None):
    """
    Renders the signup page for a new student at a certain school

    :param request: request to render page
    :param school_id: the ID of the school which the student will
        register with
    :param referral_id: an optional param which indicates a referral by
        another student
    :return: a simple register form (email + password)
    """
    try:
        school = School.objects.get(id=school_id)
    except ObjectDoesNotExist:
        return HttpResponseRedirect('/cern/register/')
    else:
        referrer = None
        if referral_id:
            try:
                referrer = Student.objects.get(id=referral_id)
            except ObjectDoesNotExist:
                referral_id = None

        form = StudentRegistrationForm()
        if request.method == 'POST':
            form = StudentRegistrationForm(request.POST)
            if form.is_valid():
                # Create and login user
                email = form.cleaned_data.get('email_address')
                password = form.cleaned_data.get('password')
                user = User(username=email, email=email, password=password)
                user.save()

                # Create student
                stu = Student(school=school, referred_id=referral_id, user=user)
                if school.num_students() == 0:
                    stu.isHead = True
                stu.save()

                signed_up(stu)
                if referral_id:
                    referrer = Student.objects.get(id=referral_id)
                    recruited_new_student(referrer, school)

                # Create fan for user
                username = "******" % (user_name(user), "Head " if stu.isHead else "", stu.school.name)
                fan = FanPage(fan=user, username=username)
                fan.save()

                user.backend = "django.contrib.auth.backends.ModelBackend"
                login(request, user)

                role_controller = RoleController(user)
                # create the student role
                student_role = role_controller.role_by_entity_type_and_entity_id(
                    RoleController.ENTITY_STUDENT,
                    stu.id,
                    RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_STUDENT)
                )
                # create fan role
                fan_role = role_controller.role_by_entity_type_and_entity_id(
                    RoleController.ENTITY_FAN,
                    fan.id,
                    RoleBase.RoleWrapperByEntityType(RoleController.ENTITY_FAN)
                )

                # activate highest priority role (fan)
                change_current_role(request)

                return HttpResponseRedirect('/challenges/students')
        return render(request, 'spuddercern/pages/register_login.html', {
            'school': school,
            'referrer': referrer,
            'form': form,
            'base_url': settings.SPUDMART_BASE_URL
        })
示例#8
0
def krowdio_users_to_links(can_edit, current_role, krowdio_dict, filter=None):
    """
    Translates KrowdIO users into a list of dicts about Spudder entities
    :param krowdio_dict: the 'users' part of a response from the
        KrowdIO API (intended for use with followers/following)
    :return: a list of dicts, where the dict contains the icon link,
        profile link, and name of each Spudder entity followed
    """
    users = []
    for user in krowdio_dict:
        krowdio_id = user['_id']
        try:
            storage_obj = KrowdIOStorage.objects.get(krowdio_user_id=krowdio_id)
        except KrowdIOStorage.DoesNotExist:
            continue

        if storage_obj.role_type == RoleController.ENTITY_FAN and \
                (filter == RoleController.ENTITY_FAN or filter is None):
            fan = FanPage.objects.get(id=storage_obj.role_id)
            if fan.avatar:
                icon_link = '/file/serve/%s' % fan.avatar.id
            else:
                icon_link = '/static/img/spudderfans/button-fans-tiny.png'
            users.append({
                'name': fan.name,
                'profile': '/fan/%s' % fan.id,
                'icon_link': icon_link,
                'custom_tag': FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=fan.id,
                    entity_type=RoleController.ENTITY_FAN) if can_edit else None
            })
        elif storage_obj.role_type == RoleController.ENTITY_SPONSOR and \
                (filter == RoleController.ENTITY_SPONSOR or filter is None):
            sponsor = SponsorPage.objects.get(id=storage_obj.role_id)
            if sponsor.thumbnail:
                icon_link = '/file/serve/%s' % sponsor.thumbnail
            else:
                icon_link = '/static/img/spuddersponsors/button-sponsors-tiny.png'
            users.append({
                'name': sponsor.name,
                'profile': '/sponsor/%s' % sponsor.id,
                'icon_link': icon_link,
                'custom_tag': FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=sponsor.id,
                    entity_type=RoleController.ENTITY_SPONSOR) if can_edit else None
            })
        elif storage_obj.role_type == RoleController.ENTITY_STUDENT and \
                (filter == RoleController.ENTITY_STUDENT or filter is None):
            stu = Student.objects.get(id=storage_obj.role_id)
            if stu.logo:
                icon_link = '/file/serve/%s' % stu.logo
            else:
                icon_link = 'static/img/spuddercern/button-cern-tiny.png'
            users.append({
                'name': user_name(stu.user),
                'profile': '/cern/student/%s' % stu.id,
                'icon_link': icon_link,
                'custom_tag': FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=stu.id,
                    entity_type=RoleController.ENTITY_STUDENT) if can_edit else None
            })
        elif storage_obj.venue and \
                (filter == EntityController.ENTITY_VENUE or filter is None):
            if storage_obj.venue.logo:
                icon_link = '/file/serve/%s' % storage_obj.venue.logo.id
            else:
                icon_link = '/static/img/spudderspuds/button-spuds-tiny.png'
            users.append({
                'name': storage_obj.venue.aka_name,
                'profile': '/venues/view/%s' % storage_obj.venue.id,
                'icon_link': icon_link,
                'custom_tag': FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=storage_obj.venue.id,
                    entity_type=EntityController.ENTITY_VENUE) if can_edit else None
            })
        elif storage_obj.team and \
                (filter == EntityController.ENTITY_TEAM or filter is None):

            if storage_obj.team.image:
                icon_link = '/file/serve/%s' % storage_obj.team.image.id
            else:
                icon_link = '/static/img/spudderspuds/button-teams-tiny.png'
            users.append({
                'name': storage_obj.team.name,
                'profile': '/team/%s' % storage_obj.team.id,
                'icon_link': icon_link,
                'custom_tag': FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=storage_obj.team.id,
                    entity_type=EntityController.ENTITY_TEAM) if can_edit else None
            })
    return users
示例#9
0
def register_school(request, school_id, referral_id=None):
    """
    Renders the signup page for a new student at a certain school

    :param request: request to render page
    :param school_id: the ID of the school which the student will
        register with
    :param referral_id: an optional param which indicates a referral by
        another student
    :return: a simple register form (email + password)
    """
    try:
        school = School.objects.get(id=school_id)
    except ObjectDoesNotExist:
        return HttpResponseRedirect('/cern/register/')
    else:
        referrer = None
        if referral_id:
            try:
                referrer = Student.objects.get(id=referral_id)
            except ObjectDoesNotExist:
                referral_id = None

        form = StudentRegistrationForm()
        if request.method == 'POST':
            form = StudentRegistrationForm(request.POST)
            if form.is_valid():
                # Create and login user
                email = form.cleaned_data.get('email_address')
                password = form.cleaned_data.get('password')
                user = User(username=email, email=email, password=password)
                user.save()

                # Create student
                stu = Student(school=school,
                              referred_id=referral_id,
                              user=user)
                if school.num_students() == 0:
                    stu.isHead = True
                stu.save()

                signed_up(stu)
                if referral_id:
                    referrer = Student.objects.get(id=referral_id)
                    recruited_new_student(referrer, school)

                # Create fan for user
                username = "******" % (user_name(
                    user), "Head " if stu.isHead else "", stu.school.name)
                fan = FanPage(fan=user, username=username)
                fan.save()

                user.backend = "django.contrib.auth.backends.ModelBackend"
                login(request, user)

                role_controller = RoleController(user)
                # create the student role
                student_role = role_controller.role_by_entity_type_and_entity_id(
                    RoleController.ENTITY_STUDENT, stu.id,
                    RoleBase.RoleWrapperByEntityType(
                        RoleController.ENTITY_STUDENT))
                # create fan role
                fan_role = role_controller.role_by_entity_type_and_entity_id(
                    RoleController.ENTITY_FAN, fan.id,
                    RoleBase.RoleWrapperByEntityType(
                        RoleController.ENTITY_FAN))

                # activate highest priority role (fan)
                change_current_role(request)

                return HttpResponseRedirect('/challenges/students')
        return render(
            request, 'spuddercern/pages/register_login.html', {
                'school': school,
                'referrer': referrer,
                'form': form,
                'base_url': settings.SPUDMART_BASE_URL
            })
示例#10
0
def migrate_from_amazon(request):
    """
    Helps student migrate from account using Amazon Login
    :param request: any request
    :return: a form to migrate account (similar to registration)
        or a redirect to CERN dashboard
    """
    form = StudentMigrateForm()

    if request.method == 'POST':
        form = StudentMigrateForm(request.POST)

        if form.is_valid():
            email = (form.cleaned_data.get('email_address')
                     or "").strip().lower()
            password = form.cleaned_data.get('password')

            try:
                stu = form.student
            except AttributeError:
                user = User.objects.get(username=email)
            else:
                user = stu.user
                user.username = email

            user.password = password
            user.save()
            messages.success(
                request,
                "<h4><i class='fa fa-check'></i> Your password has been updated.</h4>"
            )

            for s in Student.objects.filter(user=user):
                s.migrated = True

            # Can't use a get_or_create bc don't know required field "username"
            try:
                fan = FanPage.objects.get(fan=user)
            except FanPage.DoesNotExist:
                stu = Student.objects.filter(user=user)[0]
                username = "******" % (user_name(
                    user), "Head " if stu.isHead else "", stu.school.name)
                fan = FanPage(fan=user, username=username)
                fan.save()

                # create fan role
                role_controller = RoleController(user)
                fan_role = role_controller.role_by_entity_type_and_entity_id(
                    RoleController.ENTITY_FAN, fan.id,
                    RoleBase.RoleWrapperByEntityType(
                        RoleController.ENTITY_FAN))

            change_current_role(request, RoleController.ENTITY_FAN, fan.id)

            user.backend = "django.contrib.auth.backends.ModelBackend"
            login(request, user)

            return HttpResponseRedirect('/challenges/students')

    return render(request, 'spuddercern/pages/migrate_from_amazon.html',
                  {'form': form})
示例#11
0
def krowdio_users_to_links(can_edit, current_role, krowdio_dict, filter=None):
    """
    Translates KrowdIO users into a list of dicts about Spudder entities
    :param krowdio_dict: the 'users' part of a response from the
        KrowdIO API (intended for use with followers/following)
    :return: a list of dicts, where the dict contains the icon link,
        profile link, and name of each Spudder entity followed
    """
    users = []
    for user in krowdio_dict:
        krowdio_id = user['_id']
        try:
            storage_obj = KrowdIOStorage.objects.get(
                krowdio_user_id=krowdio_id)
        except KrowdIOStorage.DoesNotExist:
            continue

        if storage_obj.role_type == RoleController.ENTITY_FAN and \
                (filter == RoleController.ENTITY_FAN or filter is None):
            fan = FanPage.objects.get(id=storage_obj.role_id)
            if fan.avatar:
                icon_link = '/file/serve/%s' % fan.avatar.id
            else:
                icon_link = '/static/img/spudderfans/button-fans-tiny.png'
            users.append({
                'name':
                fan.name,
                'profile':
                '/fan/%s' % fan.id,
                'icon_link':
                icon_link,
                'custom_tag':
                FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=fan.id,
                    entity_type=RoleController.ENTITY_FAN)
                if can_edit else None
            })
        elif storage_obj.role_type == RoleController.ENTITY_SPONSOR and \
                (filter == RoleController.ENTITY_SPONSOR or filter is None):
            sponsor = SponsorPage.objects.get(id=storage_obj.role_id)
            if sponsor.thumbnail:
                icon_link = '/file/serve/%s' % sponsor.thumbnail
            else:
                icon_link = '/static/img/spuddersponsors/button-sponsors-tiny.png'
            users.append({
                'name':
                sponsor.name,
                'profile':
                '/sponsor/%s' % sponsor.id,
                'icon_link':
                icon_link,
                'custom_tag':
                FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=sponsor.id,
                    entity_type=RoleController.ENTITY_SPONSOR)
                if can_edit else None
            })
        elif storage_obj.role_type == RoleController.ENTITY_STUDENT and \
                (filter == RoleController.ENTITY_STUDENT or filter is None):
            stu = Student.objects.get(id=storage_obj.role_id)
            if stu.logo:
                icon_link = '/file/serve/%s' % stu.logo
            else:
                icon_link = 'static/img/spuddercern/button-cern-tiny.png'
            users.append({
                'name':
                user_name(stu.user),
                'profile':
                '/cern/student/%s' % stu.id,
                'icon_link':
                icon_link,
                'custom_tag':
                FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=stu.id,
                    entity_type=RoleController.ENTITY_STUDENT)
                if can_edit else None
            })
        elif storage_obj.venue and \
                (filter == EntityController.ENTITY_VENUE or filter is None):
            if storage_obj.venue.logo:
                icon_link = '/file/serve/%s' % storage_obj.venue.logo.id
            else:
                icon_link = '/static/img/spudderspuds/button-spuds-tiny.png'
            users.append({
                'name':
                storage_obj.venue.aka_name,
                'profile':
                '/venues/view/%s' % storage_obj.venue.id,
                'icon_link':
                icon_link,
                'custom_tag':
                FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=storage_obj.venue.id,
                    entity_type=EntityController.ENTITY_VENUE)
                if can_edit else None
            })
        elif storage_obj.team and \
                (filter == EntityController.ENTITY_TEAM or filter is None):

            if storage_obj.team.image:
                icon_link = '/file/serve/%s' % storage_obj.team.image.id
            else:
                icon_link = '/static/img/spudderspuds/button-teams-tiny.png'
            users.append({
                'name':
                storage_obj.team.name,
                'profile':
                '/team/%s' % storage_obj.team.id,
                'icon_link':
                icon_link,
                'custom_tag':
                FanFollowingEntityTag.GetTag(
                    fan=current_role.entity,
                    entity_id=storage_obj.team.id,
                    entity_type=EntityController.ENTITY_TEAM)
                if can_edit else None
            })
    return users