web/views/old_calendar.py
changeset 2381 caad2367d940
parent 2312 af4d8f75c5db
child 2789 39712da6f397
child 2996 866a2c135c33
equal deleted inserted replaced
2374:ea1a44e4ad62 2381:caad2367d940
     6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
     6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
     7 """
     7 """
     8 
     8 
     9 from datetime import date, time, timedelta
     9 from datetime import date, time, timedelta
    10 
    10 
    11 from logilab.mtconverter import html_escape
    11 from logilab.mtconverter import xml_escape
    12 
    12 
    13 from cubicweb.interfaces import ICalendarViews
    13 from cubicweb.interfaces import ICalendarViews
    14 from cubicweb.utils import ONEDAY, ONEWEEK, date_range, first_day, last_day, previous_month, next_month, days_in_month
    14 from cubicweb.utils import ONEDAY, ONEWEEK, date_range, first_day, last_day, previous_month, next_month, days_in_month
    15 from cubicweb.selectors import implements
    15 from cubicweb.selectors import implements
    16 from cubicweb.view import EntityView
    16 from cubicweb.view import EntityView
    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.rset.printable_rql()
    48         return self.NAV_HEADER % (
    48         return self.NAV_HEADER % (
    49             html_escape(self.build_url(rql=rql, vid=self.id, year=prev2.year,
    49             xml_escape(self.build_url(rql=rql, vid=self.id, year=prev2.year,
    50                                        month=prev2.month)),
    50                                        month=prev2.month)),
    51             html_escape(self.build_url(rql=rql, vid=self.id, year=prev1.year,
    51             xml_escape(self.build_url(rql=rql, vid=self.id, year=prev1.year,
    52                                        month=prev1.month)),
    52                                        month=prev1.month)),
    53             html_escape(self.build_url(rql=rql, vid=self.id, year=next1.year,
    53             xml_escape(self.build_url(rql=rql, vid=self.id, year=next1.year,
    54                                        month=next1.month)),
    54                                        month=next1.month)),
    55             html_escape(self.build_url(rql=rql, vid=self.id, year=next2.year,
    55             xml_escape(self.build_url(rql=rql, vid=self.id, 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 
    89         rql = self.rset.printable_rql()
    89         rql = self.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>' % (html_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.req) % (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
   201         rql = self.rset.printable_rql()
   201         rql = self.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&nbsp;%s' % (self.format_date(cur_month, '%B'), cur_month.year)
   203             umonth = u'%s&nbsp;%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.id,
   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>' % (html_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.req._
   210         for day_num in xrange(31):
   210         for day_num in xrange(31):
   211             self.w(u'<tr>')
   211             self.w(u'<tr>')
   270         _ = self.req._
   270         _ = self.req._
   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>' % (html_escape(url), umonth)
   275             monthlink = '<a href="%s">%s</a>' % (xml_escape(url), umonth)
   276             self.w(u'<tr><th colspan="3">%s %s (%s)</th></tr>' \
   276             self.w(u'<tr><th colspan="3">%s %s (%s)</th></tr>' \
   277                   % (_('week'), monday.isocalendar()[1], monthlink))
   277                   % (_('week'), monday.isocalendar()[1], monthlink))
   278             for day in date_range(monday, sunday):
   278             for day in date_range(monday, sunday):
   279                 self.w(u'<tr>')
   279                 self.w(u'<tr>')
   280                 self.w(u'<td>%s</td>' % _(WEEKDAYS[day.weekday()]))
   280                 self.w(u'<td>%s</td>' % _(WEEKDAYS[day.weekday()]))
   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.rset.printable_rql()
   297         return self.NAV_HEADER % (
   297         return self.NAV_HEADER % (
   298             html_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.id, year=prev2.year, week=prev2.isocalendar()[1])),
   299             html_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.id, year=prev1.year, week=prev1.isocalendar()[1])),
   300             html_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.id, year=next1.year, week=next1.isocalendar()[1])),
   301             html_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.id, year=next2.year, week=next2.isocalendar()[1])))
   302 
   302 
   303 
   303 
   304 
   304 
   305 class AMPMYearCalendarView(YearCalendarView):
   305 class AMPMYearCalendarView(YearCalendarView):
   306     id = 'ampmcalendaryear'
   306     id = 'ampmcalendaryear'
   324                                     AMPM_EMPTY % ("pmCell", "pm")))
   324                                     AMPM_EMPTY % ("pmCell", "pm")))
   325             # store & reset current row on Sundays
   325             # store & reset current row on Sundays
   326             if day.weekday() == 6:
   326             if day.weekday() == 6:
   327                 url = self.build_url(rql=rql, vid='ampmcalendarweek',
   327                 url = self.build_url(rql=rql, vid='ampmcalendarweek',
   328                                      year=day.year, week=day.isocalendar()[1])
   328                                      year=day.year, week=day.isocalendar()[1])
   329                 weeklink = '<a href="%s">%s</a>' % (html_escape(url),
   329                 weeklink = '<a href="%s">%s</a>' % (xml_escape(url),
   330                                                     day.isocalendar()[1])
   330                                                     day.isocalendar()[1])
   331                 current_row.append(WEEKNUM_CELL % weeklink)
   331                 current_row.append(WEEKNUM_CELL % weeklink)
   332                 rows.append(current_row)
   332                 rows.append(current_row)
   333                 current_row = []
   333                 current_row = []
   334         current_row.extend([(NO_CELL, NO_CELL, NO_CELL)] * (6-day.weekday()))
   334         current_row.extend([(NO_CELL, NO_CELL, NO_CELL)] * (6-day.weekday()))
   335         url = self.build_url(rql=rql, vid='ampmcalendarweek',
   335         url = self.build_url(rql=rql, vid='ampmcalendarweek',
   336                              year=day.year, week=day.isocalendar()[1])
   336                              year=day.year, week=day.isocalendar()[1])
   337         weeklink = '<a href="%s">%s</a>' % (html_escape(url), day.isocalendar()[1])
   337         weeklink = '<a href="%s">%s</a>' % (xml_escape(url), day.isocalendar()[1])
   338         current_row.append(WEEKNUM_CELL % weeklink)
   338         current_row.append(WEEKNUM_CELL % weeklink)
   339         rows.append(current_row)
   339         rows.append(current_row)
   340         # build two rows for each week: am & pm
   340         # build two rows for each week: am & pm
   341         formatted_rows = []
   341         formatted_rows = []
   342         for row in rows:
   342         for row in rows:
   348             formatted_rows.append('<tr class="amRow"><td>&nbsp;</td>%s</tr>'% '\n'.join(am_row))
   348             formatted_rows.append('<tr class="amRow"><td>&nbsp;</td>%s</tr>'% '\n'.join(am_row))
   349             formatted_rows.append('<tr class="pmRow"><td>&nbsp;</td>%s</tr>'% '\n'.join(pm_row))
   349             formatted_rows.append('<tr class="pmRow"><td>&nbsp;</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>' % (html_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.req) % (monthlink, '\n'.join(formatted_rows))
   355 
   355 
   356 
   356 
   357 
   357 
   358 class AMPMSemesterCalendarView(SemesterCalendarView):
   358 class AMPMSemesterCalendarView(SemesterCalendarView):
   365         rql = self.rset.printable_rql()
   365         rql = self.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&nbsp;%s' % (self.format_date(cur_month, '%B'), cur_month.year)
   367             umonth = u'%s&nbsp;%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.id,
   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>' % (html_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.req._
   374         for day_num in xrange(31):
   374         for day_num in xrange(31):
   375             self.w(u'<tr>')
   375             self.w(u'<tr>')
   415                                     AMPM_EMPTY % ("pmCell", "pm")))
   415                                     AMPM_EMPTY % ("pmCell", "pm")))
   416             # store & reset current row on Sundays
   416             # store & reset current row on Sundays
   417             if day.weekday() == 6:
   417             if day.weekday() == 6:
   418                 url = self.build_url(rql=rql, vid='ampmcalendarweek',
   418                 url = self.build_url(rql=rql, vid='ampmcalendarweek',
   419                                      year=day.year, week=day.isocalendar()[1])
   419                                      year=day.year, week=day.isocalendar()[1])
   420                 weeklink = '<a href="%s">%s</a>' % (html_escape(url),
   420                 weeklink = '<a href="%s">%s</a>' % (xml_escape(url),
   421                                                     day.isocalendar()[1])
   421                                                     day.isocalendar()[1])
   422                 current_row.append(WEEKNUM_CELL % weeklink)
   422                 current_row.append(WEEKNUM_CELL % weeklink)
   423                 rows.append(current_row)
   423                 rows.append(current_row)
   424                 current_row = []
   424                 current_row = []
   425         current_row.extend([(NO_CELL, NO_CELL, NO_CELL)] * (6-day.weekday()))
   425         current_row.extend([(NO_CELL, NO_CELL, NO_CELL)] * (6-day.weekday()))
   426         url = self.build_url(rql=rql, vid='ampmcalendarweek',
   426         url = self.build_url(rql=rql, vid='ampmcalendarweek',
   427                              year=day.year, week=day.isocalendar()[1])
   427                              year=day.year, week=day.isocalendar()[1])
   428         weeklink = '<a href="%s">%s</a>' % (html_escape(url),
   428         weeklink = '<a href="%s">%s</a>' % (xml_escape(url),
   429                                             day.isocalendar()[1])
   429                                             day.isocalendar()[1])
   430         current_row.append(WEEKNUM_CELL % weeklink)
   430         current_row.append(WEEKNUM_CELL % weeklink)
   431         rows.append(current_row)
   431         rows.append(current_row)
   432         # build two rows for each week: am & pm
   432         # build two rows for each week: am & pm
   433         formatted_rows = []
   433         formatted_rows = []
   440             formatted_rows.append('<tr class="amRow"><td>&nbsp;</td>%s</tr>'% '\n'.join(am_row))
   440             formatted_rows.append('<tr class="amRow"><td>&nbsp;</td>%s</tr>'% '\n'.join(am_row))
   441             formatted_rows.append('<tr class="pmRow"><td>&nbsp;</td>%s</tr>'% '\n'.join(pm_row))
   441             formatted_rows.append('<tr class="pmRow"><td>&nbsp;</td>%s</tr>'% '\n'.join(pm_row))
   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>' % (html_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.req) % (monthlink, '\n'.join(formatted_rows))
   448 
   448 
   449 
   449 
   450 
   450 
   459         _ = self.req._
   459         _ = self.req._
   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>' % (html_escape(url), umonth)
   464             monthlink = '<a href="%s">%s</a>' % (xml_escape(url), umonth)
   465             w(u'<tr>%s</tr>' % (
   465             w(u'<tr>%s</tr>' % (
   466                 WEEK_TITLE % (_('week'), monday.isocalendar()[1], monthlink)))
   466                 WEEK_TITLE % (_('week'), monday.isocalendar()[1], monthlink)))
   467             w(u'<tr><th>%s</th><th>&nbsp;</th></tr>'% _(u'Date'))
   467             w(u'<tr><th>%s</th><th>&nbsp;</th></tr>'% _(u'Date'))
   468             for day in date_range(monday, sunday):
   468             for day in date_range(monday, sunday):
   469                 events = schedule.get(day)
   469                 events = schedule.get(day)