Esempio n. 1
0
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
        ]
Esempio n. 2
0
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)
Esempio n. 3
0
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.")
Esempio n. 4
0
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) )
Esempio n. 5
0
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))
Esempio n. 6
0
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)
Esempio n. 7
0
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]
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
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
Esempio n. 11
0
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))
Esempio n. 12
0
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))
Esempio n. 13
0
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.")
Esempio n. 14
0
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
Esempio n. 15
0
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))
Esempio n. 16
0
            )

            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

Esempio n. 17
0
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
Esempio n. 18
0
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)
Esempio n. 19
0
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
Esempio n. 20
0
            }, 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

Esempio n. 21
0
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