Esempio n. 1
0
def view(request, thumbnail_id, template='campaign/photo/view.html'):
    try:
        photo_version = get_object_or_404(PhotoVersion, pk=thumbnail_id)
        campaign = photo_version.photo.content_object
        if not campaign.is_public:
            # Allow only campaign owner to see photos of unreleased campaign.
            if not (campaign.owner == request.user):
                raise Http404
        size = PhotoSize.objects.get_medium()
        photos = PhotoVersion.objects.get_for_object(campaign, size=size)
        paginator = Paginator(photos, 1, orphans=0) # Show one medium-sized photo per page
        page_num = request.REQUEST.get('page', 0)
        if not page_num:
            # Find the page on which this photo falls assuming there's one photo per page.
            page_num = 1 # default is page #1
            photo_values = photos.values('photo_id')
            for n, o in enumerate(photo_values):
                if o['photo_id'] == photo_version.photo.pk:
                    page_num = n + 1
                    break
        page = paginator.page(page_num)
        index_link = reverse('list_campaign_photos', kwargs={'campaign_id':campaign.pk})
        ctx = {'campaign':campaign,
               'page':page,
               'paginator':paginator,
               'is_owner':campaign.owner == request.user,
               'index_link':index_link}
        return render_view(request, template, ctx)
    except InvalidPage:
        raise Http404
Esempio n. 2
0
def edit(request, event_id, template='event/photo/edit_form.html'):
    """Edit photos associated with a event."""
    event = get_object_or_404(Event.visible_objects,
                              Q(artist__user_profile__user=request.user)
                              | Q(creator__user=request.user),
                              pk=event_id)
    photoset = Photo.objects.get_for_object(event)
    photo_dict = dict([(p.pk, p) for p in photoset])
    PhotoEditFormSet = modelformset_factory(
        Photo,
        form=PhotoEditForm,
        fields=PhotoEditForm._meta.fields,
        exclude=PhotoEditForm._meta.exclude,
        max_num=0,
        extra=0,
        can_delete=True)
    if request.POST:
        formset = PhotoEditFormSet(data=request.POST,
                                   files=request.FILES,
                                   queryset=photoset)
        if formset.is_valid():
            edited_photos = formset.save()
            _log.info(u'Photos updated for event: %s', event)
            request.user.message_set.create(message=_("Photos updated."))
            return HttpResponseRedirect(
                reverse('list_event_photos', kwargs={'event_id': event.pk}))
    else:
        formset = PhotoEditFormSet(queryset=photoset)
    ctx = {'event': event, 'formset': formset, 'photo_dict': photo_dict}
    return render_view(request, template, ctx)
Esempio n. 3
0
def view(request, campaign_id, template='campaign/detail.html'):
    """Campaign detail view"""
    ctx = {}
    campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id)
    ctx['is_owner'] = request.user.is_authenticated(
    ) and request.user.id == campaign.artist.user_profile.user.id
    ctx['is_admin'] = request.user.has_perm('campaign.can_manage_campaigns')
    # Campaign changes, if available, are shown only to the campaign owner and the admin.
    ctx['changes'] = (ctx['is_owner']
                      or ctx['is_admin']) and campaign.changed_version
    if not campaign.is_approved:
        # Only admins and campaign owners may see unapproved campaigns.
        if not request.user.is_authenticated():
            return HttpResponseRedirect("%s?next=%s" %
                                        (reverse('login'), request.path))
        if not (ctx['is_owner'] or ctx['is_admin']):
            # We could return an HTTP forbidden response here but we don't want a malicious user
            # to know if a campaign even exists with this id.
            # So, we raise a 404 - Page Not Found instead.
            raise Http404
    ctx['c'] = campaign
    ctx['campaign'] = campaign
    if request.user.is_authenticated():
        ctx['comment_form'] = CommentForm(author=request.user,
                                          target_instance=campaign)
    if not ctx['is_owner']:
        stats = campaign.stats
        stats.num_views = stats.num_views + 1
        stats.save()
    return render_view(request, template, ctx)
Esempio n. 4
0
def member_upload(request, event_id, template='event/photo/upload_form.html'):
    event = get_object_or_404(Event.objects.public().select_related('artist__user_profile__user'), pk=event_id)
    user = request.user
    if event.owner.pk == request.user.pk:
        return HttpResponseRedirect(reverse('upload_event_photo', kwargs={'event_id':event.pk}))
    # Ensure that this user can't upload more photos than the allowed limit.
    photo_count = Photo.objects.get_for_object(event, user=request.user).count()
    limit = settings.EVENT_MAX_PHOTOS_PER_MEMBER
    event_url = reverse('view_event', kwargs={'event_id':event.pk})
    photo_url = reverse('list_event_photos', kwargs={'event_id':event.pk})
    if photo_count >= limit:
        user.message_set.create(message=_("You can not upload more than %s photos to this event." % limit))
        return HttpResponseRedirect(reverse('view_event', kwargs={'event_id':event.pk}))
    if request.POST:
        form = forms.MemberPhotoForm(data=request.POST, files=request.FILES)
        if form.is_valid():
            if photo_count == limit:
                submit = 'Add'
            else:
                submit = request.POST.get('submit', 'Add')
            photo = form.save(content_object=event, display_order=9999999, user=request.user_profile)
            _log.info('Photo uploaded: (%s) %s', photo.pk, photo.title)
            special_mesg = _('''<a href="%s">New photos</a> have been added to one of <a href="%s">your shows.</a>''' % (photo_url, event_url))
            event.notify_attendees(special_mesg, exclude=[user.pk])
            if 'Another' in submit:
                user.message_set.create(message=_("%s Photo uploaded. You can add another photo below.") % photo.image_preview('square_thumbnail'))
                return HttpResponseRedirect(reverse('upload_event_photo_member', kwargs={'event_id':event.pk}))
            else:
                user.message_set.create(message=_("Photo uploaded."))
                return HttpResponseRedirect(reverse('view_event', kwargs={'event_id':event.pk}))
    else:
        form = forms.MemberPhotoForm()
    ctx = {'event':event, 'form':form, 'allow_another':photo_count < limit-1, 'member_mode':True}
    return render_view(request, template, ctx)
Esempio n. 5
0
def delete(request,
           campaign_id,
           template='campaign/campaign_deletion_form.html'):
    campaign = get_object_or_404(Campaign.visible_objects,
                                 pk=campaign_id,
                                 artist__user_profile__user=request.user)
    ctx = {'campaign': campaign, 'c': campaign}
    if request.method == 'POST':
        form = forms.DeleteCampaignForm(data=request.POST)
        if form.is_valid():
            if campaign.is_deletable:
                campaign.delete()
                request.user.message_set.create(
                    message=_('Your campaign has been deleted.'))
                return HttpResponseRedirect(reverse('artist_admin'))
            else:
                ActionItem.objects.q_admin_action(campaign, 'delete-campaign')
                request.user.message_set.create(message=_(
                    'Your campaign deletion request has been submitted. An administrator will review it shortly.'
                ))
                email_template('Campaign deletion requested by %s' %
                               request.user.username,
                               'campaign/email/request_deletion.txt',
                               {'campaign': campaign},
                               to_list=settings.CAMPAIGN_APPROVERS)
                _log.info('Campaign deletion requested: (%s) %s', campaign.pk,
                          campaign.short_title)
            return HttpResponseRedirect(
                reverse('view_campaign', kwargs={'campaign_id': campaign_id}))
    else:
        form = forms.DeleteCampaignForm()
    ctx['form'] = form
    return render_view(request, template, ctx)
Esempio n. 6
0
def request_tickets(request,
                    campaign_id,
                    template='campaign/request_tickets_form.html'):
    campaign = get_object_or_404(Campaign.visible_objects,
                                 pk=campaign_id,
                                 artist__user_profile__user=request.user,
                                 is_approved=True)
    if not campaign.are_tickets_available:
        request.user.message_set.create(
            message=_('Tickets are not available for this campaign.'))
        return HttpResponseRedirect(
            reverse('view_campaign', kwargs={'campaign_id': campaign.pk}))
    if request.POST:
        form = forms.RequestTicketsForm(instance=campaign, data=request.POST)
        if form.is_valid():
            form.save()
            request.user.message_set.create(message=_(
                "Your campaign ticket request has been sent to the admins. Your tickets will be mailed out shortly."
            ))
            _log.info('Campaign tickets requested: (%s) %s', campaign.pk,
                      campaign.short_title)
            return HttpResponseRedirect(
                reverse('view_campaign', kwargs={'campaign_id': campaign.pk}))
    else:
        form = forms.RequestTicketsForm(instance=campaign)
    ctx = {'form': form, 'campaign': campaign}
    return render_view(request, template, ctx)
Esempio n. 7
0
def qualify(request,
            campaign_id,
            template='campaign/campaign_qualification_form.html'):
    ticket_code = request.session.get('open_ticket_code', None)
    campaign = get_object_or_404(Campaign.objects.public(), pk=campaign_id)
    qualifies, reasons = campaign.is_user_qualified(request.user)
    if qualifies and ticket_code:
        return HttpResponseRedirect(reverse('redeem_ticket'))
    else:
        _log.debug("Qualification needed: %s", reasons)
    if request.POST:
        form = forms.QualificationForm(data=request.POST,
                                       campaign=campaign,
                                       user_profile=request.user.get_profile())
        if form.is_valid():
            user_profile = form.save(commit=True)
            request.user.message_set.create(
                message=_('Your profile has been updated.'))
            if ticket_code:
                return HttpResponseRedirect(reverse('redeem_ticket'))
            else:
                return HttpResponseRedirect(
                    reverse('view_campaign',
                            kwargs={'campaign_id': campaign_id}))
    else:
        form = forms.QualificationForm(campaign=campaign,
                                       user_profile=request.user.get_profile())
    ctx = {'campaign': campaign, 'c': campaign, 'form': form}
    return render_view(request, template, ctx)
Esempio n. 8
0
def list_attendees(request, event_id, template='event/attendees.html'):
    ctx = {}
    event = get_object_or_404(Event.visible_objects, pk=event_id)
    attendees = UserProfile.objects.select_related('user').filter(user__attendee__event__pk=event.pk).order_by("user__username")
    page = paginate(request, attendees, 100) # Show 100 attendees per page.
    ctx.update({'event':event, 'page':page})
    return render_view(request, template, ctx)
Esempio n. 9
0
def old_homepage(request, template='website/homepage.html'):
    ctx = {}
    # Merge event and campaign badges by their homepage worthiness date.
    key = u'ir-top3-boxes'
    if request.user.is_authenticated() and request.user.is_staff:
        # No caching for staff users
        top3_objects = None
    else:
        top3_objects = cache.get(key, None)
    if top3_objects is None:
        cx = list(
            Campaign.objects.active(
                is_homepage_worthy=True).order_by('-homepage_worthy_on')[:15])
        ex = list(
            Event.objects.active(
                is_homepage_worthy=True).order_by('-homepage_worthy_on')[:15])
        mx = ex + cx
        mx.sort(key=lambda x: x.homepage_worthy_on, reverse=True)
        top3_objects = mx[:3]
        cache.set(key, top3_objects,
                  int(settings.UI_SETTINGS['UI_CACHE_TIMEOUT']))
    ctx['top3'] = top3_objects

    # Save top3 object ids so we can exclude them from the mixed feed later
    top3_campaigns = []
    top3_events = []
    for o in top3_objects:
        if hasattr(o, 'venue'):
            top3_events.append(o.pk)
        else:
            top3_campaigns.append(o.pk)

    # Merge 10 event and campaign objects.
    key = u'ir-hp-mixedfeed'
    if request.user.is_authenticated() and request.user.is_staff:
        # No caching for staff users
        mixed_feed = None
    else:
        mixed_feed = cache.get(key, None)
    if mixed_feed is None:
        # Exclude campaigns and events already shown in `top3` above
        c2x = list(Campaign.objects.active().exclude(
            pk__in=top3_campaigns).order_by('end_date')[:25])
        e2x = list(Event.objects.active().exclude(
            pk__in=top3_events).order_by('event_date')[:25])
        m2x = e2x + c2x
        m2x.sort(key=lambda x: x.sort_date, reverse=False)
        mixed_feed = m2x[:10]
        cache.set(key, mixed_feed,
                  int(settings.UI_SETTINGS['UI_CACHE_TIMEOUT']))
    ctx['mixed_feed'] = mixed_feed

    size = PhotoSize.objects.get_thumbnail(cropped=True)
    photos = PhotoVersion.objects.select_related('photo').filter(
        size=size).order_by("-updated_on")[:16]
    ctx['photos'] = photos

    if request.user.is_authenticated():
        ctx['special_messages'] = get_and_delete_messages(request.user, 1)
    return render_view(request, template, ctx)
Esempio n. 10
0
def list_contributors(request, campaign_id, template='campaign/contributors.html'):
    ctx = {}
    campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id, artist__user_profile__user=request.user, is_approved=True)
    contribs = list(campaign.contribution_set.all().order_by("contributor__username"))
    tickets = list(campaign.ticket_set.filter(is_redeemed=True).order_by("redeemed_by__username"))
    contributions = contribs + tickets
    if request.REQUEST.get('format', 'html') == 'csv':
        content_type = "text/csv; charset=%s" % settings.DEFAULT_CHARSET
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename=campaign_%s_contributors.csv' % campaign.pk
        writer = csv.writer(response)
        r = writer.writerow
        r(['Campaign contributors'])
        r(['Campaign #%s' % campaign.pk, smart_str(campaign.title)])
        headers = ['User', 'First name', 'Last name'] #, 'Email']
        if campaign.is_free:
            headers.append('Joined on')
            def amount_fn(row, contribution):
                row.append(contribution.paid_on)
        else:
            headers.extend(['Type', 'Amount', 'Qty', 'Paid on'])
            def amount_fn(row, contribution):
                row.extend([contribution.contrib_type, contribution.amount, contribution.qty, contribution.paid_on])
        if campaign.phone_required:
            headers.append('Phone')
            def phone_fn(row, contribution):
                row.append(contribution.contributor.get_profile().phone)
        else:
            def phone_fn(row, contribution):
                pass
        if campaign.address_required:
            headers.extend(['Address', 'Address 2', 'City', 'State Zip'])
            def address_fn(row, contribution):
                try:
                    adr = contribution.contributor.get_profile().address
                    row.extend([
                        smart_str(adr.address1),
                        adr.address2 and smart_str(adr.address2) or '',
                        adr.city,
                        adr.state + ' ' + adr.postal_code
                    ])
                except ObjectDoesNotExist:
                    row.extend(['', '', '', ''])
        else:
            def address_fn(row, contribution):
                pass
        r(headers)
        for c in contributions:
            u = c.contributor
            username = (u.is_active and u.username != 'anonymous') and u.username or ''
            row = [username, u.first_name, u.last_name] #, u.email]
            amount_fn(row, c)
            phone_fn(row, c)
            address_fn(row, c)
            r(row)
        return response
    else:
        page = paginate(request, contributions, 100) # Show 100 contributors per page.
        ctx.update({'campaign':campaign, 'page':page})
        return render_view(request, template, ctx)
Esempio n. 11
0
def recommended_events(request, limit=10, template='event/tags/recommended_events.html'):
    """Render event calendar for the logged in user"""
    try:
        ctx = {}
        if not request.user.is_authenticated:
            if request.is_ajax():
                raise Http404
            return HttpResponseRedirect("%s?next=%s" % (reverse("login"), reverse("event_recommended")))
        events = Event.objects.active().filter(
            recommendedevent__user_profile=request.user_profile
        ).distinct().order_by('event_date', 'event_start_time', 'pk')
        if settings.RECOMMENDED_EVENTS_FILTER_BY_LOCATION:
            events = events.filter(location__in=('destination', request.location))
        n = events.count()
        if not n:
            # fallback to user-entered events
            events = events.filter(location__in=('user-entered', request.location))
            n = events.count()
        else:
            ctx['city'] = request.location_name
        ctx['recommended_count'] = n
        if limit:
            events = events[:int(limit)]
        ctx['events'] = events
        return render_view(request, template, ctx)
    except Exception, e:
        _log.exception(e)
        raise
Esempio n. 12
0
def edit(request, event_id, template='event/photo/edit_form.html'):
    """Edit photos associated with a event."""
    event = get_object_or_404(Event.visible_objects,
            Q(artist__user_profile__user=request.user) |
            Q(creator__user=request.user),
            pk=event_id)
    photoset = Photo.objects.get_for_object(event)
    photo_dict = dict([(p.pk, p) for p in photoset])
    PhotoEditFormSet = modelformset_factory(Photo,
                                            form=PhotoEditForm,
                                            fields=PhotoEditForm._meta.fields,
                                            exclude=PhotoEditForm._meta.exclude,
                                            max_num=0,
                                            extra=0,
                                            can_delete=True)
    if request.POST:
        formset = PhotoEditFormSet(data=request.POST, files=request.FILES, queryset=photoset)
        if formset.is_valid():
            edited_photos = formset.save()
            _log.info(u'Photos updated for event: %s', event)
            request.user.message_set.create(message=_("Photos updated."))
            return HttpResponseRedirect(reverse('list_event_photos', kwargs={'event_id':event.pk}))
    else:
        formset = PhotoEditFormSet(queryset=photoset)
    ctx = {'event':event, 'formset':formset, 'photo_dict':photo_dict}
    return render_view(request, template, ctx)
Esempio n. 13
0
def message_contributors(request,
                         campaign_id,
                         form_class=messageforms.ComposeForm,
                         template_name='messages/compose.html',
                         success_url=None):
    """Send a message to all contributors of the given campaign."""
    campaign = get_object_or_404(Campaign.visible_objects,
                                 pk=campaign_id,
                                 artist__user_profile__user=request.user,
                                 is_approved=True)
    form = form_class()
    if request.method == "POST":
        form = form_class(request.POST)
        if form.is_valid():
            form.save(sender=request.user)
            request.user.message_set.create(
                message=_(u"Message successfully sent."))
            if success_url is None:
                success_url = reverse('view_campaign',
                                      kwargs={'campaign_id': campaign.pk})
            return HttpResponseRedirect(success_url)
    else:
        form = form_class()
        contributions = campaign.contribution_set.members().order_by(
            "contributor__username")
        recipients = list(set([c.contributor for c in contributions]))
        form.fields['recipient'].initial = recipients
    return render_view(request, template_name, {'form': form})
Esempio n. 14
0
def view(request, campaign_id, template='campaign/detail.html'):    
    """Campaign detail view"""
    ctx = {}
    campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id)
    ctx['is_owner'] = request.user.is_authenticated() and request.user.id == campaign.artist.user_profile.user.id
    ctx['is_admin'] = request.user.has_perm('campaign.can_manage_campaigns')
    # Campaign changes, if available, are shown only to the campaign owner and the admin.
    ctx['changes'] = (ctx['is_owner'] or ctx['is_admin']) and campaign.changed_version
    if not campaign.is_approved:
        # Only admins and campaign owners may see unapproved campaigns.
        if not request.user.is_authenticated():
            return HttpResponseRedirect("%s?next=%s" % (reverse('login'), request.path))
        if not (ctx['is_owner'] or ctx['is_admin']):
            # We could return an HTTP forbidden response here but we don't want a malicious user
            # to know if a campaign even exists with this id.
            # So, we raise a 404 - Page Not Found instead.
            raise Http404
    ctx['c'] = campaign
    ctx['campaign'] = campaign
    if request.user.is_authenticated():
        ctx['comment_form'] = CommentForm(author=request.user, target_instance=campaign)
    if not ctx['is_owner']:
        stats = campaign.stats
        stats.num_views = stats.num_views + 1
        stats.save()
    return render_view(request, template, ctx)
Esempio n. 15
0
def confirm_account(request, user_id=None, code=None, template='registration/confirm_account_form.html'):
    ctx = {}
    next = request.REQUEST.get("next", reverse("list_events"))
    if user_id and code: # user visited the direct confirmation link
        activation_code = u"%s-%s" % (user_id, code)
        profile, mesg = UserProfile.objects.activate_user(activation_code)
        if profile:
            add_message(request, u"Thank you for confirming your email address.")
            if not request.user.is_authenticated():
                user = profile.user
                backend = get_backends()[0] 
                user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
                login(request, user)
            return HttpResponseRedirect(next)
        else:
            add_message(request, mesg)
    if request.method == 'POST': # user has typed in the confirmation code manually
        form = forms.ActivationForm(data=request.POST, files=request.FILES)
        if form.is_valid():
            add_message(request, u"Thank you for confirming your email address.")
            if not request.user.is_authenticated():
                user = form.user_profile.user
                backend = get_backends()[0]
                user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
                login(request, user)
            return HttpResponseRedirect(next)
    else:
        form = forms.ActivationForm()        
    ctx['form'] = form
    ctx['next'] = next
    return render_view(request, template, ctx)
Esempio n. 16
0
def upload(request, event_id, template='event/photo/upload_form.html'):
    event = get_object_or_404(Event.visible_objects,
            Q(artist__user_profile__user=request.user) |
            Q(creator__user=request.user),
            pk=event_id)
    user = request.user
    event_url = event.get_absolute_url()
    photo_url = reverse('list_event_photos', kwargs={'event_id':event.pk})
    if request.POST:
        form = PhotoForm(data=request.POST, files=request.FILES)
        if form.is_valid():
            photo = form.save(content_object=event)
            _log.info('Photo uploaded: (%s) %s', photo.pk, photo.title)
            special_mesg = _('''<a href="%s">New photos</a> have been added to one of <a href="%s">your shows.</a>''' % (photo_url, event_url))
            event.notify_attendees(special_mesg, exclude=[user.pk])
            if 'Another' in request.POST.get('submit', 'Add'):
                user.message_set.create(message=_("%s Photo uploaded. You can add another photo below.") % photo.image_preview('square_thumbnail'))
                return HttpResponseRedirect(reverse('upload_event_photo', kwargs={'event_id':event.pk}))
            else:
                user.message_set.create(message=_("Photo uploaded."))
                return HttpResponseRedirect(event_url)
    else:
        form = PhotoForm()
    ctx = {'event':event, 'form':form, 'allow_another':True}
    return render_view(request, template, ctx)
Esempio n. 17
0
def register(request, template='artist/registration_form.html', redirect_field_name='next'):
    """THIS ARTIST REGISTRATION VIEW IS NO LONGER USED.

    It's been superceded by ArtistRegistrationFormWizard instead.

    """
    if request.user.is_authenticated():
        return HttpResponseRedirect(reverse(_ARTIST_REGISTRATION_NEXT))
    redirect_to = request.REQUEST.get(redirect_field_name, '')
    if request.POST:
        captcha_answer = captcha.get_answer(request)
        form = forms.ArtistRegistrationForm(captcha_answer=captcha_answer, data=request.POST, files=request.FILES)
        if form.is_valid():
            user = form.save()
            user = authenticate(username=user.username, password=form.cleaned_data['password1'])
            login(request, user)
            user.message_set.create(message=_(u'The account for <em>%s</em> has now been registered. Welcome!' % user.get_profile().artist.name))
            _log.info('Artist registered: %s', user.username)
            email_template('Welcome to %s!' % settings.UI_SETTINGS['UI_SITE_TITLE'],
                               'artist/email/welcome.txt',
                               {'user':user}, to_list=[user.email])
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()
            if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
                redirect_to = reverse(_ARTIST_REGISTRATION_NEXT)
            return HttpResponseRedirect(redirect_to)
    else:
        form = forms.ArtistRegistrationForm()
    request.session.set_test_cookie()
    ctx = {'form':form, 'auto_populate_url':True, redirect_field_name:redirect_to}
    return render_view(request, template, ctx)
Esempio n. 18
0
def upload(request, event_id, template='event/photo/upload_form.html'):
    event = get_object_or_404(Event.visible_objects,
                              Q(artist__user_profile__user=request.user)
                              | Q(creator__user=request.user),
                              pk=event_id)
    user = request.user
    event_url = event.get_absolute_url()
    photo_url = reverse('list_event_photos', kwargs={'event_id': event.pk})
    if request.POST:
        form = PhotoForm(data=request.POST, files=request.FILES)
        if form.is_valid():
            photo = form.save(content_object=event)
            _log.info('Photo uploaded: (%s) %s', photo.pk, photo.title)
            special_mesg = _(
                '''<a href="%s">New photos</a> have been added to one of <a href="%s">your shows.</a>'''
                % (photo_url, event_url))
            event.notify_attendees(special_mesg, exclude=[user.pk])
            if 'Another' in request.POST.get('submit', 'Add'):
                user.message_set.create(message=_(
                    "%s Photo uploaded. You can add another photo below.") %
                                        photo.image_preview('square_thumbnail')
                                        )
                return HttpResponseRedirect(
                    reverse('upload_event_photo',
                            kwargs={'event_id': event.pk}))
            else:
                user.message_set.create(message=_("Photo uploaded."))
                return HttpResponseRedirect(event_url)
    else:
        form = PhotoForm()
    ctx = {'event': event, 'form': form, 'allow_another': True}
    return render_view(request, template, ctx)
Esempio n. 19
0
def delete(request, event_id, template='event/event_deletion_form.html'):
    event = get_object_or_404(Event.visible_objects,
            Q(artist__user_profile__user=request.user) |
            Q(creator__user=request.user),
            pk=event_id) #is_submitted=False
    ctx = {'event':event, 'c':event}
    if request.method == 'POST':
        form = forms.DeleteEventForm(data=request.POST)
        if form.is_valid():
            if event.is_deletable:
                event.delete()
                request.user.message_set.create(message=_('Your event has been deleted.'))
                return HttpResponseRedirect(reverse('artist_admin'))
            else:
                # ActionItem.objects.q_admin_action(event, 'delete-event')
                request.user.message_set.create(message=_('Your event deletion request has been submitted. An admin will review it shortly.'))
                email_template('Event deletion requested by %s' % request.user.username,
                               'event/email/request_deletion.txt',
                               {'event':event}, to_list=settings.EVENT_APPROVERS)
                _log.info('Event deletion requested: (%s) %s', event.pk, event.short_title)
            return HttpResponseRedirect(reverse('view_event', kwargs={'event_id':event_id}))
    else:
        form = forms.DeleteEventForm()
    ctx['form'] = form
    return render_view(request, template, ctx)
Esempio n. 20
0
def dynamic_badge(request, event_id, event=None, template='event/dynamic_badge.html'):
    """Event badge"""
    ctx = {}
    if not event:
        event = get_object_or_404(Event.visible_objects.select_related('creator__user', 'artist__user_profile__user', 'venue'), pk=event_id)
    ctx['e'] = event
    ctx['event'] = event
    return render_view(request, template, ctx)
Esempio n. 21
0
def list_campaigns(request, template='campaign/list.html', queryset=None, extra_context=None):
    if queryset is None:
        queryset = Campaign.objects.active().order_by('-end_date')
    page = paginate(request, queryset, settings.CAMPAIGNS_PER_PAGE, orphans=3)
    ctx = {'page':page, 'title':'Current campaigns'}
    if extra_context:
        ctx.update(extra_context)
    return render_view(request, template, ctx)
Esempio n. 22
0
def edit(request,
         campaign_id=None,
         template='campaign/campaign_edit_form.html'):
    ctx = {}
    approved_campaign_edit = False
    FormClass = forms.get_campaign_form(request)
    if campaign_id is not None:
        # We are in update mode. Get the campaign instance if it belongs to
        # this user and it has not yet been submitted for admin approval.
        campaign = get_object_or_404(
            Campaign.visible_objects,
            pk=campaign_id,
            artist__user_profile__user=request.user)  #is_submitted=False
        mode = 'update'
        ctx['campaign'] = campaign
        if campaign.is_approved:
            # Approved campaigns use a different form to track changes
            FormClass = forms.get_campaign_edit_form(campaign, request)
            approved_campaign_edit = True
    else:
        campaign = Campaign(artist=request.user.get_profile().artist)
        mode = 'create'
    if request.POST:
        form = FormClass(data=request.POST,
                         files=request.FILES,
                         instance=campaign)
        if form.is_valid():
            if approved_campaign_edit:
                campaign_change = form.save(commit=True)
                ActionItem.objects.q_admin_action(campaign,
                                                  'approve-campaign-edit')
                email_template('Campaign Edited: approval requested by %s' %
                               request.user.username,
                               'campaign/email/request_approval_edit.txt',
                               {'campaign': campaign},
                               to_list=settings.CAMPAIGN_APPROVERS,
                               fail_silently=False)
                request.user.message_set.create(message=_(
                    "This is what your updated campaign page will look like once an admin approves your changes."
                ))
            else:
                campaign = form.save(commit=False)
                campaign.save()
                request.user.message_set.create(message=_(
                    "This is what your updated campaign page will look like. If you are happy with it, please submit it for approval."
                ))
            if campaign_id is None:
                _log.info('Campaign created: (%s) %s', campaign.pk,
                          campaign.short_title)
            else:
                _log.info('Campaign updated: (%s) %s', campaign.pk,
                          campaign.short_title)
            return HttpResponseRedirect(campaign.get_absolute_url())
    else:
        form = FormClass(instance=campaign)
    ctx.update({'form': form, 'mode': mode})
    return render_view(request, template, ctx)
Esempio n. 23
0
def redeem_ticket(request, template='campaign/redeem_ticket.html'):
    """Redeem a campaign ticket.

    Kabir: The way I see it working is:
    Once they type in the redemption code, it will ask them to login or create an account. 
    New users create an account. The system checks to see what information it needs for the 
    redemption code they typed in and asks them to fill in the additional needed information.
    Then it redeems the ticket.

    """
    ticket_code = request.session.get('open_ticket_code', None)
    try:
        del request.session['open_ticket_code']
    except KeyError:
        pass
    if request.POST or ticket_code:
        data = request.POST.copy()
        if ticket_code:
            data[u'code'] = ticket_code
        form = forms.RedeemTicketForm(data=data)
        if form.is_valid():
            if request.user.is_authenticated():
                ticket = form.save(commit=False, user=request.user)
                qualifies, reasons = ticket.campaign.is_user_qualified(
                    request.user)
                if qualifies:
                    ticket.save()
                    _log.info('Ticket redeemed %s', ticket)
                    if ticket.amount:
                        request.user.message_set.create(message=_(
                            'Your $%.2f ticket has been redeemed. Thank you.' %
                            ticket.amount))
                    else:
                        request.user.message_set.create(message=_(
                            'Your ticket has been redeemed. Thank you.'))
                    return HttpResponseRedirect(
                        reverse('view_campaign',
                                kwargs={'campaign_id': ticket.campaign.pk}))
                else:
                    # The logged-in user does not have all qualifying fields for
                    # the campaign whose ticket is being redeemed.
                    # Therefore, store the ticket code into the session and
                    # give the user a chance to fill out the qualifying fields.
                    request.session['open_ticket_code'] = form.cleaned_data[
                        'code']
                    return HttpResponseRedirect(
                        reverse('qualify_for_campaign',
                                kwargs={'campaign_id': ticket.campaign.pk}))
            else:  # user not logged in
                request.session['open_ticket_code'] = form.cleaned_data['code']
                return HttpResponseRedirect(
                    "%s?next=%s" %
                    (reverse('login'), reverse('redeem_ticket')))
    else:
        form = forms.RedeemTicketForm()
    ctx = {'form': form}
    return render_view(request, template, ctx)
Esempio n. 24
0
def member_upload(request, event_id, template='event/photo/upload_form.html'):
    event = get_object_or_404(
        Event.objects.public().select_related('artist__user_profile__user'),
        pk=event_id)
    user = request.user
    if event.owner.pk == request.user.pk:
        return HttpResponseRedirect(
            reverse('upload_event_photo', kwargs={'event_id': event.pk}))
    # Ensure that this user can't upload more photos than the allowed limit.
    photo_count = Photo.objects.get_for_object(event,
                                               user=request.user).count()
    limit = settings.EVENT_MAX_PHOTOS_PER_MEMBER
    event_url = reverse('view_event', kwargs={'event_id': event.pk})
    photo_url = reverse('list_event_photos', kwargs={'event_id': event.pk})
    if photo_count >= limit:
        user.message_set.create(
            message=_("You can not upload more than %s photos to this event." %
                      limit))
        return HttpResponseRedirect(
            reverse('view_event', kwargs={'event_id': event.pk}))
    if request.POST:
        form = forms.MemberPhotoForm(data=request.POST, files=request.FILES)
        if form.is_valid():
            if photo_count == limit:
                submit = 'Add'
            else:
                submit = request.POST.get('submit', 'Add')
            photo = form.save(content_object=event,
                              display_order=9999999,
                              user=request.user_profile)
            _log.info('Photo uploaded: (%s) %s', photo.pk, photo.title)
            special_mesg = _(
                '''<a href="%s">New photos</a> have been added to one of <a href="%s">your shows.</a>'''
                % (photo_url, event_url))
            event.notify_attendees(special_mesg, exclude=[user.pk])
            if 'Another' in submit:
                user.message_set.create(message=_(
                    "%s Photo uploaded. You can add another photo below.") %
                                        photo.image_preview('square_thumbnail')
                                        )
                return HttpResponseRedirect(
                    reverse('upload_event_photo_member',
                            kwargs={'event_id': event.pk}))
            else:
                user.message_set.create(message=_("Photo uploaded."))
                return HttpResponseRedirect(
                    reverse('view_event', kwargs={'event_id': event.pk}))
    else:
        form = forms.MemberPhotoForm()
    ctx = {
        'event': event,
        'form': form,
        'allow_another': photo_count < limit - 1,
        'member_mode': True
    }
    return render_view(request, template, ctx)
Esempio n. 25
0
def list_sponsors(request, campaign_id, template='campaign/sponsors.html'):
    ctx = {}
    campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id)
    contributors = UserProfile.objects.select_related('user').filter(
        Q(user__contribution__campaign__pk=campaign.pk) |
        Q(user__ticket__campaign__pk=campaign.pk)
    ).distinct().order_by("user__username")
    page = paginate(request, contributors, 100) # Show 100 contributors per page.
    ctx.update({'campaign':campaign, 'page':page})
    return render_view(request, template, ctx)
Esempio n. 26
0
def view(request, thumbnail_id, template='event/photo/view.html'):
    try:
        photo_version = get_object_or_404(PhotoVersion, pk=thumbnail_id)
        event = photo_version.photo.content_object
        if not event.is_public:
            # Allow only event owner to see photos of unreleased event.
            if not (event.owner == request.user):
                raise Http404
        size = PhotoSize.objects.get_medium()
        photos = PhotoVersion.objects.get_for_object(event, size=size)
        paginator = Paginator(
            photos, 1, orphans=0)  # Show one medium-sized photo per page
        page_num = request.REQUEST.get('page', 0)
        if not page_num:
            # Find the page on which this photo falls assuming there's one photo per page.
            page_num = 1  # default is page #1
            photo_values = photos.values('photo_id')
            for n, o in enumerate(photo_values):
                if o['photo_id'] == photo_version.photo.pk:
                    page_num = n + 1
                    break
        try:
            page = paginator.page(page_num)
        except InvalidPage:
            page = paginator.page(1)
        index_link = reverse('list_event_photos',
                             kwargs={'event_id': event.pk})
        is_owner = request.user.is_authenticated(
        ) and request.user.pk == event.owner.pk
        ctx = {
            'event': event,
            'page': page,
            'paginator': paginator,
            'is_owner': event.owner == request.user,
            'index_link': index_link,
            'is_owner': is_owner
        }
        if request.is_ajax():
            for photo in page.object_list:
                ph = photo
                break
            ctx.update({'request': request, 'photo': ph})
            photo_html = loader.get_template(
                "photo/tags/one-photo.html").render(Context(ctx))
            json = {
                'success': True,
                'photo_next_page': page.next_page_number(),
                'photo_pk': ph.pk,
                'photo_html': photo_html
            }
            return HttpResponse(simplejson.dumps(json),
                                mimetype='application/json')
        return render_view(request, template, ctx)
    except InvalidPage:
        raise Http404
Esempio n. 27
0
def list_campaigns(request,
                   template='campaign/list.html',
                   queryset=None,
                   extra_context=None):
    if queryset is None:
        queryset = Campaign.objects.active().order_by('-end_date')
    page = paginate(request, queryset, settings.CAMPAIGNS_PER_PAGE, orphans=3)
    ctx = {'page': page, 'title': 'Current campaigns'}
    if extra_context:
        ctx.update(extra_context)
    return render_view(request, template, ctx)
Esempio n. 28
0
def list_sponsors(request, campaign_id, template='campaign/sponsors.html'):
    ctx = {}
    campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id)
    contributors = UserProfile.objects.select_related('user').filter(
        Q(user__contribution__campaign__pk=campaign.pk)
        | Q(user__ticket__campaign__pk=campaign.pk)).distinct().order_by(
            "user__username")
    page = paginate(request, contributors,
                    100)  # Show 100 contributors per page.
    ctx.update({'campaign': campaign, 'page': page})
    return render_view(request, template, ctx)
Esempio n. 29
0
def anon_contribute_by_payment_mode(request, campaign_id, payment_mode, template='campaign/campaign_contribution_form_%s_anon.html'):
    """Process a PayPal or Google Checkout based anonymous contribution."""
    campaign = get_object_or_404(Campaign.objects.active(), pk=campaign_id)
    payment_option = campaign.artist.get_merchant_account(payment_mode)
    if not payment_option:
        raise Http404
    template = template % payment_option.payment_mode
    ctx = {'campaign':campaign, 'c':campaign, 'payment_option':payment_option, 'is_anon':True, 'proceed_to_pay':True}
    if campaign.is_free:
        return HttpResponseRedirect(reverse('contribute_to_campaign', kwargs={'campaign_id':campaign_id}))
    return render_view(request, template, ctx)
Esempio n. 30
0
def print_tickets(request, campaign_id, template='campaign/print-tickets.html'):
    ctx = {}
    campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id)
    ctx['c'] = campaign
    ctx['unprinted'] = campaign.ticket_set.unredeemed(is_printed=False)
    ctx['printed'] = campaign.ticket_set.unredeemed(is_printed=True)
    ctx['redeemed'] = campaign.ticket_set.redeemed()
    if request.method == 'POST':
        # Printing completed. Mark tickets and action items as done.
        ActionItem.objects.q_admin_action_done(campaign, 'print-tickets')
        ctx['unprinted'].update(is_printed=True) #printed_on=datetime.now())
    return render_view(request, template, ctx)
Esempio n. 31
0
def old_homepage(request, template='website/homepage.html'):
    ctx = {}
    # Merge event and campaign badges by their homepage worthiness date.
    key = u'ir-top3-boxes'
    if request.user.is_authenticated() and request.user.is_staff:
        # No caching for staff users
        top3_objects = None
    else:
        top3_objects = cache.get(key, None)
    if top3_objects is None:
        cx = list(Campaign.objects.active(is_homepage_worthy=True).order_by('-homepage_worthy_on')[:15])
        ex = list(Event.objects.active(is_homepage_worthy=True).order_by('-homepage_worthy_on')[:15])
        mx = ex + cx
        mx.sort(key=lambda x:x.homepage_worthy_on, reverse=True)
        top3_objects = mx[:3]
        cache.set(key, top3_objects, int(settings.UI_SETTINGS['UI_CACHE_TIMEOUT']))
    ctx['top3'] = top3_objects

    # Save top3 object ids so we can exclude them from the mixed feed later
    top3_campaigns = []
    top3_events = []
    for o in top3_objects:
        if hasattr(o, 'venue'):
            top3_events.append(o.pk)
        else:
            top3_campaigns.append(o.pk)

    # Merge 10 event and campaign objects.
    key = u'ir-hp-mixedfeed'
    if request.user.is_authenticated() and request.user.is_staff:
        # No caching for staff users
        mixed_feed = None
    else:
        mixed_feed = cache.get(key, None)
    if mixed_feed is None:
        # Exclude campaigns and events already shown in `top3` above
        c2x = list(Campaign.objects.active().exclude(pk__in=top3_campaigns).order_by('end_date')[:25])
        e2x = list(Event.objects.active().exclude(pk__in=top3_events).order_by('event_date')[:25])
        m2x = e2x + c2x
        m2x.sort(key=lambda x:x.sort_date, reverse=False)
        mixed_feed = m2x[:10]
        cache.set(key, mixed_feed, int(settings.UI_SETTINGS['UI_CACHE_TIMEOUT']))
    ctx['mixed_feed'] = mixed_feed

    size = PhotoSize.objects.get_thumbnail(cropped=True)
    photos = PhotoVersion.objects.select_related('photo').filter(size=size).order_by("-updated_on")[:16]
    ctx['photos'] = photos

    if request.user.is_authenticated():
        ctx['special_messages'] = get_and_delete_messages(request.user, 1)
    return render_view(request, template, ctx)
Esempio n. 32
0
def post_comment(request, campaign_id, template='campaign/comment_form.html'):
    campaign = get_object_or_404(Campaign.objects.public(), pk=campaign_id)
    if request.method == 'POST':
        form = CommentForm(author=request.user, target_instance=campaign, data=request.POST)
        if form.is_valid():
            comment = form.save()
            request.user.message_set.create(message=_('Thank you for your <a href="#c%s">comment&nbsp;&raquo;</a>' % comment.pk))
            _log.debug('Campaign comment posted: (%s)', comment.get_as_text())
            cache_killer = "%s-%s"% (random.randint(0, 10000), time())
            return HttpResponseRedirect(reverse('view_campaign', kwargs={'campaign_id':campaign.pk}) + "?q=%s&new_c=y" % cache_killer)
    else:
        form = CommentForm(author=request.user, target_instance=campaign)
    ctx = {'form':form, 'comment_form':form, 'campaign':campaign}
    return render_view(request, template, ctx)
Esempio n. 33
0
def print_tickets(request,
                  campaign_id,
                  template='campaign/print-tickets.html'):
    ctx = {}
    campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id)
    ctx['c'] = campaign
    ctx['unprinted'] = campaign.ticket_set.unredeemed(is_printed=False)
    ctx['printed'] = campaign.ticket_set.unredeemed(is_printed=True)
    ctx['redeemed'] = campaign.ticket_set.redeemed()
    if request.method == 'POST':
        # Printing completed. Mark tickets and action items as done.
        ActionItem.objects.q_admin_action_done(campaign, 'print-tickets')
        ctx['unprinted'].update(is_printed=True)  #printed_on=datetime.now())
    return render_view(request, template, ctx)
Esempio n. 34
0
def post_comment(request, event_id, template='event/comment_form.html'):
    event = get_object_or_404(Event.objects.public(), pk=event_id)
    if request.method == 'POST':
        form = forms.EventCommentForm(author=request.user, target_instance=event, data=request.POST)
        if form.is_valid():
            comment = form.save()
            request.user.message_set.create(message=_('Thank you for your <a href="#c%s">comment&nbsp;&raquo;</a>' % comment.pk))
            _log.debug('Event comment posted: (%s)', comment.get_as_text())
            cache_killer = "%s-%s"% (random.randint(0, 10000), time())
            return HttpResponseRedirect(event.get_absolute_url() + "?q=%s" % cache_killer)
    else:
        form = forms.EventCommentForm(author=request.user, target_instance=event)
    ctx = {'form':form, 'comment_form':form, 'event':event}
    return render_view(request, template, ctx)
Esempio n. 35
0
def view(request, thumbnail_id, template='event/photo/view.html'):
    try:
        photo_version = get_object_or_404(PhotoVersion, pk=thumbnail_id)
        event = photo_version.photo.content_object
        if not event.is_public:
            # Allow only event owner to see photos of unreleased event.
            if not (event.owner == request.user):
                raise Http404
        size = PhotoSize.objects.get_medium()
        photos = PhotoVersion.objects.get_for_object(event, size=size)
        paginator = Paginator(photos, 1, orphans=0) # Show one medium-sized photo per page
        page_num = request.REQUEST.get('page', 0)
        if not page_num:
            # Find the page on which this photo falls assuming there's one photo per page.
            page_num = 1 # default is page #1
            photo_values = photos.values('photo_id')
            for n, o in enumerate(photo_values):
                if o['photo_id'] == photo_version.photo.pk:
                    page_num = n + 1
                    break
        try:
            page = paginator.page(page_num)
        except InvalidPage:
            page = paginator.page(1)
        index_link = reverse('list_event_photos', kwargs={'event_id':event.pk})
        is_owner = request.user.is_authenticated() and request.user.pk == event.owner.pk
        ctx = {'event':event,
               'page':page,
               'paginator':paginator,
               'is_owner':event.owner == request.user,
               'index_link':index_link,
               'is_owner':is_owner}
        if request.is_ajax():
            for photo in page.object_list:
                ph = photo
                break
            ctx.update({'request':request, 'photo':ph})
            photo_html = loader.get_template("photo/tags/one-photo.html").render(Context(ctx))
            json = {
                'success':True,
                'photo_next_page':page.next_page_number(),
                'photo_pk':ph.pk,
                'photo_html':photo_html
            }
            return HttpResponse(simplejson.dumps(json), mimetype='application/json')
        return render_view(request, template, ctx)
    except InvalidPage:
        raise Http404
Esempio n. 36
0
def request_tickets(request, campaign_id, template='campaign/request_tickets_form.html'):
    campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id, artist__user_profile__user=request.user, is_approved=True)
    if not campaign.are_tickets_available:
        request.user.message_set.create(message=_('Tickets are not available for this campaign.'))
        return HttpResponseRedirect(reverse('view_campaign', kwargs={'campaign_id':campaign.pk}))
    if request.POST:
        form = forms.RequestTicketsForm(instance=campaign, data=request.POST)
        if form.is_valid():
            form.save()
            request.user.message_set.create(message=_("Your campaign ticket request has been sent to the admins. Your tickets will be mailed out shortly."))
            _log.info('Campaign tickets requested: (%s) %s', campaign.pk, campaign.short_title)
            return HttpResponseRedirect(reverse('view_campaign', kwargs={'campaign_id':campaign.pk}))
    else:
        form = forms.RequestTicketsForm(instance=campaign)
    ctx = {'form':form, 'campaign':campaign}
    return render_view(request, template, ctx)
Esempio n. 37
0
def redeem_ticket(request, template='campaign/redeem_ticket.html'):
    """Redeem a campaign ticket.

    Kabir: The way I see it working is:
    Once they type in the redemption code, it will ask them to login or create an account. 
    New users create an account. The system checks to see what information it needs for the 
    redemption code they typed in and asks them to fill in the additional needed information.
    Then it redeems the ticket.

    """
    ticket_code = request.session.get('open_ticket_code', None)
    try:
        del request.session['open_ticket_code']
    except KeyError:
        pass
    if request.POST or ticket_code:
        data = request.POST.copy()
        if ticket_code:
            data[u'code'] = ticket_code
        form = forms.RedeemTicketForm(data=data)
        if form.is_valid():
            if request.user.is_authenticated():
                ticket = form.save(commit=False, user=request.user)
                qualifies, reasons = ticket.campaign.is_user_qualified(request.user)
                if qualifies:
                    ticket.save()
                    _log.info('Ticket redeemed %s', ticket)
                    if ticket.amount:
                        request.user.message_set.create(message=_('Your $%.2f ticket has been redeemed. Thank you.' % ticket.amount))
                    else:
                        request.user.message_set.create(message=_('Your ticket has been redeemed. Thank you.'))
                    return HttpResponseRedirect(reverse('view_campaign', kwargs={'campaign_id':ticket.campaign.pk}))
                else:
                    # The logged-in user does not have all qualifying fields for
                    # the campaign whose ticket is being redeemed.
                    # Therefore, store the ticket code into the session and
                    # give the user a chance to fill out the qualifying fields.
                    request.session['open_ticket_code'] = form.cleaned_data['code']
                    return HttpResponseRedirect(reverse('qualify_for_campaign', kwargs={'campaign_id':ticket.campaign.pk}))
            else: # user not logged in
                request.session['open_ticket_code'] = form.cleaned_data['code']
                return HttpResponseRedirect("%s?next=%s" % (reverse('login'), reverse('redeem_ticket')))
    else:
        form = forms.RedeemTicketForm()
    ctx = {'form':form}
    return render_view(request, template, ctx)
Esempio n. 38
0
def invite_friends(request, template='fb/invite_friends.html'):
    next = request.REQUEST.get('next', reverse("account"))
    user_profile = request.user_profile
    user = user_profile.user
    api_key, secret = settings.FB_API_KEY, settings.FB_SECRET_KEY
    fb_uid, fb_session_key, fb_session_secret = get_fb_session(request)
    if not fb_uid:
        return _logout_redirect(request, next)
    all_fb_friends = _get_connected_friends(api_key, secret, fb_session_key,
                                            fb_uid)
    fr_list = list(all_fb_friends)
    previous = list(
        user_profile.fbinviteduser_set.values_list("fb_userid", flat=True))
    fr_list.extend(previous)
    exclude_ids = u",".join(fr_list)
    ctx = {'next': next, 'needs_fbml': True, 'exclude_ids': exclude_ids}
    return render_view(request, template, ctx)
Esempio n. 39
0
def list_events(request, location=None, template='event/list.html', queryset=None, extra_context=None, hide_top3=False):
    location = location or request.location
    request.location = location # stick user to this location going forward
    request.location_name = settings.LOCATION_DATA.get(location, settings.EMPTY_LOCATION_DATA)[3]
    if queryset is None:
        today, td = today_timedelta_by_location(location)
        queryset = Event.objects.active_by_location(location=location, attending_user=request.user_profile, today=today).order_by('event_date', 'event_start_time', 'pk')
        # queryset = queryset.exclude(ext_event_source='mlb2010', location='user-entered')
        queryset = queryset.exclude(location='user-entered') # don't show user entered events on city pages
    ctx = {
        'title':'Upcoming Events',
        'events':queryset,
        'location_name':Event.LOCATIONMAP.get(location, 'Boston, MA'),
    }
    if not hide_top3:
        userid = request.user.is_authenticated() and request.user.pk or 0
        key = shorten_key(u"popular-ourpick-destination:%s:%s" % (location, userid))
        px = cache.cache.get(key, None)
        if px is None:
            popular = Event.objects.active_by_location(
                location=location,
                attending_user=request.user_profile,
                event_date__lte=datetime.today() + timedelta(days=7),
            ).order_by('-tweet_count')[:1]
            ctx['popular'] = get_or_none(popular)
            ctx['ourpick'] = get_or_none(Event.objects.active_by_location(location=location, attending_user=request.user_profile, is_homepage_worthy=True).order_by('event_date', 'event_start_time', 'pk')[:1])
            ctx['destination'] = get_or_none(Event.objects.active_by_location(location='destination', attending_user=request.user_profile).order_by('-destination_timestamp')[:1])
            px = (ctx['popular'], ctx['ourpick'], ctx['destination'])
            cache.cache.set(key, px, 600)
        else:
            ctx['popular'], ctx['ourpick'], ctx['destination'] = px
    if extra_context:
        ctx.update(extra_context)
    other_cities = sorted(settings.LOCATION_DATA.keys())
    other_cities.remove(location)
    city_list_html = [
        ('<a href="http://%s.%s%s%s">%s</a>' % (settings.LOCATION_SUBDOMAIN_REVERSE_MAP[loc], settings.DISPLAY_SITE_DOMAIN,  _SUBDOMAIN_PORT, reverse("list_events"), settings.LOCATION_DATA.get(loc)[3])) for loc in other_cities
    ]
    ctx['other_cities'] = ', '.join(city_list_html)
    if request.mobile:
        template = 'mobile/event/city.html'
    if request.user.is_authenticated():
        # Get Friends' Favorites count
        ctx['num_ff'] = get_friends_favorites_count(request.user_profile, location)
    ctx['needs_fbml'] = True
    return render_view(request, template, ctx)
Esempio n. 40
0
def comments(request, event_id, template='event/tags/event_comments.html'):
    """Event comments AJAX view"""
    from event.templatetags.eventtags import event_comments as fill_event_comments
    event = get_object_or_404(Event.visible_objects, pk=event_id)
    ctx = {}
    fill_event_comments(ctx, event)
    ctx['is_owner'] = request.user.is_authenticated() and \
        (request.user.id == event.artist.user_profile.user.id) or \
        (event.creator and request.user.id == event.creator.user.id)
    ctx['is_admin'] = request.user.has_perm('event.can_manage_events')
    ctx['c'] = event
    ctx['event'] = event
    if request.user.is_authenticated():
        ctx['comment_form'] = forms.EventCommentForm(author=request.user, target_instance=event)
    ctx['twitter_label'] = u'Tweet this show'
    ctx['twitter_status'] = settings.TWITTER_EVENT_STATUS_FORMAT % {'event_name':event.short_name_for_twitter, 'event_url':event.get_short_url()}
    return render_view(request, template, ctx)
Esempio n. 41
0
def list_photos(request, campaign_id, cropped=False, template='campaign/photo/list.html'):
    try:
        campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id)
        is_owner = request.user.is_authenticated() and campaign.owner.pk == request.user.pk
        if not campaign.is_public:
            # Allow campaign owner to see photos of unreleased campaign.
            # Disallow everyone else.
            if not is_owner:
                raise Http404
        size = PhotoSize.objects.get_thumbnail(cropped=cropped)
        photos = PhotoVersion.objects.get_for_object(campaign, size=size)
        paginator = Paginator(photos, settings.PHOTO_THUMBNAILS_PER_PAGE, orphans=3)
        page = paginator.page(request.REQUEST.get('page', 1))
        ctx = {'campaign':campaign, 'cropped':cropped, 'page':page, 'paginator':paginator, 'is_owner':is_owner}
        return render_view(request, template, ctx)
    except InvalidPage:
        raise Http404
Esempio n. 42
0
def signup_step2(request, existing_user=False, template='registration/signup_step2.html'):
    """Show unified signup screen"""
    if request.user.is_authenticated():
        return HttpResponseRedirect(reverse("account"))
    next = request.REQUEST.get('next', '')
    email = request.session.get("email", None)
    if not email and not existing_user:
        return HttpResponseRedirect(reverse("signup") + "?next=" + next)
    request.session.set_test_cookie()
    ctx = {'next':next, 'existing_user':existing_user}
    if request.mobile:
        ctx['next'] = next or u"%s?show_friends=y" % reverse("home")
        if existing_user:
            ctx['form'] = forms.MobileAuthenticationForm(request)
            template = "mobile/registration/login.html"
        else:
            template = "mobile/registration/signup_step2.html"
    return render_view(request, template, ctx)
Esempio n. 43
0
def signup_step1(request, template='registration/signup_step1.html'):
    """Get email address"""
    if request.user.is_authenticated():
        return HttpResponseRedirect(reverse("account"))
    next = request.REQUEST.get('next', '')
    if request.method == 'POST':
        form = forms.SignupStep1Form(data=request.POST, files=request.FILES, is_mobile=request.mobile)
        if form.is_valid():
            request.session['email'] = form.cleaned_data['email']
            request.session['has_opted_in'] = form.cleaned_data.get('has_opted_in', False)
            request.session['password'] = form.cleaned_data['password1']
            return HttpResponseRedirect("%s?next=%s" % (reverse('signup_step2'), next))
    else:
        form = forms.SignupStep1Form(is_mobile=request.mobile)
    ctx = {'form':form, 'next':next}
    if request.mobile:
        template = "mobile/registration/signup_step1.html"
    return render_view(request, template, ctx)
Esempio n. 44
0
def message_contributors(request, campaign_id, form_class=messageforms.ComposeForm, template_name='messages/compose.html', success_url=None):
    """Send a message to all contributors of the given campaign."""
    campaign = get_object_or_404(Campaign.visible_objects, pk=campaign_id, artist__user_profile__user=request.user, is_approved=True)
    form = form_class()
    if request.method == "POST":
        form = form_class(request.POST)
        if form.is_valid():
            form.save(sender=request.user)
            request.user.message_set.create(
                message=_(u"Message successfully sent."))
            if success_url is None:
                success_url = reverse('view_campaign', kwargs={'campaign_id':campaign.pk})
            return HttpResponseRedirect(success_url)
    else:
        form = form_class()
        contributions = campaign.contribution_set.members().order_by("contributor__username")
        recipients = list(set([c.contributor for c in contributions]))
        form.fields['recipient'].initial = recipients
    return render_view(request, template_name, {'form':form})
Esempio n. 45
0
def message_attendees(request, event_id, form_class=messageforms.ComposeForm, template_name='messages/compose.html', success_url=None):
    """Send a message to all attendees of the given event."""
    event = get_object_or_404(Event.visible_objects, pk=event_id, artist__user_profile__user=request.user, is_approved=True)
    form = form_class()
    if request.method == "POST":
        form = form_class(request.POST)
        if form.is_valid():
            form.save(sender=request.user)
            request.user.message_set.create(
                message=_(u"Message successfully sent."))
            if success_url is None:
                success_url = reverse('view_event', kwargs={'event_id':event.pk})
            return HttpResponseRedirect(success_url)
    else:
        form = form_class()
        attendees = event.attendee_set.all().order_by("attendee__username")
        recipients = [c.attendee for c in attendees]
        form.fields['recipient'].initial = recipients
    return render_view(request, template_name, {'form':form})
Esempio n. 46
0
def invite_friends(request, template='fb/invite_friends.html'):
    next = request.REQUEST.get('next', reverse("account"))
    user_profile = request.user_profile
    user = user_profile.user
    api_key, secret = settings.FB_API_KEY, settings.FB_SECRET_KEY
    fb_uid, fb_session_key, fb_session_secret = get_fb_session(request)
    if not fb_uid:
        return _logout_redirect(request, next)
    all_fb_friends = _get_connected_friends(api_key, secret, fb_session_key, fb_uid)
    fr_list = list(all_fb_friends)
    previous = list(user_profile.fbinviteduser_set.values_list("fb_userid", flat=True))
    fr_list.extend(previous)
    exclude_ids = u",".join(fr_list)
    ctx = {
        'next':next,
        'needs_fbml':True,
        'exclude_ids':exclude_ids
    }
    return render_view(request, template, ctx)
Esempio n. 47
0
def post_comment(request, campaign_id, template='campaign/comment_form.html'):
    campaign = get_object_or_404(Campaign.objects.public(), pk=campaign_id)
    if request.method == 'POST':
        form = CommentForm(author=request.user,
                           target_instance=campaign,
                           data=request.POST)
        if form.is_valid():
            comment = form.save()
            request.user.message_set.create(message=_(
                'Thank you for your <a href="#c%s">comment&nbsp;&raquo;</a>' %
                comment.pk))
            _log.debug('Campaign comment posted: (%s)', comment.get_as_text())
            cache_killer = "%s-%s" % (random.randint(0, 10000), time())
            return HttpResponseRedirect(
                reverse('view_campaign', kwargs={'campaign_id': campaign.pk}) +
                "?q=%s&new_c=y" % cache_killer)
    else:
        form = CommentForm(author=request.user, target_instance=campaign)
    ctx = {'form': form, 'comment_form': form, 'campaign': campaign}
    return render_view(request, template, ctx)
Esempio n. 48
0
def interested(request, event_id, limit=500, template='event/tags/who_is_interested.html'):
    """Render users interested in the given event.

    This view is pulled in through AJAX view.
    
    The view can also be called with `return_context` set to True. In that case, 
    it just returns the context dictionary which can be used by the caller to merge this data
    into another view.

    """    
    try:
        ctx = {}
        e = get_object_or_404(Event.objects.public(), pk=event_id)
        ctx['e'] = e
        ctx['event'] = e
        ctx['interested'] = e.get_interested(limit=limit)
        return render_view(request, template, ctx)
    except Exception, e:
        _log.exception(e)
        raise