Exemplo n.º 1
0
def browse_offers(request):
    """
    """
    if request.user.is_authenticated():
        userprofile = request.user.get_profile()
    else:
        userprofile = None

    if request.method == 'POST' or request.GET.get('page'):
        if request.is_ajax():
            return list_offers(request)

        offers, form = get_offers(request.REQUEST, {'asking_userprofile':userprofile})
        if form.errors:
            if request.is_ajax():
                return JsonResponse({'errors': form.errors})
            else:
                return render_to_response_context(
                    request,
                    'offers/browse_offers.html',
                    {'form': form,
                     'offers': []})
    else:
        if userprofile and userprofile.location:
            lng, lat = userprofile.location.coords
            location_source = 'userprofile'
        else:
            g = GeoIP()
            ip = request.META.get('REMOTE_ADDR')
            lat, lng = 52.63639666, 1.29432678223
            location_source = 'none'
            if ip:
                latlon = g.lat_lon(ip)
                if latlon:
                    lat, lng = latlon
                    location_source = 'ip'
        form = OfferBrowseForm(initial={'max_distance': 25,
                                        'latitude': lat,
                                        'longitude': lng,
                                        'location_source': location_source})
        offers = []

    paginator = Paginator(offers, OFFERS_PER_PAGE)
    page = paginator.page(request.GET.get('page', 1))
    saved_filters = SavedFilter.objects.filter(owner=userprofile)
    return render_to_response_context(request,
                                      'offers/browse_offers.html',
                                      {'form': form,
                                       'page': page,
                                       'saved_filters':saved_filters})
Exemplo n.º 2
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.º 3
0
def index(request):
    userprofile = request.user.get_profile()
    notifications = request.user.get_profile().notification_set.all()
    notifications.filter(read=False).update(read=True)
    return render_to_response_context(request,
                                          'notifications/index.html',
                                          {'notifications': notifications})
Exemplo n.º 4
0
def add_image(request, offer=None):

    if request.POST:
        form = LocalImageForm(request.POST, request.FILES)
        if form.is_valid():
            upload_to = LocalOfferImage._meta.get_field_by_name('image')[0].upload_to
            uploaded_file = request.FILES['image']
            filename = md5(str(time.time()) + uploaded_file.name).hexdigest() + '.jpg'
            im = Image.open(uploaded_file)
            width, height = im.size
            if width > 500 or height > 500:
                if width > height:
                    new_width = 500
                    new_height = height * float(500) / width
                else:
                    new_height = 500
                    new_width = width * float(500) / height
                im.thumbnail((int(new_width), int(new_height)), Image.ANTIALIAS)
            im.save(os.path.join(settings.MEDIA_ROOT, upload_to, filename),
                    options={'quality': 35})

            offer_image = LocalOfferImage.objects.create(
                image=os.path.join(upload_to, filename),
                caption=form.cleaned_data['caption'],
                offer=offer)
            return HttpResponse(json.dumps({'id': offer_image.id,
                                            'url': offer_image.image.url,
                                            'caption': offer_image.caption}))
    else:
        form = LocalImageForm()
    return render_to_response_context(request,
                                      'offers/images/add_image.html',
                                      {'form': form, 'form_url': request.path})
Exemplo n.º 5
0
def offer_contact(request, offer_hash):
    offer = get_object_or_404(LocalOffer, hash=offer_hash)
    if request.POST:
        form = OfferContactForm(request.POST)
        if form.is_valid():
            sender = request.user.get_profile()
            c = RequestContext(request,
                               {'domain': settings.SITE_DOMAIN,
                                'sender': sender,
                                'offer': offer,
                                'message': form.cleaned_data['message']})
            html_message = html_tpl.render(c)
            text_message = text_tpl.render(c)
            Notification.objects.create(to_user=offer.donor,
                                        message=html_message)
            if offer.donor.email_contact:
                msg = EmailMultiAlternatives('FreeShop: enquiry about "%s"' % offer.title,
                                             text_message,
                                             sender.user.email,
                                             [offer.donor.user.email])
                msg.attach_alternative(html_message, "text/html")
                msg.send()

            return HttpResponseRedirect(reverse('offer-contact-sent'))
    else:
        form = OfferContactForm()

    return render_to_response_context(request,
                                      'offers/contact_form.html',
                                      {'offer_contact_form': form})
Exemplo n.º 6
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.º 7
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.º 8
0
def delete_user(request, id):
    userprofile = get_object_or_404(UserProfile, id=id)
    name = userprofile.name
    if request.GET.get('confirm'):
        userprofile.skill_set.all().delete()
        userprofile.user.delete()
        userprofile.delete()
        request.user.message_set.create(message="User '%s' was deleted." % (name,))
        return HttpResponseRedirect("/user/manage/")
    return render_to_response_context(request, 'userprofile/manage/confirm_delete.html', {'userprofile':userprofile})
Exemplo n.º 9
0
def change_password(request):
    if request.POST:
        form = PasswordChangeForm(request.user, request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/user/password-changed/')
    else:
        form = PasswordChangeForm(request.user)

    return render_to_response_context(request, 'userprofile/change_password.html', {'form':form})
Exemplo n.º 10
0
def login(request):
    raise NotImplementedError
    if request.POST:
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            django_login(request, form.get_user())
            return HttpResponseRedirect('/')
    else:
        form = AuthenticationForm(request)

    return render_to_response_context(request, 'userprofile/login.html', {'form':form})
Exemplo n.º 11
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.º 12
0
def delete_offer(request, offer):
    """
    Delete a user's offer
    """
    if request.GET.get('confirm') == 'yes':
        offer.delete()
        request.user.message_set.create(message="An offer was deleted.")
        return HttpResponseRedirect(reverse('my-offers'))
    elif request.GET.get('confirm') == 'no':
        request.user.message_set.create(message="Deletion of offer cancelled.")
        return HttpResponseRedirect(reverse('my-offers'))
    else:
        return render_to_response_context(request, 'offers/confirm_delete_offer.html')
Exemplo n.º 13
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.º 14
0
def edit(request):
    userprofile = request.user.get_profile()
    if request.method == 'POST':
        form = UserProfileForm(instance=userprofile, data=request.POST)
        if form.is_valid():
            form.save()
            request.user.email = form.cleaned_data['email']
            request.user.save()
            return HttpResponseRedirect("/user/updated/")
    else:
        initial = {'email':userprofile.user.email}
        if request.facebook.uid is not None and not userprofile.name:
            initial['name'] = request.facebook.graph.get_object('me')['name']
        form = UserProfileForm(instance=userprofile, initial=initial)

    return render_to_response_context(request, 'userprofile/edit.html', {'userprofile_form':form,})
Exemplo n.º 15
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.º 16
0
def add_subscription(request):
    userprofile = request.user.get_profile()

    if request.POST:
        form = AddEmailListForm(request.POST, userprofile=userprofile)
        if form.is_valid():
            subscription = Subscription.objects.create(
                userprofile = request.user.get_profile(),
                email_list = form.cleaned_data['email_list'],
                from_email = form.cleaned_data['from_email']
            )
            return HttpResponseRedirect(reverse('my-offers'))
    else:
        form = AddEmailListForm(initial={'from_email': request.user.email},
                                userprofile=userprofile)

    c = {'form':form}
    return render_to_response_context(request, 'email_lists/add_email_list.html', c)
Exemplo n.º 17
0
def edit_user(request, id=None):
    if id:
        action = "edit"
        userprofile = get_object_or_404(UserProfile, id=id)
        user = userprofile.user
        initial = { 'username':user.username,
                    'name':userprofile.name,
                    'password':"",
                    'email':user.email,
                    'phone_number':userprofile.phone_number,
                    'info':userprofile.info,
                    'is_staff':user.is_staff,
                  }
    else:
        action = "add"
        userprofile = None
        initial = None
    if request.POST:
        form = UserForm(request.POST, instance=userprofile)
        if form.is_valid():
            if userprofile:
                user = userprofile.user
            else:
                userprofile = UserProfile()
                user = User()
                userprofile.user = user
                
            userprofile.user.username = form.cleaned_data['username']
            userprofile.name = form.cleaned_data['name']
            userprofile.user.email = form.cleaned_data['email']
            userprofile.phone_number = form.cleaned_data['phone_number']
            userprofile.info = form.cleaned_data['info']
            userprofile.user.is_staff = form.cleaned_data['is_staff']
            if form.cleaned_data['password']:
                userprofile.user.set_password(form.cleaned_data['password'])
            user.save()
            userprofile.user = user
            userprofile.save()
            request.user.message_set.create(message="User '%s' was %sed." % (userprofile.name, action))
            return HttpResponseRedirect("/user/manage/")
    else:
        form = UserForm(initial=initial, instance=userprofile)
    return render_to_response_context(request, 'userprofile/manage/edit.html', {'form':form, 'action':action})
Exemplo n.º 18
0
def email_offer_to_list(request, offer, subscription_id=None):
    userprofile = request.user.get_profile()
    if request.POST:
        form = EmailOfferToListForm(request.POST, userprofile=userprofile)
        if form.is_valid():
            msg = EmailMessage(
                subscription=form.cleaned_data['subscription'],
                offer=offer,
                message_type='offer',
                subject=form.cleaned_data['subject'],
                body=form.cleaned_data['message'],
            )
            msg.save()
            msg.send_mail()
            return HttpResponseRedirect(reverse('my-offers'))
    else:
        initial = {}
        subscriptions = userprofile.subscription_set.all()
        if subscriptions.count() == 0:
            return HttpResponseRedirect(reverse('add-subscription'))

        subscription = userprofile.subscription_set.all()[0]
        template_name = 'email_lists/messages/%s/offer.html' % (
                         slugify(subscription.email_list.name))
        initial['subscription'] = subscription
        mail_template = get_template(template_name)
        c = Context({'offer': offer, 'userprofile':userprofile})
        m = mail_template.render(c)
        subject, message = m.split('\n', 1)
        initial = {'subscription': subscription,
                   'subject': subject,
                   'message': message}
        form = EmailOfferToListForm(userprofile=request.user.get_profile(),
                                    initial=initial)
    c = {'offer': offer,
         'form': form}
    return render_to_response_context(request, 'offers/email_offer_to_list.html', c)
Exemplo n.º 19
0
def edit_offer(request, offer=None):
    """
    Edit or create a user's offer
    """
    userprofile = request.user.get_profile()
    if request.method == 'POST':
        form = OfferForm(request.POST, instance=offer)
        if form.is_valid():
            offer = OfferForm.save(form, commit=False)
            offer.donor = userprofile
            offer.save()
            form.save_m2m()
            for im in form.cleaned_data['image_list']:
                im.offer = offer
                im.save()
            action = offer and 'edited' or 'created'
            message = "A offer was successfully %s." % action
            request.user.message_set.create(message=message)
            return HttpResponseRedirect(reverse('my-offers'))
    else:
        if offer is None:
            initial = {'location': userprofile.location}
            for action in 'list', 'show':
                for who in 'public', 'sharestuffers', 'watchers':
                    attr_name = 'offers_%s_%s' % (action, who)
                    initial['%s_%s' % (action, who)] = getattr(userprofile,
                                                               attr_name)

            form = OfferForm(initial=initial)
            initial['list_public'] = userprofile.offers_list_public
        else:
            form = OfferForm(instance=offer, initial={'image_list': ','.join([str(im.id) for im in offer.localofferimage_set.all()])})

    return render_to_response_context(request, 'offers/edit_offer.html', {'form': form,
                                                                          'offer': offer,
                                                                          'image_list': offer and offer.image_list or '[]'})
Exemplo n.º 20
0
def user_list(request):
    userprofiles = UserProfile.objects.all()
    return render_to_response_context(request,
                                      'userprofile/list_users.html',
                                      {'userprofiles':userprofiles})
Exemplo n.º 21
0
def my_offers(request):
    """
    Return a list of the user's offers
    """
    return render_to_response_context(request, 'offers/my_offers.html')
Exemplo n.º 22
0
def offer_contact_sent(request):
    return render_to_response_context(request,
                                      'offers/offer_contact_sent.html')
Exemplo n.º 23
0
def password_changed(request):
    return render_to_response_context(request, 'userprofile/password_changed.html')
Exemplo n.º 24
0
def updated(request):
    return render_to_response_context(request, 'userprofile/userprofile_updated.html')
Exemplo n.º 25
0
def index(request):
    userprofiles = UserProfile.objects.all()
    return render_to_response_context(request, 'userprofile/index.html', {'userprofiles':userprofiles})