def rolling_deadline_end(request, id, extra_context = None): if request.method == "POST": try: event = Event.objects.get(pk=id) except Event.DoesNotExist: raise Http404("Event with id '%s' does not exist." % id) else: if not event.is_rolling_deadline(): raise Http403('You cannot end anything other than a rolling deadline.') if is_recruiter(event.owner): if not is_recruiter(request.user) or request.user.recruiter.employer != event.owner.recruiter.employer: raise Http403('You are not allowed to end this rolling deadline.') elif is_campus_org(event.owner): if not is_campus_org(request.user) or request.user.campusorg != event.owner.campusorg: raise Http403('You are not allowed to end this rolling deadline.') event.end_datetime = datetime.now()-timedelta(minutes=1) event.save() return HttpResponse() else: try: event = Event.objects.get(id=id) except Event.DoesNotExist: raise Http404("Event with id '%s' does not exist." % id) context = {'event':event} context.update(extra_context or {}) return context
def rolling_deadline_end(request, id, extra_context=None): if request.method == "POST": try: event = Event.objects.get(pk=id) except Event.DoesNotExist: raise Http404("Event with id '%s' does not exist." % id) else: if not event.is_rolling_deadline(): raise Http403( 'You cannot end anything other than a rolling deadline.') if is_recruiter(event.owner): if not is_recruiter( request.user ) or request.user.recruiter.employer != event.owner.recruiter.employer: raise Http403( 'You are not allowed to end this rolling deadline.') elif is_campus_org(event.owner): if not is_campus_org( request.user ) or request.user.campusorg != event.owner.campusorg: raise Http403( 'You are not allowed to end this rolling deadline.') event.end_datetime = datetime.now() - timedelta(minutes=1) event.save() return HttpResponse() else: try: event = Event.objects.get(id=id) except Event.DoesNotExist: raise Http404("Event with id '%s' does not exist." % id) context = {'event': event} context.update(extra_context or {}) return context
def admin_of_event(event, user): if is_recruiter(event.owner): return is_recruiter( user) and user.recruiter.employer == event.owner.recruiter.employer elif is_campus_org(event.owner): return is_campus_org(user) and user.campusorg == event.owner.campusorg return False
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 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 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 event_edit(request, id=None, extra_context=None): try: event = Event.objects.get(pk=id) except Event.DoesNotExist: raise Http404("Event with id '%s' does not exist." % id) context = {'event': event} if not admin_of_event(event, request.user): raise Http403('You are not allowed to edit this event.') if is_recruiter(event.owner): form_class = EventForm elif is_campus_org(event.owner): context['max_industries'] = s.EP_MAX_INDUSTRIES context['attending_employers'] = event.attending_employers form_class = CampusOrgEventForm if request.method == 'POST': form = form_class(request.POST, instance=event) if form.is_valid(): event = form.save(commit=False) event.edits.add(Edit.objects.create(user=request.user)) for employer in event.attending_employers.all(): event.previously_attending_employers.add(employer) event.save() form.save_m2m() # Update index event.save() notify_about_event(event, "new_event", [ e for e in list(event.attending_employers.all()) if e not in list(event.previously_attending_employers.all()) ]) return HttpResponseRedirect( reverse('event_page', kwargs={ 'id': event.id, 'slug': event.slug })) else: form = form_class(instance=event) context['edit'] = True context['hours'] = map(lambda x, y: str(x) + y, [12] + range(1, 13) + range(1, 12), ['am'] * 12 + ['pm'] * 12) context['form'] = form context['today'] = datetime.now().strftime('%m/%d/%Y') if event.type.name == "Hard Deadline": context['event_scheduler_date'] = event.end_datetime.strftime( '%m/%d/%Y') elif event.type.name == "Rolling Deadline": context['event_scheduler_date'] = datetime.now().strftime('%m/%d/%Y') else: context['event_scheduler_date'] = event.start_datetime.strftime( '%m/%d/%Y') context.update(extra_context or {}) return context
def events_check_short_slug_uniqueness(request): if not request.GET.has_key("short_slug"): raise Http400("Request GET is missing the short_slug.") data = {'used':False} if is_campus_org(request.user): if Event.objects.filter(short_slug = request.GET['short_slug'], owner=request.user).exists(): data['used'] = True elif is_recruiter(request.user): if Event.objects.filter(short_slug = request.GET['short_slug'], owner__recruiter__employer=request.user.recruiter.employer).exists(): data['used'] = True return HttpResponse(simplejson.dumps(data), mimetype="application/json")
def check_employer_campus_org_slug_uniqueness(request): if not request.GET.has_key("slug"): raise Http400("Request GET is missing the slug.") data = False campusorg = None employer = None if is_campus_org(request.user): campusorg = request.user.campusorg elif is_recruiter(request.user): employer = request.user.recruiter.employer if not employer_campus_org_slug_exists(request.GET["slug"], campusorg=campusorg, employer=employer): data = True return HttpResponse(simplejson.dumps(data), mimetype="application/json")
def event_new(request, form_class=None, extra_context=None): context = {} if is_recruiter(request.user): employer = request.user.recruiter.employer form_class = EventForm elif is_campus_org(request.user): form_class = CampusOrgEventForm context['max_industries'] = s.EP_MAX_INDUSTRIES if request.method == 'POST': form = form_class(data=request.POST) if form.is_valid(): event = form.save(commit=False) event.owner = request.user event.save() form.save_m2m() if event.type.name == "Rolling Deadline": event.start_datetime = datetime.now() - timedelta(weeks=1) event.end_datetime = datetime.now() + timedelta(weeks=1000) event.save() elif event.type.name == "Hard Deadline": event.start_datetime = event.end_datetime event.save() if is_recruiter(request.user): event.attending_employers.add(employer) # Update index employer.save() notify_about_event(event, "new_event", event.attending_employers.all()) # Update index event.save() return HttpResponseRedirect( reverse('event_page', kwargs={ 'id': event.id, 'slug': event.slug })) else: form = form_class( initial={ 'start_datetime': datetime.now() + timedelta(minutes=30), 'end_datetime': datetime.now() + timedelta(hours=1, minutes=30), }) context['hours'] = map(lambda x, y: str(x) + y, [12] + range(1, 13) + range(1, 12), ['am'] * 12 + ['pm'] * 12) context['form'] = form context['today'] = datetime.now().strftime('%m/%d/%Y') context['event_scheduler_date'] = datetime.now().strftime('%m/%d/%Y') context.update(extra_context or {}) return context
def check_employer_campus_org_slug_uniqueness(request): if not request.GET.has_key("slug"): raise Http400("Request GET is missing the slug.") data = False campusorg = None employer = None if is_campus_org(request.user): campusorg = request.user.campusorg elif is_recruiter(request.user): employer = request.user.recruiter.employer if not employer_campus_org_slug_exists( request.GET["slug"], campusorg=campusorg, employer=employer): data = True return HttpResponse(simplejson.dumps(data), mimetype="application/json")
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 events_check_short_slug_uniqueness(request): if not request.GET.has_key("short_slug"): raise Http400("Request GET is missing the short_slug.") data = {'used': False} if is_campus_org(request.user): if Event.objects.filter(short_slug=request.GET['short_slug'], owner=request.user).exists(): data['used'] = True elif is_recruiter(request.user): if Event.objects.filter(short_slug=request.GET['short_slug'], owner__recruiter__employer=request.user. recruiter.employer).exists(): data['used'] = True return HttpResponse(simplejson.dumps(data), mimetype="application/json")
def event_rsvp_message(request, extra_context=None): if not request.GET.has_key("event_id"): raise Http403("Request GET is missing the event_id.") id = request.GET['event_id'] try: event = Event.objects.get(id=id) except Event.DoesNotExist: raise Http404("Event with id '%s' does not exist." % id) context = {} if event.rsvp_message: context['event'] = event if is_campus_org(event.owner): context['is_campus_org_event'] = True return context return HttpResponse()
def event_edit(request, id=None, extra_context=None): try: event = Event.objects.get(pk=id) except Event.DoesNotExist: raise Http404("Event with id '%s' does not exist." % id) context = {'event': event} if not admin_of_event(event, request.user): raise Http403('You are not allowed to edit this event.') if is_recruiter(event.owner): form_class = EventForm elif is_campus_org(event.owner): context['max_industries'] = s.EP_MAX_INDUSTRIES context['attending_employers'] = event.attending_employers form_class = CampusOrgEventForm if request.method == 'POST': form = form_class(request.POST, instance=event) if form.is_valid(): event = form.save(commit=False) event.edits.add(Edit.objects.create(user=request.user)) for employer in event.attending_employers.all(): event.previously_attending_employers.add(employer) event.save() form.save_m2m() # Update index event.save() notify_about_event(event, "new_event", [e for e in list(event.attending_employers.all()) if e not in list(event.previously_attending_employers.all())]) return HttpResponseRedirect(reverse('event_page', kwargs={'id':event.id, 'slug':event.slug})) else: form = form_class(instance=event) context['edit'] = True context['hours'] = map(lambda x,y: str(x) + y, [12] + range(1,13) + range(1,12), ['am']*12 + ['pm']*12) context['form'] = form context['today'] = datetime.now().strftime('%m/%d/%Y') if event.type.name == "Hard Deadline": context['event_scheduler_date'] = event.end_datetime.strftime('%m/%d/%Y') elif event.type.name == "Rolling Deadline": context['event_scheduler_date'] = datetime.now().strftime('%m/%d/%Y') else: context['event_scheduler_date'] = event.start_datetime.strftime('%m/%d/%Y') context.update(extra_context or {}) return context
def event_new(request, form_class=None, extra_context=None): context = {} if is_recruiter(request.user): employer = request.user.recruiter.employer form_class = EventForm elif is_campus_org(request.user): form_class = CampusOrgEventForm context['max_industries'] = s.EP_MAX_INDUSTRIES if request.method == 'POST': form = form_class(data=request.POST) if form.is_valid(): event = form.save(commit=False) event.owner = request.user event.save() form.save_m2m() if event.type.name == "Rolling Deadline": event.start_datetime = datetime.now() - timedelta(weeks=1) event.end_datetime = datetime.now() + timedelta(weeks=1000) event.save() elif event.type.name == "Hard Deadline": event.start_datetime = event.end_datetime event.save() if is_recruiter(request.user): event.attending_employers.add(employer) # Update index employer.save() notify_about_event(event, "new_event", event.attending_employers.all()) # Update index event.save() return HttpResponseRedirect(reverse('event_page', kwargs={'id':event.id, 'slug':event.slug})) else: form = form_class(initial={ 'start_datetime': datetime.now() + timedelta(minutes=30), 'end_datetime': datetime.now() + timedelta(hours=1, minutes=30), }) context['hours'] = map(lambda x,y: str(x) + y, [12] + range(1,13) + range(1,12), ['am']*12 + ['pm']*12) context['form'] = form context['today'] = datetime.now().strftime('%m/%d/%Y') context['event_scheduler_date'] = datetime.now().strftime('%m/%d/%Y') context.update(extra_context or {}) return context
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_cancelled_events_sqs(user): events = get_user_events_sqs(user).filter(cancelled=True).order_by("-end_datetime") if is_recruiter(user) or is_campus_org(user): events = events.filter(archived=False) return events
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 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
from core.decorators import render_to from core.file_utils import find_first_file from core.management.commands.zip_resumes import zip_resumes from core.models import Edit from core.view_helpers import english_join from employer.decorators import is_recruiter from employer.models import Recruiter from events.forms import EventForm, CampusOrgEventForm, EventExportForm, EventFilteringForm, EventUploadRecruitersForm from events.models import Attendee, Event, Invitee, RSVP, DroppedResume, notify_about_event from events.view_helpers import event_map, event_filtering_helper, get_event_schedule, get_attendees, get_invitees, get_rsvps, get_no_rsvps, get_dropped_resumes, export_event_list_csv, export_event_list_text from notification import models as notification from student.decorators import is_student from student.models import Student @user_passes_test(lambda x: is_recruiter(x) or is_campus_org(x)) def download_event_participant_resumes(request, event_id, extra_context=None): event = Event.objects.get(id=event_id) event_participant_resumes_directory_name = "%s (%d) All Participants" % (event.name, event.id) event_resumes_dir = "%sevent_resumes/" % (s.ZIPPED_RESUMES_DIRECTORY) if not os.path.exists(event_resumes_dir): os.makedirs(event_resumes_dir) file_path = find_first_file(event_resumes_dir, "%s.*.zip" % re.escape(event_participant_resumes_directory_name)) if file_path: mimetype = "application/zip" response = HttpResponse(file(file_path, "rb").read(), mimetype=mimetype) filename = file_path.split("/")[-1] response["Content-Disposition"] = 'attachment; filename="%s.zip"' % filename return response else: zip_resumes()
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 event_checkin(request, event_id): event = Event.objects.get(pk=event_id) if request.method == 'GET': return HttpResponse(simplejson.dumps(get_attendees(event)), mimetype="application/json") else: email = request.POST.get('email', None).strip() if not is_valid_email(email): data = { 'valid': False, 'error': 'Please enter a valid .edu email!' } return HttpResponse(simplejson.dumps(data), mimetype="application/json") name = request.POST.get('name', None) student = None user = None if User.objects.filter(email=email).exists(): user = User.objects.get(email=email) if hasattr(user, 'student'): student = user.student if not name and not student: data = { 'valid': False, 'error': "This email isn't registered with Umeqo. Please enter your name!" } return HttpResponse(simplejson.dumps(data), mimetype="application/json") if Attendee.objects.filter(event=event, email=email).exists(): data = { 'valid': False, 'error': 'You\'ve already checked in!' } return HttpResponse(simplejson.dumps(data), mimetype="application/json") if not name and user and user.student and user.student.first_name and user.student.last_name: name = "%s %s" % (user.student.first_name, user.student.last_name) attendee = Attendee(email=email, name=name, student=student, event=event) try: attendee.save() except IntegrityError: data = { 'valid': False, 'error': 'Duplicate checkin!' } return HttpResponse(simplejson.dumps(data), mimetype="application/json") if not student or student and not student.profile_created: if not student: txt_email_body_template = 'checkin_follow_up_email_body.txt' html_email_body_template = 'checkin_follow_up_email_body.html' if student and not student.profile_created: txt_email_body_template = 'checkin_follow_up_profile_email_body.txt' html_email_body_template = 'checkin_follow_up_profile_email_body.html' first_name = None if name: first_name = name.split(" ")[0] context = Context({'first_name':first_name, 'event':event, 'campus_org_event': is_campus_org(event.owner)}) context.update(get_basic_email_context()) subject = ''.join(render_to_string('email_subject.txt', { 'message': "Event Check-In Follow-up" }, context).splitlines()) recipients = [email] txt_email_body = render_to_string(txt_email_body_template, context) html_email_body = render_to_string(html_email_body_template, context) send_email(subject, txt_email_body, recipients, html_email_body) output = { 'valid': True, 'email': email } if student and student.first_name and student.last_name: output['name'] = student.first_name + ' ' + student.last_name else: output['name'] = name return HttpResponse(simplejson.dumps(output), mimetype="application/json")
def admin_of_event(event, user): if is_recruiter(event.owner): return is_recruiter(user) and user.recruiter.employer == event.owner.recruiter.employer elif is_campus_org(event.owner): return is_campus_org(user) and user.campusorg == event.owner.campusorg return False
from core.decorators import render_to from core.file_utils import find_first_file from core.management.commands.zip_resumes import zip_resumes from core.models import Edit from core.view_helpers import english_join from employer.decorators import is_recruiter from employer.models import Recruiter from events.forms import EventForm, CampusOrgEventForm, EventExportForm, EventFilteringForm, EventUploadRecruitersForm from events.models import Attendee, Event, Invitee, RSVP, DroppedResume, notify_about_event from events.view_helpers import event_map, event_filtering_helper, get_event_schedule, get_attendees, get_invitees, get_rsvps, get_no_rsvps, get_dropped_resumes, export_event_list_csv, export_event_list_text from notification import models as notification from student.decorators import is_student from student.models import Student @user_passes_test(lambda x: is_recruiter(x) or is_campus_org(x)) def download_event_participant_resumes(request, event_id, extra_context=None): event = Event.objects.get(id=event_id) event_participant_resumes_directory_name = "%s (%d) All Participants" % ( event.name, event.id) event_resumes_dir = "%sevent_resumes/" % (s.ZIPPED_RESUMES_DIRECTORY) if not os.path.exists(event_resumes_dir): os.makedirs(event_resumes_dir) file_path = find_first_file( event_resumes_dir, "%s.*.zip" % re.escape(event_participant_resumes_directory_name)) if file_path: mimetype = "application/zip" response = HttpResponse(file(file_path, "rb").read(), mimetype=mimetype) filename = file_path.split("/")[-1]
def get_past_events_sqs(user): events = get_user_events_sqs(user).filter(end_datetime__lt=datetime.now()).order_by("-end_datetime") if is_recruiter(user) or is_campus_org(user): events = events.filter(archived=False) return events
def get_upcoming_events_sqs(user): events = get_user_events_sqs(user).filter(end_datetime__gte=datetime.now()) # TODO - figure out why this is here if is_campus_org(user) or is_recruiter(user): events = events.filter(archived=False) return events
def event_checkin(request, event_id): event = Event.objects.get(pk=event_id) if request.method == 'GET': return HttpResponse(simplejson.dumps(get_attendees(event)), mimetype="application/json") else: email = request.POST.get('email', None).strip() if not is_valid_email(email): data = { 'valid': False, 'error': 'Please enter a valid .edu email!' } return HttpResponse(simplejson.dumps(data), mimetype="application/json") name = request.POST.get('name', None) student = None user = None if User.objects.filter(email=email).exists(): user = User.objects.get(email=email) if hasattr(user, 'student'): student = user.student if not name and not student: data = { 'valid': False, 'error': "This email isn't registered with Umeqo. Please enter your name!" } return HttpResponse(simplejson.dumps(data), mimetype="application/json") if Attendee.objects.filter(event=event, email=email).exists(): data = {'valid': False, 'error': 'You\'ve already checked in!'} return HttpResponse(simplejson.dumps(data), mimetype="application/json") if not name and user and user.student and user.student.first_name and user.student.last_name: name = "%s %s" % (user.student.first_name, user.student.last_name) attendee = Attendee(email=email, name=name, student=student, event=event) try: attendee.save() except IntegrityError: data = {'valid': False, 'error': 'Duplicate checkin!'} return HttpResponse(simplejson.dumps(data), mimetype="application/json") if not student or student and not student.profile_created: if not student: txt_email_body_template = 'checkin_follow_up_email_body.txt' html_email_body_template = 'checkin_follow_up_email_body.html' if student and not student.profile_created: txt_email_body_template = 'checkin_follow_up_profile_email_body.txt' html_email_body_template = 'checkin_follow_up_profile_email_body.html' first_name = None if name: first_name = name.split(" ")[0] context = Context({ 'first_name': first_name, 'event': event, 'campus_org_event': is_campus_org(event.owner) }) context.update(get_basic_email_context()) subject = ''.join( render_to_string('email_subject.txt', { 'message': "Event Check-In Follow-up" }, context).splitlines()) recipients = [email] txt_email_body = render_to_string(txt_email_body_template, context) html_email_body = render_to_string(html_email_body_template, context) send_email(subject, txt_email_body, recipients, html_email_body) output = {'valid': True, 'email': email} if student and student.first_name and student.last_name: output['name'] = student.first_name + ' ' + student.last_name else: output['name'] = name return HttpResponse(simplejson.dumps(output), mimetype="application/json")