Beispiel #1
0
def ajax_index_events(request):
    now = datetime.datetime.now()
    past_month = datetime.datetime.today() - datetime.timedelta(30)
    last_midnight = datetime.datetime.today().replace(hour=0, minute=0, second=0)

    events = Event.objects.filter(public=True, start_date__gte=past_month).order_by('start_date')
    try:
        next = Event.objects.filter(public=True, start_date__gte=last_midnight).order_by('start_date')[0]
        position = list(events).index(next) - 1  # show one event before the current one
    except IndexError:
        # if we don't have upcoming events, show this past_month events
        position = events.count() - 1

    streaming_event = None
    if is_streaming():
        try:
            streaming_event = Event.objects.filter(public=True, start_date__lte=datetime.datetime.now()).order_by('-start_date')[0]
            prev = streaming_event.get_next()
            td = prev.start_date - now
            if td.days == 0 and 0 < td.seconds < 1800:
                # if there is 30min to next event, take that one
                streaming_event = prev
            # TODO: if previous event should have ended more than 3 hours ago, dont' display the stream
        except IndexError:
            pass

    return render_to_response('www/ajax_index_events.html', locals(),
        context_instance=RequestContext(request))
Beispiel #2
0
def livestream(request):
    if is_streaming():
        event = get_streaming_event()
    else:
        event = get_next_streaming_event()

    return render_to_response('www/livestream.html', RequestContext(request, {
        'event': event,
    }))
Beispiel #3
0
def ajax_index_events(request):
    past_month = datetime.datetime.today() - datetime.timedelta(30)
    last_midnight = datetime.datetime.today().replace(hour=0, minute=0, second=0)

    events = Event.objects.filter(public=True, start_date__gte=past_month).order_by('start_date')
    try:
        next = Event.objects.filter(public=True, start_date__gte=last_midnight).order_by('start_date')[0]
        position = list(events).index(next)
    except IndexError:
        # if we don't have upcoming events, show this past_month events
        position = events.count() - 1

    streaming_event = None
    if is_streaming():
        try:
            streaming_event = Event.objects.filter(public=True, start_date__lte=datetime.datetime.now()).order_by('-start_date')[0]
        except IndexError:
            pass

    return render_to_response('www/ajax_index_events.html', locals(),
        context_instance=RequestContext(request))
Beispiel #4
0
def ajax_index_events(request, year=None, week=None):
    today = datetime.date.today()
    week = int(week or today.isocalendar()[1])
    year = int(year or today.year)

    # %Y: year,
    # %W: week of the year (starting with first monday of the year),
    # %w: weekday (0 being sunday)
    start = week_start_date(year, week)
    end = start + relativedelta(days=7)

    # get all events in this week
    # TODO: this will fail for events that last more than a week
    # TODO: for this purpose, we should just use postgres daterange sooner or later.
    q = Event.objects.filter(public=True,
                             start_date__range=(start, end),
                             end_date__range=(start, end))
    events = q.order_by('start_date').all()

    # figure out if we are streaming now
    streaming_event = None
    if week == int(today.isocalendar()[1]) and is_streaming():
        streaming_event = get_streaming_event()

    # TODO: a bug with calculating week number
    prev_week_date = start - relativedelta(days=7)
    next_week_date = start + relativedelta(days=7)
    ret = dict()
    ret['prev_url'] = reverse('ajax_events_week', kwargs=dict(year=prev_week_date.isocalendar()[0], week=prev_week_date.isocalendar()[1]))
    ret['next_url'] = reverse('ajax_events_week', kwargs=dict(year=next_week_date.isocalendar()[0], week=next_week_date.isocalendar()[1]))
    ret['events'] = {}

    dict_events = []

    for event in events:
        d = dict(id=event.id,
                 title=event.title,
                 start_date=ljubljana_tz.localize(event.start_date),
                 end_date=ljubljana_tz.localize(event.end_date),
                 place=event.place.name,
                 url=event.get_absolute_url())
        d['project'] = event.project.verbose_name or event.project.name
        d['announce'] = truncatewords(safe(striptags(event.announce)), 50)
        d['image'] = event.event_image.image.url
        if streaming_event:
            d['is_streaming'] = streaming_event.id == event.id
        else:
            d['is_streaming'] = False
        dict_events.append(d)

    # group by events with the days in a week
    for i, day in enumerate(map(lambda i: start + relativedelta(days=i), range(0, 7))):
        ret['events'][i] = dict(
            date=format_(day, 'D, d. b').capitalize(),
            short_date=format_(day, 'd. n.'),
            events=[],
            is_today=day == today,
        )
        for event in dict_events:
            start_date = datetime.date(event['start_date'].year, event['start_date'].month, event['start_date'].day)
            end_date = datetime.date(event['end_date'].year, event['end_date'].month, event['end_date'].day)
            # TODO: order of events is wrong
            if start_date <= day <= end_date:
                ret['events'][i]['events'].append(event)
                # TODO: note if event hasnt started today

    return HttpResponse(simplejson.dumps(ret, cls=DjangoJSONEncoder),
                        mimetype='application/json')