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});
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})
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})
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})
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")
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')
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,})
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)