web/views/old_calendar.py
changeset 3451 6b46d73823f5
parent 3377 dd9d292b6a6d
child 3457 0924d0d08d60
equal deleted inserted replaced
3448:495862266785 3451:6b46d73823f5
    42         prev1 = next1 = prev2 = nex2 = date
    42         prev1 = next1 = prev2 = nex2 = date
    43         prev1 = previous_month(date, smallshift)
    43         prev1 = previous_month(date, smallshift)
    44         next1 = next_month(date, smallshift)
    44         next1 = next_month(date, smallshift)
    45         prev2 = previous_month(date, bigshift)
    45         prev2 = previous_month(date, bigshift)
    46         next2 = next_month(date, bigshift)
    46         next2 = next_month(date, bigshift)
    47         rql = self.rset.printable_rql()
    47         rql = self.cw_rset.printable_rql()
    48         return self.NAV_HEADER % (
    48         return self.NAV_HEADER % (
    49             xml_escape(self.build_url(rql=rql, vid=self.id, year=prev2.year,
    49             xml_escape(self.build_url(rql=rql, vid=self.__regid__, year=prev2.year,
    50                                        month=prev2.month)),
    50                                        month=prev2.month)),
    51             xml_escape(self.build_url(rql=rql, vid=self.id, year=prev1.year,
    51             xml_escape(self.build_url(rql=rql, vid=self.__regid__, year=prev1.year,
    52                                        month=prev1.month)),
    52                                        month=prev1.month)),
    53             xml_escape(self.build_url(rql=rql, vid=self.id, year=next1.year,
    53             xml_escape(self.build_url(rql=rql, vid=self.__regid__, year=next1.year,
    54                                        month=next1.month)),
    54                                        month=next1.month)),
    55             xml_escape(self.build_url(rql=rql, vid=self.id, year=next2.year,
    55             xml_escape(self.build_url(rql=rql, vid=self.__regid__, year=next2.year,
    56                                        month=next2.month)))
    56                                        month=next2.month)))
    57 
    57 
    58 
    58 
    59     # Calendar building methods ##############################################
    59     # Calendar building methods ##############################################
    60 
    60 
    84             # store & reset current row on Sundays
    84             # store & reset current row on Sundays
    85             if day.weekday() == 6:
    85             if day.weekday() == 6:
    86                 rows.append(u'<tr>%s%s</tr>' % (WEEKNUM_CELL % day.isocalendar()[1], ''.join(current_row)))
    86                 rows.append(u'<tr>%s%s</tr>' % (WEEKNUM_CELL % day.isocalendar()[1], ''.join(current_row)))
    87                 current_row = []
    87                 current_row = []
    88         current_row.extend([NO_CELL] * (6-day.weekday()))
    88         current_row.extend([NO_CELL] * (6-day.weekday()))
    89         rql = self.rset.printable_rql()
    89         rql = self.cw_rset.printable_rql()
    90         if day.weekday() != 6:
    90         if day.weekday() != 6:
    91             rows.append(u'<tr>%s%s</tr>' % (WEEKNUM_CELL % day.isocalendar()[1], ''.join(current_row)))
    91             rows.append(u'<tr>%s%s</tr>' % (WEEKNUM_CELL % day.isocalendar()[1], ''.join(current_row)))
    92         url = self.build_url(rql=rql, vid='calendarmonth',
    92         url = self.build_url(rql=rql, vid='calendarmonth',
    93                              year=first_day.year, month=first_day.month)
    93                              year=first_day.year, month=first_day.month)
    94         monthlink = u'<a href="%s">%s</a>' % (xml_escape(url), umonth)
    94         monthlink = u'<a href="%s">%s</a>' % (xml_escape(url), umonth)
    95         return CALENDAR(self.req) % (monthlink, '\n'.join(rows))
    95         return CALENDAR(self._cw) % (monthlink, '\n'.join(rows))
    96 
    96 
    97     def _mk_schedule(self, begin, end, itemvid='calendaritem'):
    97     def _mk_schedule(self, begin, end, itemvid='calendaritem'):
    98         """private method that gathers information from resultset
    98         """private method that gathers information from resultset
    99         and builds calendars according to it
    99         and builds calendars according to it
   100 
   100 
   104 
   104 
   105         returns { day1 : { hour : [views] },
   105         returns { day1 : { hour : [views] },
   106                   day2 : { hour : [views] } ... }
   106                   day2 : { hour : [views] } ... }
   107         """
   107         """
   108         # put this here since all sub views are calling this method
   108         # put this here since all sub views are calling this method
   109         self.req.add_css('cubicweb.calendar.css')
   109         self._cw.add_css('cubicweb.calendar.css')
   110         schedule = {}
   110         schedule = {}
   111         for row in xrange(len(self.rset.rows)):
   111         for row in xrange(len(self.cw_rset.rows)):
   112             entity = self.rset.get_entity(row,0)
   112             entity = self.cw_rset.get_entity(row,0)
   113             infos = u'<div class="event">'
   113             infos = u'<div class="event">'
   114             infos += self.view(itemvid, self.rset, row=row)
   114             infos += self.view(itemvid, self.cw_rset, row=row)
   115             infos += u'</div>'
   115             infos += u'</div>'
   116             for date_ in entity.matching_dates(begin, end):
   116             for date_ in entity.matching_dates(begin, end):
   117                 day = date(date_.year, date_.month, date_.day)
   117                 day = date(date_.year, date_.month, date_.day)
   118                 try:
   118                 try:
   119                     dt = time(date_.hour, date_.minute, date_.second)
   119                     dt = time(date_.hour, date_.minute, date_.second)
   165     __regid__ = 'calendaryear'
   165     __regid__ = 'calendaryear'
   166     title = _('calendar (year)')
   166     title = _('calendar (year)')
   167 
   167 
   168     def call(self, year=None, month=None):
   168     def call(self, year=None, month=None):
   169         """this view renders a 3x3 calendars' table"""
   169         """this view renders a 3x3 calendars' table"""
   170         year = year or int(self.req.form.get('year', date.today().year))
   170         year = year or int(self._cw.form.get('year', date.today().year))
   171         month = month or int(self.req.form.get('month', date.today().month))
   171         month = month or int(self._cw.form.get('month', date.today().month))
   172         center_date = date(year, month, 1)
   172         center_date = date(year, month, 1)
   173         begin, end = self.get_date_range(day=center_date)
   173         begin, end = self.get_date_range(day=center_date)
   174         schedule = self._mk_schedule(begin, end)
   174         schedule = self._mk_schedule(begin, end)
   175         self.w(self.nav_header(center_date))
   175         self.w(self.nav_header(center_date))
   176         calendars = tuple(self.build_calendars(schedule, begin, end))
   176         calendars = tuple(self.build_calendars(schedule, begin, end))
   183     """
   183     """
   184     __regid__ = 'calendarsemester'
   184     __regid__ = 'calendarsemester'
   185     title = _('calendar (semester)')
   185     title = _('calendar (semester)')
   186 
   186 
   187     def call(self, year=None, month=None):
   187     def call(self, year=None, month=None):
   188         year = year or int(self.req.form.get('year', date.today().year))
   188         year = year or int(self._cw.form.get('year', date.today().year))
   189         month = month or int(self.req.form.get('month', date.today().month))
   189         month = month or int(self._cw.form.get('month', date.today().month))
   190         begin = previous_month(date(year, month, 1), 2)
   190         begin = previous_month(date(year, month, 1), 2)
   191         end = next_month(date(year, month, 1), 3)
   191         end = next_month(date(year, month, 1), 3)
   192         schedule = self._mk_schedule(begin, end)
   192         schedule = self._mk_schedule(begin, end)
   193         self.w(self.nav_header(date(year, month, 1), 1, 6))
   193         self.w(self.nav_header(date(year, month, 1), 1, 6))
   194         self.w(u'<table class="semesterCalendar">')
   194         self.w(u'<table class="semesterCalendar">')
   196         self.w(u'</table>')
   196         self.w(u'</table>')
   197         self.w(self.nav_header(date(year, month, 1), 1, 6))
   197         self.w(self.nav_header(date(year, month, 1), 1, 6))
   198 
   198 
   199     def build_calendars(self, schedule, begin, end):
   199     def build_calendars(self, schedule, begin, end):
   200         self.w(u'<tr>')
   200         self.w(u'<tr>')
   201         rql = self.rset.printable_rql()
   201         rql = self.cw_rset.printable_rql()
   202         for cur_month in date_range(begin, end, incmonth=1):
   202         for cur_month in date_range(begin, end, incmonth=1):
   203             umonth = u'%s&#160;%s' % (self.format_date(cur_month, '%B'), cur_month.year)
   203             umonth = u'%s&#160;%s' % (self.format_date(cur_month, '%B'), cur_month.year)
   204             url = self.build_url(rql=rql, vid=self.id,
   204             url = self.build_url(rql=rql, vid=self.__regid__,
   205                                  year=cur_month.year, month=cur_month.month)
   205                                  year=cur_month.year, month=cur_month.month)
   206             self.w(u'<th colspan="2"><a href="%s">%s</a></th>' % (xml_escape(url),
   206             self.w(u'<th colspan="2"><a href="%s">%s</a></th>' % (xml_escape(url),
   207                                                                   umonth))
   207                                                                   umonth))
   208         self.w(u'</tr>')
   208         self.w(u'</tr>')
   209         _ = self.req._
   209         _ = self._cw._
   210         for day_num in xrange(31):
   210         for day_num in xrange(31):
   211             self.w(u'<tr>')
   211             self.w(u'<tr>')
   212             for cur_month in date_range(begin, end, incmonth=1):
   212             for cur_month in date_range(begin, end, incmonth=1):
   213                 if day_num >= days_in_month(cur_month):
   213                 if day_num >= days_in_month(cur_month):
   214                     self.w(u'%s%s' % (NO_CELL, NO_CELL))
   214                     self.w(u'%s%s' % (NO_CELL, NO_CELL))
   231     """this view renders a 3x1 calendars' table"""
   231     """this view renders a 3x1 calendars' table"""
   232     __regid__ = 'calendarmonth'
   232     __regid__ = 'calendarmonth'
   233     title = _('calendar (month)')
   233     title = _('calendar (month)')
   234 
   234 
   235     def call(self, year=None, month=None):
   235     def call(self, year=None, month=None):
   236         year = year or int(self.req.form.get('year', date.today().year))
   236         year = year or int(self._cw.form.get('year', date.today().year))
   237         month = month or int(self.req.form.get('month', date.today().month))
   237         month = month or int(self._cw.form.get('month', date.today().month))
   238         center_date = date(year, month, 1)
   238         center_date = date(year, month, 1)
   239         begin, end = self.get_date_range(day=center_date, shift=1)
   239         begin, end = self.get_date_range(day=center_date, shift=1)
   240         schedule = self._mk_schedule(begin, end)
   240         schedule = self._mk_schedule(begin, end)
   241         calendars = self.build_calendars(schedule, begin, end)
   241         calendars = self.build_calendars(schedule, begin, end)
   242         self.w(self.nav_header(center_date, 1, 3))
   242         self.w(self.nav_header(center_date, 1, 3))
   248     """this view renders a calendar for week events"""
   248     """this view renders a calendar for week events"""
   249     __regid__ = 'calendarweek'
   249     __regid__ = 'calendarweek'
   250     title = _('calendar (week)')
   250     title = _('calendar (week)')
   251 
   251 
   252     def call(self, year=None, week=None):
   252     def call(self, year=None, week=None):
   253         year = year or int(self.req.form.get('year', date.today().year))
   253         year = year or int(self._cw.form.get('year', date.today().year))
   254         week = week or int(self.req.form.get('week', date.today().isocalendar()[1]))
   254         week = week or int(self._cw.form.get('week', date.today().isocalendar()[1]))
   255         day0 = date(year, 1, 1)
   255         day0 = date(year, 1, 1)
   256         first_day_of_week = day0 - day0.weekday()*ONEDAY + ONEWEEK
   256         first_day_of_week = day0 - day0.weekday()*ONEDAY + ONEWEEK
   257         begin, end = first_day_of_week- ONEWEEK, first_day_of_week + 2*ONEWEEK
   257         begin, end = first_day_of_week- ONEWEEK, first_day_of_week + 2*ONEWEEK
   258         schedule = self._mk_schedule(begin, end, itemvid='calendarlargeitem')
   258         schedule = self._mk_schedule(begin, end, itemvid='calendarlargeitem')
   259         self.w(self.nav_header(first_day_of_week))
   259         self.w(self.nav_header(first_day_of_week))
   264         self.build_calendar(schedule, _weeks)
   264         self.build_calendar(schedule, _weeks)
   265         self.w(u'</table>')
   265         self.w(u'</table>')
   266         self.w(self.nav_header(first_day_of_week))
   266         self.w(self.nav_header(first_day_of_week))
   267 
   267 
   268     def build_calendar(self, schedule, weeks):
   268     def build_calendar(self, schedule, weeks):
   269         rql = self.rset.printable_rql()
   269         rql = self.cw_rset.printable_rql()
   270         _ = self.req._
   270         _ = self._cw._
   271         for monday, sunday in weeks:
   271         for monday, sunday in weeks:
   272             umonth = self.format_date(monday, '%B %Y')
   272             umonth = self.format_date(monday, '%B %Y')
   273             url = self.build_url(rql=rql, vid='calendarmonth',
   273             url = self.build_url(rql=rql, vid='calendarmonth',
   274                                  year=monday.year, month=monday.month)
   274                                  year=monday.year, month=monday.month)
   275             monthlink = '<a href="%s">%s</a>' % (xml_escape(url), umonth)
   275             monthlink = '<a href="%s">%s</a>' % (xml_escape(url), umonth)
   291         """prints shortcut links to go to previous/next steps (month|week)"""
   291         """prints shortcut links to go to previous/next steps (month|week)"""
   292         prev1 = date - ONEWEEK * smallshift
   292         prev1 = date - ONEWEEK * smallshift
   293         prev2 = date - ONEWEEK * bigshift
   293         prev2 = date - ONEWEEK * bigshift
   294         next1 = date + ONEWEEK * smallshift
   294         next1 = date + ONEWEEK * smallshift
   295         next2 = date + ONEWEEK * bigshift
   295         next2 = date + ONEWEEK * bigshift
   296         rql = self.rset.printable_rql()
   296         rql = self.cw_rset.printable_rql()
   297         return self.NAV_HEADER % (
   297         return self.NAV_HEADER % (
   298             xml_escape(self.build_url(rql=rql, vid=self.id, year=prev2.year, week=prev2.isocalendar()[1])),
   298             xml_escape(self.build_url(rql=rql, vid=self.__regid__, year=prev2.year, week=prev2.isocalendar()[1])),
   299             xml_escape(self.build_url(rql=rql, vid=self.id, year=prev1.year, week=prev1.isocalendar()[1])),
   299             xml_escape(self.build_url(rql=rql, vid=self.__regid__, year=prev1.year, week=prev1.isocalendar()[1])),
   300             xml_escape(self.build_url(rql=rql, vid=self.id, year=next1.year, week=next1.isocalendar()[1])),
   300             xml_escape(self.build_url(rql=rql, vid=self.__regid__, year=next1.year, week=next1.isocalendar()[1])),
   301             xml_escape(self.build_url(rql=rql, vid=self.id, year=next2.year, week=next2.isocalendar()[1])))
   301             xml_escape(self.build_url(rql=rql, vid=self.__regid__, year=next2.year, week=next2.isocalendar()[1])))
   302 
   302 
   303 
   303 
   304 
   304 
   305 class AMPMYearCalendarView(YearCalendarView):
   305 class AMPMYearCalendarView(YearCalendarView):
   306     __regid__ = 'ampmcalendaryear'
   306     __regid__ = 'ampmcalendaryear'
   309     def build_calendar(self, schedule, first_day):
   309     def build_calendar(self, schedule, first_day):
   310         """method responsible for building *one* HTML calendar"""
   310         """method responsible for building *one* HTML calendar"""
   311         umonth = self.format_date(first_day, '%B %Y') # localized month name
   311         umonth = self.format_date(first_day, '%B %Y') # localized month name
   312         rows = [] # each row is: (am,pm), (am,pm) ... week_title
   312         rows = [] # each row is: (am,pm), (am,pm) ... week_title
   313         current_row = [(NO_CELL, NO_CELL, NO_CELL)] * first_day.weekday()
   313         current_row = [(NO_CELL, NO_CELL, NO_CELL)] * first_day.weekday()
   314         rql = self.rset.printable_rql()
   314         rql = self.cw_rset.printable_rql()
   315         for daynum in xrange(0, days_in_month(first_day)):
   315         for daynum in xrange(0, days_in_month(first_day)):
   316             # build cells day
   316             # build cells day
   317             day = first_day + timedelta(daynum)
   317             day = first_day + timedelta(daynum)
   318             events = schedule.get(day)
   318             events = schedule.get(day)
   319             if events:
   319             if events:
   349             formatted_rows.append('<tr class="pmRow"><td>&#160;</td>%s</tr>'% '\n'.join(pm_row))
   349             formatted_rows.append('<tr class="pmRow"><td>&#160;</td>%s</tr>'% '\n'.join(pm_row))
   350         # tigh everything together
   350         # tigh everything together
   351         url = self.build_url(rql=rql, vid='ampmcalendarmonth',
   351         url = self.build_url(rql=rql, vid='ampmcalendarmonth',
   352                              year=first_day.year, month=first_day.month)
   352                              year=first_day.year, month=first_day.month)
   353         monthlink = '<a href="%s">%s</a>' % (xml_escape(url), umonth)
   353         monthlink = '<a href="%s">%s</a>' % (xml_escape(url), umonth)
   354         return CALENDAR(self.req) % (monthlink, '\n'.join(formatted_rows))
   354         return CALENDAR(self._cw) % (monthlink, '\n'.join(formatted_rows))
   355 
   355 
   356 
   356 
   357 
   357 
   358 class AMPMSemesterCalendarView(SemesterCalendarView):
   358 class AMPMSemesterCalendarView(SemesterCalendarView):
   359     """this view renders a 3x1 calendars' table"""
   359     """this view renders a 3x1 calendars' table"""
   360     __regid__ = 'ampmcalendarsemester'
   360     __regid__ = 'ampmcalendarsemester'
   361     title = _('am/pm calendar (semester)')
   361     title = _('am/pm calendar (semester)')
   362 
   362 
   363     def build_calendars(self, schedule, begin, end):
   363     def build_calendars(self, schedule, begin, end):
   364         self.w(u'<tr>')
   364         self.w(u'<tr>')
   365         rql = self.rset.printable_rql()
   365         rql = self.cw_rset.printable_rql()
   366         for cur_month in date_range(begin, end, incmonth=1):
   366         for cur_month in date_range(begin, end, incmonth=1):
   367             umonth = u'%s&#160;%s' % (self.format_date(cur_month, '%B'), cur_month.year)
   367             umonth = u'%s&#160;%s' % (self.format_date(cur_month, '%B'), cur_month.year)
   368             url = self.build_url(rql=rql, vid=self.id,
   368             url = self.build_url(rql=rql, vid=self.__regid__,
   369                                  year=cur_month.year, month=cur_month.month)
   369                                  year=cur_month.year, month=cur_month.month)
   370             self.w(u'<th colspan="3"><a href="%s">%s</a></th>' % (xml_escape(url),
   370             self.w(u'<th colspan="3"><a href="%s">%s</a></th>' % (xml_escape(url),
   371                                                                   umonth))
   371                                                                   umonth))
   372         self.w(u'</tr>')
   372         self.w(u'</tr>')
   373         _ = self.req._
   373         _ = self._cw._
   374         for day_num in xrange(31):
   374         for day_num in xrange(31):
   375             self.w(u'<tr>')
   375             self.w(u'<tr>')
   376             for cur_month in date_range(begin, end, incmonth=1):
   376             for cur_month in date_range(begin, end, incmonth=1):
   377                 if day_num >= days_in_month(cur_month):
   377                 if day_num >= days_in_month(cur_month):
   378                     self.w(u'%s%s%s' % (NO_CELL, NO_CELL, NO_CELL))
   378                     self.w(u'%s%s%s' % (NO_CELL, NO_CELL, NO_CELL))
   400     def build_calendar(self, schedule, first_day):
   400     def build_calendar(self, schedule, first_day):
   401         """method responsible for building *one* HTML calendar"""
   401         """method responsible for building *one* HTML calendar"""
   402         umonth = self.format_date(first_day, '%B %Y') # localized month name
   402         umonth = self.format_date(first_day, '%B %Y') # localized month name
   403         rows = [] # each row is: (am,pm), (am,pm) ... week_title
   403         rows = [] # each row is: (am,pm), (am,pm) ... week_title
   404         current_row = [(NO_CELL, NO_CELL, NO_CELL)] * first_day.weekday()
   404         current_row = [(NO_CELL, NO_CELL, NO_CELL)] * first_day.weekday()
   405         rql = self.rset.printable_rql()
   405         rql = self.cw_rset.printable_rql()
   406         for daynum in xrange(0, days_in_month(first_day)):
   406         for daynum in xrange(0, days_in_month(first_day)):
   407             # build cells day
   407             # build cells day
   408             day = first_day + timedelta(daynum)
   408             day = first_day + timedelta(daynum)
   409             events = schedule.get(day)
   409             events = schedule.get(day)
   410             if events:
   410             if events:
   442         # tigh everything together
   442         # tigh everything together
   443         url = self.build_url(rql=rql, vid='ampmcalendarmonth',
   443         url = self.build_url(rql=rql, vid='ampmcalendarmonth',
   444                              year=first_day.year, month=first_day.month)
   444                              year=first_day.year, month=first_day.month)
   445         monthlink = '<a href="%s">%s</a>' % (xml_escape(url),
   445         monthlink = '<a href="%s">%s</a>' % (xml_escape(url),
   446                                              umonth)
   446                                              umonth)
   447         return CALENDAR(self.req) % (monthlink, '\n'.join(formatted_rows))
   447         return CALENDAR(self._cw) % (monthlink, '\n'.join(formatted_rows))
   448 
   448 
   449 
   449 
   450 
   450 
   451 class AMPMWeekCalendarView(WeekCalendarView):
   451 class AMPMWeekCalendarView(WeekCalendarView):
   452     """this view renders a 3x1 calendars' table"""
   452     """this view renders a 3x1 calendars' table"""
   453     __regid__ = 'ampmcalendarweek'
   453     __regid__ = 'ampmcalendarweek'
   454     title = _('am/pm calendar (week)')
   454     title = _('am/pm calendar (week)')
   455 
   455 
   456     def build_calendar(self, schedule, weeks):
   456     def build_calendar(self, schedule, weeks):
   457         rql = self.rset.printable_rql()
   457         rql = self.cw_rset.printable_rql()
   458         w = self.w
   458         w = self.w
   459         _ = self.req._
   459         _ = self._cw._
   460         for monday, sunday in weeks:
   460         for monday, sunday in weeks:
   461             umonth = self.format_date(monday, '%B %Y')
   461             umonth = self.format_date(monday, '%B %Y')
   462             url = self.build_url(rql=rql, vid='ampmcalendarmonth',
   462             url = self.build_url(rql=rql, vid='ampmcalendarmonth',
   463                                  year=monday.year, month=monday.month)
   463                                  year=monday.year, month=monday.month)
   464             monthlink = '<a href="%s">%s</a>' % (xml_escape(url), umonth)
   464             monthlink = '<a href="%s">%s</a>' % (xml_escape(url), umonth)