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))
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})
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)
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 })
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
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 })
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})
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