urlpatterns = patterns('',
url(r'^$', 'panikweb.views.home', name='home'),
url(r'^program$', 'panikweb.views.program', name='program'),
+ url(r'^grid$', 'panikweb.views.grid', name='grid'),
url(r'^emissions/', include('emissions.urls')),
url(r'^ckeditor/', include('ckeditor.urls')),
import datetime
+import math
from django.views.generic.base import TemplateView
program = ProgramView.as_view()
+class TimeCell:
+ emissions = None
+ nonstop = None
+ w = 1
+ h = 1
+
+ def __init__(self):
+ self.emissions = []
+
+ def add_emission(self, emission):
+ self.emissions.append(emission)
+
+ def __unicode__(self):
+ if self.emissions:
+ return ', '.join([x.title for x in self.emissions])
+ else:
+ return self.nonstop
+
+ def __eq__(self, other):
+ return (unicode(self) == unicode(other))
+
+
+class Grid(TemplateView):
+ template_name = 'grid.html'
+
+ def get_context_data(self, **kwargs):
+ context = super(Grid, self).get_context_data(**kwargs)
+ schedules = Schedule.objects.all().order_by('datetime')
+
+ nb_lines = 2 * 24 # the cells are half hours
+ grid = []
+
+ nonstops = [[0, 2, 'Biodiversite'],
+ [2, 5, 'Reveries'],
+ [5, 7.5, 'La Panique'],
+ [7.5, 10, 'Matin tranquille'],
+ [10, 12, 'Up Beat Tempo'],
+ [12, 13, 'L\'heure de pointe'],
+ [13, 16, 'Le Mange Disque'],
+ [16, 19, 'Hop Bop and co'],
+ [19, 22, 'Acouphene'],
+ [22, 24, 'Biodiversite']
+ ]
+
+ for i in range(nb_lines):
+ grid.append([])
+ for j in range(7):
+ grid[-1].append(TimeCell())
+
+ nonstop = [x for x in nonstops if i>=x[0]*2 and i<x[1]*2][0]
+ for time_cell in grid[-1]:
+ time_cell.nonstop = nonstop[2]
+
+ for schedule in Schedule.objects.all():
+ row_start = schedule.datetime.hour * 2 + \
+ int(math.ceil(schedule.datetime.minute / 30))
+ day_no = schedule.get_weekday()
+
+ for step in range(int(math.ceil(schedule.emission.duration / 30))):
+ if grid[row_start+step][day_no] is None:
+ print 'creating a time cell at', row_start+step, day_no
+ grid[row_start+step][day_no] = TimeCell()
+ grid[row_start+step][day_no].add_emission(schedule.emission)
+
+
+ # start grid at 5am
+ grid = grid[2*5:] + grid[:2*5]
+
+ # merge adjencent cells
+ for i in range(nb_lines):
+ for j, cell in enumerate(grid[i]):
+ if grid[i][j] is None:
+ continue
+ t = 1
+ try:
+ while grid[i][j+t] == cell:
+ cell.w += 1
+ grid[i][j+t] = None
+ t += 1
+ except IndexError:
+ pass
+
+ for i in range(nb_lines):
+ grid[i] = [x for x in grid[i] if x is not None]
+ for j, cell in enumerate(grid[i]):
+ if grid[i][j] is None:
+ continue
+ t = 1
+ try:
+ while grid[i+t][j] == cell and grid[i+t][j].w == cell.w:
+ cell.h += 1
+ grid[i+t][j] = None
+ t += 1
+ except IndexError:
+ pass
+
+ context['grid'] = grid
+
+ return context
+
+grid = Grid.as_view()
+
class Home(TemplateView):
template_name = 'home.html'