cubicweb/web/views/calendar.py
author Laurent Peuch <cortex@worlddomination.be>
Thu, 19 Dec 2019 08:13:22 +0100
changeset 12825 71a842bdf81d
parent 11942 756710144b3f
child 12880 59d4ad7e7df3
permissions -rw-r--r--
[python3] replace 'unicode' by 'str'
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8941
7b26fe71404f drop xhtml content-type support (closes #2065651)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8307
diff changeset
     1
# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4582
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    18
"""html calendar views"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11188
diff changeset
    20
10666
7f6b5f023884 [py3k] replace '_ = unicode' in global scope (closes #7589459)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9256
diff changeset
    21
from cubicweb import _
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    23
import copy
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    24
from datetime import timedelta
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    26
from logilab.mtconverter import xml_escape
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    27
from logilab.common.date import todatetime
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    28
8153
e225e70239ed [views] calendar id in CalendarView must be unique (closes #2143864)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 7183
diff changeset
    29
from cubicweb.utils import json_dumps, make_uid
9256
697a8181ba30 remove 3.9 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8941
diff changeset
    30
from cubicweb.predicates import adaptable
697a8181ba30 remove 3.9 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8941
diff changeset
    31
from cubicweb.view import EntityView, EntityAdapter
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    32
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    33
# useful constants & functions ################################################
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    34
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    35
ONEDAY = timedelta(1)
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    36
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    37
WEEKDAYS = (_("monday"), _("tuesday"), _("wednesday"), _("thursday"),
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    38
            _("friday"), _("saturday"), _("sunday"))
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    39
MONTHNAMES = ( _('january'), _('february'), _('march'), _('april'), _('may'),
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    40
               _('june'), _('july'), _('august'), _('september'), _('october'),
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    41
               _('november'), _('december')
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    42
               )
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    43
11942
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    44
ICAL_EVENT = "event"
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    45
ICAL_TODO = "todo"
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    46
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    47
class ICalendarableAdapter(EntityAdapter):
6864
ea95004494a2 [adapters] fix #1424467 caused by precedence of bw compat method while the adapter is concret for a given class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5895
diff changeset
    48
    __needs_bw_compat__ = True
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    49
    __regid__ = 'ICalendarable'
9256
697a8181ba30 remove 3.9 bw compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8941
diff changeset
    50
    __abstract__ = True
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    51
11942
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    52
    # component type
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    53
    component = ICAL_EVENT
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    54
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    55
    @property
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    56
    def start(self):
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    57
        """return start date"""
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    58
        raise NotImplementedError
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    59
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    60
    @property
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    61
    def stop(self):
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
    62
        """return stop date"""
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    63
        raise NotImplementedError
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
1025
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
    66
# Calendar views ##############################################################
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
1644
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    68
try:
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    69
    from vobject import iCalendar
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
1644
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    71
    class iCalView(EntityView):
11942
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    72
        """A calendar view that generates a iCalendar file (RFC 5545)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
1644
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    74
        Does apply to ICalendarable compatible entities
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    75
        """
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    76
        __select__ = adaptable('ICalendarable')
4244
2c3de1953d00 rename need_navigation into paginable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
    77
        paginable = False
1644
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    78
        content_type = 'text/calendar'
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    79
        title = _('iCalendar')
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    80
        templatable = False
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2996
diff changeset
    81
        __regid__ = 'ical'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    82
1644
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    83
        def call(self):
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
    84
            ical = iCalendar()
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    85
            for i in range(len(self.cw_rset.rows)):
3457
0924d0d08d60 [api] __regid__, cw_* and friends
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3451
diff changeset
    86
                task = self.cw_rset.complete_entity(i, 0)
11942
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    87
                ical_task = task.cw_adapt_to('ICalendarable')
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    88
                if ical_task.component == ICAL_TODO:
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    89
                    elt = ical.add('vtodo')
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    90
                    stop_kw = "due"
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    91
                else:
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    92
                    elt = ical.add('vevent')
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    93
                    stop_kw = "dtend"
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    94
                elt.add('uid').value = task.absolute_url() # unique stable id
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    95
                elt.add('url').value = task.absolute_url()
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    96
                elt.add('summary').value = task.dc_title()
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    97
                elt.add('description').value = task.dc_description()
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    98
                if ical_task.start:
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
    99
                    elt.add('dtstart').value = ical_task.start
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
   100
                if ical_task.stop:
756710144b3f [ical] Create ICal events or todos depending on component type returned by adapter
Olivier CAYROL (Logilab) <Olivier.Cayrol@logilab.fr>
parents: 11767
diff changeset
   101
                    elt.add(stop_kw).value = ical_task.stop
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
1644
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
   103
            buff = ical.serialize()
12825
71a842bdf81d [python3] replace 'unicode' by 'str'
Laurent Peuch <cortex@worlddomination.be>
parents: 11942
diff changeset
   104
            if not isinstance(buff, str):
71a842bdf81d [python3] replace 'unicode' by 'str'
Laurent Peuch <cortex@worlddomination.be>
parents: 11942
diff changeset
   105
                buff = str(buff, self._cw.encoding)
1644
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
   106
            self.w(buff)
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
   107
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
   108
except ImportError:
45bec81a9e1c makes vobject optional
sylvain.thenault@logilab.fr
parents: 1635
diff changeset
   109
    pass
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   110
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   111
class hCalView(EntityView):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   112
    """A calendar view that generates a hCalendar file
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   113
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   114
    Does apply to ICalendarable compatible entities
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   115
    """
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2996
diff changeset
   116
    __regid__ = 'hcal'
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   117
    __select__ = adaptable('ICalendarable')
4244
2c3de1953d00 rename need_navigation into paginable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   118
    paginable = False
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   119
    title = _('hCalendar')
524
eee3983e29e9 hcal is a microformat and can be inserted in html
sylvain.thenault@logilab.fr
parents: 431
diff changeset
   120
    #templatable = False
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   121
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   122
    def call(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   123
        self.w(u'<div class="hcalendar">')
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   124
        for i in range(len(self.cw_rset.rows)):
3457
0924d0d08d60 [api] __regid__, cw_* and friends
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3451
diff changeset
   125
            task = self.cw_rset.complete_entity(i, 0)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   126
            self.w(u'<div class="vevent">')
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   127
            self.w(u'<h3 class="summary">%s</h3>' % xml_escape(task.dc_title()))
1881
75540944ae18 fix dc_description format arg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1802
diff changeset
   128
            self.w(u'<div class="description">%s</div>'
75540944ae18 fix dc_description format arg
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1802
diff changeset
   129
                   % task.dc_description(format='text/html'))
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   130
            icalendarable = task.cw_adapt_to('ICalendarable')
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   131
            if icalendarable.start:
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   132
                self.w(u'<abbr class="dtstart" title="%s">%s</abbr>'
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   133
                       % (icalendarable.start.isoformat(),
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   134
                          self._cw.format_date(icalendarable.start)))
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   135
            if icalendarable.stop:
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   136
                self.w(u'<abbr class="dtstop" title="%s">%s</abbr>'
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   137
                       % (icalendarable.stop.isoformat(),
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   138
                          self._cw.format_date(icalendarable.stop)))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   139
            self.w(u'</div>')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   140
        self.w(u'</div>')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   141
1025
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   142
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   143
class CalendarItemView(EntityView):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2996
diff changeset
   144
    __regid__ = 'calendaritem'
1025
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   145
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   146
    def cell_call(self, row, col, dates=False):
3457
0924d0d08d60 [api] __regid__, cw_* and friends
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3451
diff changeset
   147
        task = self.cw_rset.complete_entity(row, 0)
1025
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   148
        task.view('oneline', w=self.w)
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   149
        if dates:
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   150
            icalendarable = task.cw_adapt_to('ICalendarable')
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   151
            if icalendarable.start and icalendarable.stop:
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   152
                self.w('<br/> %s' % self._cw._('from %(date)s')
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   153
                       % {'date': self._cw.format_date(icalendarable.start)})
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   154
                self.w('<br/> %s' % self._cw._('to %(date)s')
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   155
                       % {'date': self._cw.format_date(icalendarable.stop)})
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   156
            else:
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   157
                self.w('<br/>%s'%self._cw.format_date(icalendarable.start
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   158
                                                      or icalendarable.stop))
1604
fd943737d630 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   159
fd943737d630 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   160
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   161
class _TaskEntry(object):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   162
    def __init__(self, task, color, index=0):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   163
        self.task = task
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   164
        self.color = color
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   165
        self.index = index
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   166
        self.length = 1
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   167
        icalendarable = task.cw_adapt_to('ICalendarable')
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   168
        self.start = icalendarable.start
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   169
        self.stop = icalendarable.stop
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   170
1025
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   171
    def in_working_hours(self):
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   172
        """predicate returning True is the task is in working hours"""
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   173
        if todatetime(self.start).hour > 7 and todatetime(self.stop).hour < 20:
1025
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   174
            return True
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   175
        return False
1604
fd943737d630 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   176
1025
aebf37f460c1 some datetime fixes
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   177
    def is_one_day_task(self):
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   178
        return self.start and self.stop and self.start.isocalendar() == self.stop.isocalendar()
1604
fd943737d630 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   179
fd943737d630 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   180
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   181
class CalendarView(EntityView):
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   182
    __regid__ = 'calendar'
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   183
    __select__ = adaptable('ICalendarable')
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   184
4244
2c3de1953d00 rename need_navigation into paginable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4212
diff changeset
   185
    paginable = False
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   186
    title = _('calendar')
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   187
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   188
    fullcalendar_options = {
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   189
        'firstDay': 1,
8287
2d660890d3e8 [js] translate calendar in french (closes #2167866)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8153
diff changeset
   190
        'firstHour': 8,
2d660890d3e8 [js] translate calendar in french (closes #2167866)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8153
diff changeset
   191
        'defaultView': 'month',
2d660890d3e8 [js] translate calendar in french (closes #2167866)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8153
diff changeset
   192
        'editable': True,
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   193
        'header': {'left': 'prev,next today',
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   194
                   'center': 'title',
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   195
                   'right': 'month,agendaWeek,agendaDay',
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   196
                   },
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   197
        }
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   198
11187
5213dfe9cddb Enables css customization in CalendarView
Laura Médioni <laura.medioni@logilab.fr>
parents: 11057
diff changeset
   199
    def call(self, cssclass=""):
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   200
        self._cw.add_css(('fullcalendar.css', 'cubicweb.calendar.css'))
8295
302dcb3c6858 [js] fix $.fullCalendar.regional call (closes #2232028)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8290
diff changeset
   201
        self._cw.add_js(('jquery.ui.js', 'fullcalendar.min.js', 'jquery.qtip.min.js', 'fullcalendar.locale.js'))
8153
e225e70239ed [views] calendar id in CalendarView must be unique (closes #2143864)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 7183
diff changeset
   202
        self.calendar_id = 'cal' + make_uid('uid')
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   203
        self.add_onload()
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   204
        # write calendar div to load jquery fullcalendar object
11187
5213dfe9cddb Enables css customization in CalendarView
Laura Médioni <laura.medioni@logilab.fr>
parents: 11057
diff changeset
   205
        if cssclass:
5213dfe9cddb Enables css customization in CalendarView
Laura Médioni <laura.medioni@logilab.fr>
parents: 11057
diff changeset
   206
            self.w(u'<div class="%s" id="%s"></div>' % (cssclass, self.calendar_id))
5213dfe9cddb Enables css customization in CalendarView
Laura Médioni <laura.medioni@logilab.fr>
parents: 11057
diff changeset
   207
        else:
11188
744e57d74f6d [web/calendar] fix regression in previous changeset
Julien Cristau <julien.cristau@logilab.fr>
parents: 11187
diff changeset
   208
            self.w(u'<div id="%s"></div>' % self.calendar_id)
1604
fd943737d630 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   209
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   210
    def add_onload(self):
8290
d07dadd8f664 fix events display in calendar (closes #2167866)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8287
diff changeset
   211
        fullcalendar_options = self.fullcalendar_options.copy()
d07dadd8f664 fix events display in calendar (closes #2167866)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8287
diff changeset
   212
        fullcalendar_options['events'] = self.get_events()
8287
2d660890d3e8 [js] translate calendar in french (closes #2167866)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8153
diff changeset
   213
        # i18n
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   214
        # js callback to add a tooltip and to put html in event's title
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   215
        js = """
8287
2d660890d3e8 [js] translate calendar in french (closes #2167866)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8153
diff changeset
   216
        var options = $.fullCalendar.regional('%s', %s);
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   217
        options.eventRender = function(event, $element) {
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   218
          // add a tooltip for each event
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   219
          var div = '<div class="tooltip">'+ event.description+ '</div>';
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   220
          $element.append(div);
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   221
          // allow to have html tags in event's title
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   222
          $element.find('span.fc-event-title').html($element.find('span.fc-event-title').text());
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   223
        };
8153
e225e70239ed [views] calendar id in CalendarView must be unique (closes #2143864)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 7183
diff changeset
   224
        $("#%s").fullCalendar(options);
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   225
        """ #"
8290
d07dadd8f664 fix events display in calendar (closes #2167866)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 8287
diff changeset
   226
        self._cw.add_onload(js % (self._cw.lang, json_dumps(fullcalendar_options), self.calendar_id))
1604
fd943737d630 delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   227
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   228
    def get_events(self):
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   229
        events = []
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   230
        for entity in self.cw_rset.entities():
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   231
            icalendarable = entity.cw_adapt_to('ICalendarable')
7183
5ea2bfd55399 [web] fix CalendarView : both icalendarable.start and icalendarable.stop dates can be None
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 6882
diff changeset
   232
            if not (icalendarable.start and icalendarable.stop):
5ea2bfd55399 [web] fix CalendarView : both icalendarable.start and icalendarable.stop dates can be None
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 6882
diff changeset
   233
                continue
5ea2bfd55399 [web] fix CalendarView : both icalendarable.start and icalendarable.stop dates can be None
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 6882
diff changeset
   234
            start_date = icalendarable.start or  icalendarable.stop
6736
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   235
            event = {'eid': entity.eid,
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   236
                     'title': entity.view('calendaritem'),
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   237
                     'url': xml_escape(entity.absolute_url()),
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   238
                     'className': 'calevent',
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   239
                     'description': entity.view('tooltip'),
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   240
                     }
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   241
            event['start'] = start_date.strftime('%Y-%m-%dT%H:%M')
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   242
            event['allDay'] = True
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   243
            if icalendarable.stop:
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   244
                event['end'] = icalendarable.stop.strftime('%Y-%m-%dT%H:%M')
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   245
                event['allDay'] = False
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   246
            events.append(event)
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   247
        return events
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   248
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   249
class OneMonthCal(CalendarView):
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   250
    __regid__ = 'onemonthcal'
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   251
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   252
    title = _('one month')
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   253
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   254
class OneWeekCal(CalendarView):
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   255
    __regid__ = 'oneweekcal'
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   256
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   257
    title = _('one week')
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   258
    fullcalendar_options = CalendarView.fullcalendar_options.copy()
36ed2bf7ad3d [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar)
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents: 5895
diff changeset
   259
    fullcalendar_options['defaultView'] = 'agendaWeek'