def get_audiences(user): if is_student(user): return [ core_enums.ALL, core_enums.AUTHENTICATED, core_enums.ANONYMOUS_AND_STUDENTS, core_enums.STUDENT ] elif is_recruiter(user): return [ core_enums.ALL, core_enums.AUTHENTICATED, core_enums.ANONYMOUS_AND_EMPLOYERS, core_enums.EMPLOYER, core_enums.CAMPUS_ORGS_AND_EMPLOYERS ] elif is_campus_org(user): return [ core_enums.ALL, core_enums.AUTHENTICATED, core_enums.ANONYMOUS_AND_CAMPUS_ORGS, core_enums.CAMPUS_ORG, core_enums.CAMPUS_ORGS_AND_EMPLOYERS ] else: return [ core_enums.ALL, core_enums.ANONYMOUS, core_enums.ANONYMOUS_AND_CAMPUS_ORGS, core_enums.ANONYMOUS_AND_EMPLOYERS, core_enums.ANONYMOUS_AND_STUDENTS ]
def verify_account(user): if not user.is_superuser: if not user.userattributes.is_verified and not user.is_active: raise forms.ValidationError(m.account_suspended) # We only care about verified if the user is a student if is_student(user) and not user.userattributes.is_verified and user.is_active: raise forms.ValidationError(m.not_activated)
def event_rsvp(request, event_id): try: event = Event.objects.get(pk=event_id) except: raise Http404("Event with id '%s' does not exist." % event_id) else: # if method is GET then get a list of RSVPed students if request.method == 'GET' and is_campus_org(request.user) or is_recruiter(request.user): data = map(lambda n: {'id': n.student.id, 'email': n.student.user.email}, event.rsvp_set.all()) return HttpResponse(simplejson.dumps(data), mimetype="application/json") # if POST then record student's RSVP elif request.method == 'POST' and is_student(request.user): isAttending = request.POST.get('attending', 'true') isAttending = True if isAttending=='true' else False rsvp, created = RSVP.objects.get_or_create(student=request.user.student, event=event) rsvp.attending = isAttending rsvp.save() if isAttending: DroppedResume.objects.get_or_create(event=event, student=request.user.student) if request.is_ajax(): return HttpResponse() else: return redirect(reverse('event_page',kwargs={'id':id,'slug':event.slug})) else: raise Http403("You do not have access to this view.")
def events(request, category, extra_context=None): context = {'category':category} if category=="past": context['past'] = True if category=="archived": context['archived'] = True # We do a special thing for upcoming events to display them as "Today", "Tomorrow", "This week" if category=="upcoming": context.update(event_filtering_helper(category, request)) else: events_exist, events = event_filtering_helper(category, request) context['events_exist'] = events_exist context['events'] = events if request.is_ajax(): template = loader.get_template("event_filtering_results.html") response = HttpResponse(template.render(RequestContext(request, context))) # Need the no-store header because of chrome history api bug # see http://stackoverflow.com/questions/8240710/chrome-history-api-problems response['Cache-Control'] = "no-store" return response else: if request.GET.has_key("query"): context['initial_state'] = simplejson.dumps(request.GET) context['event_filtering_form'] = EventFilteringForm(request.GET) else: context['event_filtering_form'] = EventFilteringForm() if is_campus_org(request.user) or is_recruiter(request.user): template = "events_employer_campus_org.html" elif is_student(request.user): if not request.user.student.profile_created: return redirect('student_profile') template = "events_student.html" return render_to_response(template, context, context_instance=RequestContext(request) )
def get_user_events_sqs(user): events = SearchQuerySet().models(Event) if is_student(user): return events.filter(SQ(is_public=True) | SQ(invitees=user.id)) if is_campus_org(user): return events.filter(owner=user.id) return events.filter(SQ(owner=user.id) | SQ(attending_employers=user.recruiter.employer.id))
def verify_account(user): if not user.is_superuser: if not user.userattributes.is_verified and not user.is_active: raise forms.ValidationError(m.account_suspended) # We only care about verified if the user is a student if is_student( user ) and not user.userattributes.is_verified and user.is_active: raise forms.ValidationError(m.not_activated)
def get_audiences(user): if is_student(user): return [core_enums.ALL, core_enums.AUTHENTICATED, core_enums.ANONYMOUS_AND_STUDENTS, core_enums.STUDENT] elif is_recruiter(user): return [core_enums.ALL, core_enums.AUTHENTICATED, core_enums.ANONYMOUS_AND_EMPLOYERS, core_enums.EMPLOYER, core_enums.CAMPUS_ORGS_AND_EMPLOYERS] elif is_campus_org(user): return [core_enums.ALL, core_enums.AUTHENTICATED, core_enums.ANONYMOUS_AND_CAMPUS_ORGS, core_enums.CAMPUS_ORG, core_enums.CAMPUS_ORGS_AND_EMPLOYERS] else: return [core_enums.ALL, core_enums.ANONYMOUS, core_enums.ANONYMOUS_AND_CAMPUS_ORGS, core_enums.ANONYMOUS_AND_EMPLOYERS, core_enums.ANONYMOUS_AND_STUDENTS]
def employer_profile_preview(request, slug, extra_context=None): try: employer = Employer.objects.get(slug=slug) except Employer.DoesNotExist: raise Http404("Employer with slug %s does not exist" % slug) if is_student(request.user): return HttpResponseRedirect("%s?id=%s" % (reverse("employers"), employer.id)) elif is_recruiter(request.user): context = {'employer':employer} context.update(get_employer_upcoming_events_context(employer, request.user)) context.update(extra_context or {}) return context
def employer_profile_preview(request, slug, extra_context=None): try: employer = Employer.objects.get(slug=slug) except Employer.DoesNotExist: raise Http404("Employer with slug %s does not exist" % slug) if is_student(request.user): return HttpResponseRedirect("%s?id=%s" % (reverse("employers"), employer.id)) elif is_recruiter(request.user): context = {"employer": employer} context.update(get_employer_upcoming_events_context(employer, request.user)) context.update(extra_context or {}) return context
def home(request, extra_context=None): context = {} page_messages = { 'profile-saved': messages.profile_saved } msg = request.GET.get('msg', None) if msg: context.update(msg = page_messages.get(msg)) if request.user.is_staff: return HttpResponseRedirect(reverse("login")) if request.user.is_authenticated(): context['recent_events'] = get_recent_events(request.user); if is_student(request.user): if not request.user.student.profile_created: return redirect('student_profile') subscriptions = [employer.id for employer in request.user.student.subscriptions.all()] event_sqs = get_upcoming_events_sqs(request.user).filter(SQ(attending_employers__in=subscriptions) | SQ(invitees=request.user.id)) context.update(get_categorized_events_context(len(event_sqs)>0, event_sqs, request.user)) context['has_subscriptions'] = len(subscriptions) > 0 context['TEMPLATE'] = 'student_home.html' else: context.update(get_upcoming_events_context(request.user)) if is_recruiter(request.user): context.update({ 'search_form': StudentSearchForm(), 'notices': Notice.objects.notices_for(request.user), 'unseen_notice_num': Notice.objects.unseen_count_for(request.user), 'subscribers': Student.objects.filter(subscriptions__in=[request.user.recruiter.employer]).count() }); print context context['TEMPLATE'] = 'employer_home.html' elif is_campus_org(request.user): context.update({ 'notices': Notice.objects.notices_for(request.user), 'unseen_notice_num': Notice.objects.unseen_count_for(request.user), }); context['TEMPLATE'] = 'campus_org_home.html' context.update(extra_context or {}) return context request.session.set_test_cookie() context.update({ 'login_form': AuthenticationForm, 'action': request.REQUEST.get('action', ''), 'TEMPLATE': 'anonymous_home.html' }) event_kwargs = {} event_kwargs['end_datetime__gt'] = datetime.now() events = Event.objects.filter(**event_kwargs).order_by("end_datetime") context['events'] = list(events)[:3] context.update(extra_context or {}) return context
def notices(request): """ The main notices index view. Template: :template:`notification/notices.html` Context: notices A list of :model:`notification.Notice` objects that are not archived and to be displayed on the site. """ if is_student(request.user) and not request.user.student.profile_created: return redirect('student_profile') notices = Notice.objects.notices_for(request.user, on_site=True) return render_to_response("notification/notices.html", { "notices": notices, }, context_instance=RequestContext(request))
def notices(request): """ The main notices index view. Template: :template:`notification/notices.html` Context: notices A list of :model:`notification.Notice` objects that are not archived and to be displayed on the site. """ if is_student(request.user) and not request.user.student.profile_created: return redirect('student_profile') notices = Notice.objects.notices_for(request.user, on_site=True) return render_to_response("notification/notices.html", { "notices": notices, }, context_instance=RequestContext(request))
def event_rsvp(request, event_id): try: event = Event.objects.get(pk=event_id) except: raise Http404("Event with id '%s' does not exist." % event_id) else: # if method is GET then get a list of RSVPed students if request.method == 'GET' and is_campus_org( request.user) or is_recruiter(request.user): data = map( lambda n: { 'id': n.student.id, 'email': n.student.user.email }, event.rsvp_set.all()) return HttpResponse(simplejson.dumps(data), mimetype="application/json") # if POST then record student's RSVP elif request.method == 'POST' and is_student(request.user): isAttending = request.POST.get('attending', 'true') isAttending = True if isAttending == 'true' else False rsvp, created = RSVP.objects.get_or_create( student=request.user.student, event=event) rsvp.attending = isAttending rsvp.save() if isAttending: DroppedResume.objects.get_or_create( event=event, student=request.user.student) if request.is_ajax(): return HttpResponse() else: return redirect( reverse('event_page', kwargs={ 'id': id, 'slug': event.slug })) else: raise Http403("You do not have access to this view.")
def event_map(event, user): if is_student(user): rsvp = RSVP.objects.filter(event=event, student=user.student) attending = False responded = False if rsvp.exists(): attending = rsvp.get().attending responded = True dropped_resume_obj = DroppedResume.objects.filter(event=event, student=user.student) dropped_resume = False if dropped_resume_obj.exists(): dropped_resume = True attendee = Attendee.objects.filter(event=event, student=user.student) attended = False if attendee.exists(): attended = True result = [responded, attending, dropped_resume, attended, event] else: result = event return result
def events(request, category, extra_context=None): context = {'category': category} if category == "past": context['past'] = True if category == "archived": context['archived'] = True # We do a special thing for upcoming events to display them as "Today", "Tomorrow", "This week" if category == "upcoming": context.update(event_filtering_helper(category, request)) else: events_exist, events = event_filtering_helper(category, request) context['events_exist'] = events_exist context['events'] = events if request.is_ajax(): template = loader.get_template("event_filtering_results.html") response = HttpResponse( template.render(RequestContext(request, context))) # Need the no-store header because of chrome history api bug # see http://stackoverflow.com/questions/8240710/chrome-history-api-problems response['Cache-Control'] = "no-store" return response else: if request.GET.has_key("query"): context['initial_state'] = simplejson.dumps(request.GET) context['event_filtering_form'] = EventFilteringForm(request.GET) else: context['event_filtering_form'] = EventFilteringForm() if is_campus_org(request.user) or is_recruiter(request.user): template = "events_employer_campus_org.html" elif is_student(request.user): if not request.user.student.profile_created: return redirect('student_profile') template = "events_student.html" return render_to_response(template, context, context_instance=RequestContext(request))
) send_email(subject, body, recipients) data = {"name": new_employer.name, "id": new_employer.id} else: data = {"errors": form.errors} return HttpResponse(simplejson.dumps(data), mimetype="application/json") else: form = form_class() context = {"form": form} context.update(extra_context or {}) return context @user_passes_test(lambda x: is_student(x) or is_recruiter(x)) @render_to("employer_profile_preview.html") def employer_profile_preview(request, slug, extra_context=None): try: employer = Employer.objects.get(slug=slug) except Employer.DoesNotExist: raise Http404("Employer with slug %s does not exist" % slug) if is_student(request.user): return HttpResponseRedirect("%s?id=%s" % (reverse("employers"), employer.id)) elif is_recruiter(request.user): context = {"employer": employer} context.update(get_employer_upcoming_events_context(employer, request.user)) context.update(extra_context or {}) return context
def event_page(request, id, slug, extra_context=None): if is_student(request.user) and not request.user.student.profile_created: return redirect('student_profile') try: event = Event.objects.get(pk=id) except: raise Http404("Event with id '%s' does not exist." % id) if not event.is_public: if not request.user.is_authenticated(): raise Http403("This event is private. You do not have permission to view it.") elif is_campus_org(request.user): if request.user != event.owner: raise Http403("This event is private. You do not have permission to view it.") elif is_recruiter(request.user): if request.user != event.owner and request.user.recruiter.employer not in event.attending_employers.all(): raise Http403("This event is private. You do not have permission to view it.") elif is_student(request.user): try: Invitee.objects.get(event=event, student=request.user.student) except: raise Http403("This event is private. You do not have permission to view it.") current_site = Site.objects.get(id=s.SITE_ID) page_url = 'http://' + current_site.domain + event.get_absolute_url() #google_description is the description + stuff to link back to umeqo google_description = event.description + '\n\nRSVP and more at %s' % page_url context = { 'page_url': page_url, 'DOMAIN': current_site.domain, 'current_site':"http://" + current_site.domain, 'google_description': google_description } if len(event.audience.all()) > 0: context['audience'] = event.audience.all() if is_campus_org(event.owner): context['campus_org_event'] = True context['attending_employers'] = event.attending_employers if is_campus_org(request.user): context['can_edit'] = (event.owner == request.user) context['show_admin'] = (event.owner == request.user) context['recruiters_with_access'] = map(lambda x: {'name':"%s %s" % (x.first_name, x.last_name), 'email': x.email}, User.objects.filter(recruiter__employer__in=event.attending_employers.all()).order_by("first_name")) elif is_recruiter(request.user): context['show_admin'] = request.user.recruiter.employer in event.attending_employers.all() elif is_recruiter(event.owner): if is_recruiter(request.user): context['can_edit'] = request.user.recruiter in event.owner.recruiter.employer.recruiter_set.all() context['show_admin'] = request.user.recruiter in event.owner.recruiter.employer.recruiter_set.all() if context.has_key('show_admin'): attendees = get_attendees(event) rsvps = get_rsvps(event) context['invitees'] = get_invitees(event) if event.is_drop: dropped_resumes = get_dropped_resumes(event) else: dropped_resumes = [] if not event.is_public: no_rsvps = get_no_rsvps(event) else: no_rsvps = [] context.update({ 'rsvps':rsvps, 'no_rsvps': no_rsvps, 'dropped_resumes': dropped_resumes, 'attendees': attendees }); # Increase the view count if we're not admin, a campus org or a recruiter (aka for now just student & anonymous) if not is_campus_org(request.user) and not is_recruiter(request.user) and not request.user.is_staff: event.view_count += 1 event.save() if is_student(request.user): responded, attending, dropped_resume, attended, event = event_map(event, request.user) context['responded'] = responded context['attending'] = attending context['dropped_resume'] = dropped_resume context['attended'] = attended else: context['email_delivery_type'] = core_enums.EMAIL context['event'] = event context.update(extra_context or {}) return context
def get_employer_upcoming_events_context(employer, user): events = SearchQuerySet().models(Event).filter(attending_employers=employer.id, end_datetime__gte=datetime.now()) if is_student(user): events = events.filter(SQ(is_public=True) | SQ(invitees=user.id)) return get_categorized_events_context(len(events) > 0, events, user)
def event_page(request, id, slug, extra_context=None): if is_student(request.user) and not request.user.student.profile_created: return redirect('student_profile') try: event = Event.objects.get(pk=id) except: raise Http404("Event with id '%s' does not exist." % id) if not event.is_public: if not request.user.is_authenticated(): raise Http403( "This event is private. You do not have permission to view it." ) elif is_campus_org(request.user): if request.user != event.owner: raise Http403( "This event is private. You do not have permission to view it." ) elif is_recruiter(request.user): if request.user != event.owner and request.user.recruiter.employer not in event.attending_employers.all( ): raise Http403( "This event is private. You do not have permission to view it." ) elif is_student(request.user): try: Invitee.objects.get(event=event, student=request.user.student) except: raise Http403( "This event is private. You do not have permission to view it." ) current_site = Site.objects.get(id=s.SITE_ID) page_url = 'http://' + current_site.domain + event.get_absolute_url() #google_description is the description + stuff to link back to umeqo google_description = event.description + '\n\nRSVP and more at %s' % page_url context = { 'page_url': page_url, 'DOMAIN': current_site.domain, 'current_site': "http://" + current_site.domain, 'google_description': google_description } if len(event.audience.all()) > 0: context['audience'] = event.audience.all() if is_campus_org(event.owner): context['campus_org_event'] = True context['attending_employers'] = event.attending_employers if is_campus_org(request.user): context['can_edit'] = (event.owner == request.user) context['show_admin'] = (event.owner == request.user) context['recruiters_with_access'] = map( lambda x: { 'name': "%s %s" % (x.first_name, x.last_name), 'email': x.email }, User.objects.filter( recruiter__employer__in=event.attending_employers.all()). order_by("first_name")) elif is_recruiter(request.user): context[ 'show_admin'] = request.user.recruiter.employer in event.attending_employers.all( ) elif is_recruiter(event.owner): if is_recruiter(request.user): context[ 'can_edit'] = request.user.recruiter in event.owner.recruiter.employer.recruiter_set.all( ) context[ 'show_admin'] = request.user.recruiter in event.owner.recruiter.employer.recruiter_set.all( ) if context.has_key('show_admin'): attendees = get_attendees(event) rsvps = get_rsvps(event) context['invitees'] = get_invitees(event) if event.is_drop: dropped_resumes = get_dropped_resumes(event) else: dropped_resumes = [] if not event.is_public: no_rsvps = get_no_rsvps(event) else: no_rsvps = [] context.update({ 'rsvps': rsvps, 'no_rsvps': no_rsvps, 'dropped_resumes': dropped_resumes, 'attendees': attendees }) # Increase the view count if we're not admin, a campus org or a recruiter (aka for now just student & anonymous) if not is_campus_org(request.user) and not is_recruiter( request.user) and not request.user.is_staff: event.view_count += 1 event.save() if is_student(request.user): responded, attending, dropped_resume, attended, event = event_map( event, request.user) context['responded'] = responded context['attending'] = attending context['dropped_resume'] = dropped_resume context['attended'] = attended else: context['email_delivery_type'] = core_enums.EMAIL context['event'] = event context.update(extra_context or {}) return context
}, context).splitlines()) send_email(subject, body, recipients) data = {"name": new_employer.name, "id": new_employer.id} else: data = {'errors': form.errors } return HttpResponse(simplejson.dumps(data), mimetype="application/json") else: form = form_class() context = {'form': form } context.update(extra_context or {}) return context @user_passes_test(lambda x: is_student(x) or is_recruiter(x)) @render_to("employer_profile_preview.html") def employer_profile_preview(request, slug, extra_context=None): try: employer = Employer.objects.get(slug=slug) except Employer.DoesNotExist: raise Http404("Employer with slug %s does not exist" % slug) if is_student(request.user): return HttpResponseRedirect("%s?id=%s" % (reverse("employers"), employer.id)) elif is_recruiter(request.user): context = {'employer':employer} context.update(get_employer_upcoming_events_context(employer, request.user)) context.update(extra_context or {}) return context
def home(request, extra_context=None): context = {} page_messages = {'profile-saved': messages.profile_saved} msg = request.GET.get('msg', None) if msg: context.update(msg=page_messages.get(msg)) if request.user.is_staff: return HttpResponseRedirect(reverse("login")) if request.user.is_authenticated(): context['recent_events'] = get_recent_events(request.user) if is_student(request.user): if not request.user.student.profile_created: return redirect('student_profile') subscriptions = [ employer.id for employer in request.user.student.subscriptions.all() ] event_sqs = get_upcoming_events_sqs(request.user).filter( SQ(attending_employers__in=subscriptions) | SQ(invitees=request.user.id)) context.update( get_categorized_events_context( len(event_sqs) > 0, event_sqs, request.user)) context['has_subscriptions'] = len(subscriptions) > 0 context['TEMPLATE'] = 'student_home.html' else: context.update(get_upcoming_events_context(request.user)) if is_recruiter(request.user): context.update({ 'search_form': StudentSearchForm(), 'notices': Notice.objects.notices_for(request.user), 'unseen_notice_num': Notice.objects.unseen_count_for(request.user), 'subscribers': Student.objects.filter( subscriptions__in=[request.user.recruiter.employer ]).count() }) print context context['TEMPLATE'] = 'employer_home.html' elif is_campus_org(request.user): context.update({ 'notices': Notice.objects.notices_for(request.user), 'unseen_notice_num': Notice.objects.unseen_count_for(request.user), }) context['TEMPLATE'] = 'campus_org_home.html' context.update(extra_context or {}) return context request.session.set_test_cookie() context.update({ 'login_form': AuthenticationForm, 'action': request.REQUEST.get('action', ''), 'TEMPLATE': 'anonymous_home.html' }) event_kwargs = {} event_kwargs['end_datetime__gt'] = datetime.now() events = Event.objects.filter(**event_kwargs).order_by("end_datetime") context['events'] = list(events)[:3] context.update(extra_context or {}) return context