Exemplo n.º 1
0
def save(request):
    userprofile = UserProfile.get_for_user(request.user)
    if not userprofile:
        raise PermissionDenied
    if request.POST:
        form = SavedSearchForm(request.POST)
        if form.is_valid():
            saved_search = form.save(commit=False)
            saved_search.slug = unique_slug(form.cleaned_data['name'])
            saved_search.owner = userprofile
            saved_search.save()
            form.save_m2m()
            return HttpResponseRedirect(reverse('browse-offers'))
    else:
        initial = {}
        if request.GET.get('donor'):
            initial['donor'] = get_object_or_404(UserProfile, user__username=request.GET['donor'])
        if request.GET.get('max_distance'):
            initial['max_distance'] = request.GET['max_distance']
        if request.GET.get('watched_users'):
            initial['watched_users'] = request.GET['watched_users']
        try:
            longitude, latitude = (float(request.GET['longitude']),
                                   float(request.GET['latitude']))
            initial['location'] = Point(longitude, latitude)
        except (KeyError, TypeError, ValueError):
            pass
        form = SavedSearchForm(initial=initial)

    return render_to_response_context(request,
                                      "saved/save_search.html", 
                                      {'form': form});
Exemplo n.º 2
0
def view_profile(request, user_id):
    userprofile = UserProfile.get_for_user(request.user) 
    donor = get_object_or_404(UserProfile, id=user_id)
    offers = donor.localoffer_set.filter_by_user(userprofile)
    return render_to_response_context(request,
                                      'userprofile/userprofile.html',
                                      {'donor':donor, 'offers':offers})
Exemplo n.º 3
0
def user_offers(request, username):
    donor = get_object_or_404(UserProfile, user__username=username)
    userprofile = UserProfile.get_for_user(request.user)
    offers = LocalOffer.objects.filter(donor=donor, taken=False).filter_by_user(userprofile)
    live_offers = LocalOffer.objects.filter(donor=donor, taken=False, live_status=True)
    unavailable_offers_count = live_offers.count() - offers.count()
    return render_to_response_context(request,
                                      'offers/user_offers.html',
                                      {'offers': offers,
                                       'unavailable_offers_count': unavailable_offers_count,
                                       'donor': donor})
Exemplo n.º 4
0
def index(request):
    userprofile = UserProfile.get_for_user(request.user)
    offers = LocalOffer.objects.filter_by_user(userprofile)
    if userprofile and userprofile.location:
        offers = offers.distance(userprofile.location)
    paginator = Paginator(offers, OFFERS_PER_PAGE)
    page = request.GET.get("page", 1)
    try:
        page = paginator.page(request.GET.get("page", 1))
    except EmptyPage:
        page = paginator.page(paginator.num_pages)
    except PageNotAnInteger:
        page = paginator.page(1)
    return render_to_response_context(request, "index.html", {"page": page})
Exemplo n.º 5
0
def list_offers(request):
    """
    Sorta the same as browse_offers, but for direct linking rather than
    filtering via a form
    """
    userprofile = UserProfile.get_for_user(request.user)
    if userprofile and userprofile.location:
        lng, lat = userprofile.location.coords
    else:
        lng, lat = None, None

    form = OfferListForm(request.REQUEST)

    if form.is_valid():
        latitude = form.cleaned_data['latitude']
        longitude = form.cleaned_data['longitude']
        if None in (latitude, longitude):
            latitude, longitude = lat, lng
        offers = LocalOffer.objects.all().filter_by(
            donorprofile=form.cleaned_data['donorprofile'],
            watched_users=form.cleaned_data['watched_users'],
            latitude=latitude,
            longitude=longitude,
            asking_userprofile=userprofile,
            tags=form.cleaned_data['tags'],
            max_distance=form.cleaned_data['max_distance'])
        paginator = Paginator(offers, OFFERS_PER_PAGE)
        page = request.GET.get('page', 1)
        try:
            page = paginator.page(request.GET.get('page', 1))
        except EmptyPage:
            page = paginator.page(paginator.num_pages)
        except PageNotAnInteger:
            page = paginator.page(1)

        c = RequestContext(request, {'page': page})
        if request.is_ajax():
            t = get_template('offers/list_offers_nochrome.html')
            return JsonResponse({'html': t.render(c)})
        else:
            t = get_template('offers/list_offers.html')
            return HttpResponse(t.render(c))
    else:
        # TODO
        print form.errors
        for e in form.errors:
            print e
        return HttpResponse("invalid")
Exemplo n.º 6
0
def mark_taken(request, offer):
    userprofile = UserProfile.get_for_user(request.user)
    offer_messages = offer.emailmessage_set.filter(message_type='offer').order_by('datetime_sent')

    if offer_messages:
        messages = filter_unique_subscription(offer_messages)
        if request.POST:
            formset = EmailTakenToListFormset(request.POST)
            if formset.is_valid():
                msgs = []
                for data in formset.cleaned_data:
                    if not data['send_email']:
                        continue
                    if data['subscription'] not in userprofile.subscription_set.all():
                        raise PermissionDenied
                    msg = EmailMessage(
                        subscription=data['subscription'],
                        offer=offer,
                        message_type='taken',
                        subject=data['subject'],
                        body=data['body'],
                    )
                    msg.save()
                    msgs.append(msg)
                for msg in msgs:
                    msg.send_mail()
                offer.taken = True
                offer.save()
                return HttpResponseRedirect(reverse('my-offers'))
        else:
            initial = [{'subscription': m.subscription,
                        'subject': takenify_subject(m.subject),
                        'body': quote_email(m.body)} for m in messages]
            formset = EmailTakenToListFormset(initial=initial)

        c = {'offer': offer,
             'formset': formset}
        return render_to_response_context(request, 'offers/email_taken_to_list.html', c)
    else:
        confirmation = request.GET.get('confirm')
        if confirmation == 'yes':
            offer.taken = True
            offer.save()
            return HttpResponseRedirect(reverse('my-offers'))
        elif confirmation == 'no':
            return HttpResponseRedirect(reverse('my-offers'))
        else:
            return render_to_response_context(request, 'offers/confirm_mark_taken.html')
Exemplo n.º 7
0
def view_offer(request, offer_hash):
    userprofile = UserProfile.get_for_user(request.user)

    if userprofile:
        if userprofile.location:
            qs = LocalOffer.objects.distance(userprofile.location)
        else:
            qs = LocalOffer.objects.all()
    else:
        qs = LocalOffer.objects.all()

    offer = get_object_or_404(qs, hash=offer_hash)
    permitted = offer.show_to_user(userprofile)
    return render_to_response_context(request,
                                      'offers/offer.html',
                                      {'offer': offer,
                                       permitted: permitted,})
Exemplo n.º 8
0
 def render(self, context):
     userprofile = UserProfile.get_for_user(context['user'])
     if context['offer'].show_to_user(userprofile):
         return self.nodelist_true.render(context)
     else:
         return self.nodelist_false.render(context)