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