1 # This file is part of Indico.
2 # Copyright (C) 2002 - 2015 European Organization for Nuclear Research (CERN).
4 # Indico is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License as
6 # published by the Free Software Foundation; either version 3 of the
7 # License, or (at your option) any later version.
9 # Indico is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with Indico; if not, see <http://www.gnu.org/licenses/>.
18 from flask
import session
19 from xml
.sax
.saxutils
import quoteattr
20 from datetime
import timedelta
, datetime
24 import MaKaC
.webinterface
.pages
.main
as main
25 import MaKaC
.webinterface
.urlHandlers
as urlHandlers
26 import MaKaC
.webinterface
.wcomponents
as wcomponents
27 from MaKaC
.webinterface
.wcalendar
import Overview
28 import MaKaC
.conference
as conference
29 from MaKaC
.conference
import CategoryManager
30 from indico
.core
.config
import Config
31 import MaKaC
.webinterface
.wcalendar
as wcalendar
32 import MaKaC
.webinterface
.linking
as linking
33 from MaKaC
.webinterface
.pages
.metadata
import WICalExportBase
34 from MaKaC
import schedule
35 import MaKaC
.common
.info
as info
36 from MaKaC
.i18n
import _
37 from indico
.modules
.users
.legacy
import AvatarUserWrapper
38 from indico
.modules
.groups
.legacy
import GroupWrapper
39 from indico
.util
.i18n
import i18nformat
41 from MaKaC
.webinterface
.common
.timezones
import TimezoneRegistry
42 from MaKaC
.webinterface
.common
.tools
import escape_html
43 from MaKaC
.common
.timezoneUtils
import DisplayTZ
,nowutc
44 from pytz
import timezone
45 from MaKaC
.common
.TemplateExec
import truncateTitle
47 from MaKaC
.common
.fossilize
import fossilize
49 from indico
.core
import signals
50 from indico
.core
.index
import Catalog
51 from indico
.modules
import ModuleHolder
52 from indico
.modules
.upcoming
import WUpcomingEvents
53 from indico
.util
.signals
import values_from_signal
56 class WPCategoryBase (main
.WPMainBase
):
57 def __init__(self
, rh
, categ
, **kwargs
):
58 main
.WPMainBase
.__init
__(self
, rh
, **kwargs
)
62 title
= "Indico [%s]"%(self
._target
.getName() )
66 def getCSSFiles(self
):
67 return main
.WPMainBase
.getCSSFiles(self
) + self
._asset
_env
['category_sass'].urls()
69 def _currentCategory(self
):
73 class WPCategoryDisplayBase(WPCategoryBase
):
77 class WCategoryDisplay(WICalExportBase
):
79 def __init__(self
, target
, wfReg
, tz
):
82 self
._timezone
= timezone(tz
)
84 def _getResourceName(self
, resource
):
85 if isinstance(resource
, conference
.Link
):
86 return resource
.getName() if resource
.getName() != "" and resource
.getName() != resource
.getURL() \
87 else resource
.getURL()
89 return resource
.getName() if resource
.getName() != "" and resource
.getName() != resource
.getFileName() \
90 else resource
.getFileName()
92 def getHTML(self
, aw
, params
):
94 return wcomponents
.WTemplated
.getHTML(self
, params
)
97 vars = wcomponents
.WTemplated
.getVars(self
)
98 isRootCategory
= self
._target
.getId() == "0"
100 vars["name"] = self
._target
.getName()
101 vars["description"] = self
._target
.getDescription()
102 vars["img"] = self
._target
.getIconURL()
103 vars["categ"] = vars["target"] = self
._target
;
104 vars["urlICSFile"] = urlHandlers
.UHCategoryToiCal
.getURL(self
._target
)
105 vars["isRootCategory"] = isRootCategory
106 vars["timezone"] = self
._timezone
107 subcats
= self
._target
.subcategories
109 confs
= self
._target
.conferences
111 cl
= wcomponents
.WCategoryList(self
._target
)
112 params
= {"categoryDisplayURLGen": vars["categDisplayURLGen"]}
113 vars["contents"] = cl
.getHTML( self
._aw
, params
)
115 pastEvents
= session
.get('fetchPastEventsFrom', set())
116 showPastEvents
= (self
._target
.getId() in pastEvents
or
117 (session
.user
and session
.user
.settings
.get('show_past_events')))
118 cl
= wcomponents
.WConferenceList(self
._target
, self
._wfReg
, showPastEvents
)
119 params
= {"conferenceDisplayURLGen": vars["confDisplayURLGen"]}
120 vars["contents"] = cl
.getHTML( self
._aw
, params
)
122 cl
= wcomponents
.WEmptyCategory()
123 vars["contents"] = cl
.getHTML( self
._aw
)
126 for mgr
in self
._target
.getManagerList():
127 if isinstance(mgr
, AvatarUserWrapper
):
128 mgrs
.append(("avatar", mgr
.getAbrName()))
129 elif isinstance(mgr
, GroupWrapper
):
130 mgrs
.append(("group", mgr
.getName()))
132 vars["managers"] = sorted(mgrs
)
135 if self
._target
.conferences
:
136 vars.update(self
._getIcalExportParams
(self
._aw
.getUser(), '/export/categ/%s.ics' % self
._target
.getId(), {'from':"-7d"}))
138 vars["isLoggedIn"] = self
._aw
.getUser() is not None
140 minfo
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance()
141 vars["isNewsActive"] = minfo
.isNewsActive()
143 # if this is the front page, include the
144 # upcoming event information (if there are any)
146 upcoming
= ModuleHolder().getById('upcoming_events')
147 upcoming_list
= upcoming
.getUpcomingEventList()
149 vars["upcomingEvents"] = WUpcomingEvents(self
._timezone
, upcoming_list
).getHTML(vars)
151 vars["upcomingEvents"] = ''
156 class WPCategoryDisplay(WPCategoryDisplayBase
):
158 def __init__(self
, rh
, target
, wfReg
):
159 WPCategoryDisplayBase
.__init
__(self
, rh
, target
)
161 tzUtil
= DisplayTZ(self
._getAW
(), target
) # None,useServerTZ=1)
162 self
._locTZ
= tzUtil
.getDisplayTZ()
164 def _getHeadContent(self
):
166 url
= urlHandlers
.UHCategoryToAtom
.getURL(self
._target
)
168 return WPCategoryDisplayBase
._getHeadContent
( self
) + \
169 i18nformat("""<link rel="alternate" type="application/atom+xml" title="_('Indico Atom Feed')" href="%s">""") % url
171 def _getBody( self
, params
):
172 wc
= WCategoryDisplay(self
._target
, self
._wfReg
, self
._locTZ
)
173 pars
= { "categDisplayURLGen": urlHandlers
.UHCategoryDisplay
.getURL
, \
174 "confDisplayURLGen": urlHandlers
.UHConferenceDisplay
.getURL
, \
175 "allowUserModif": self
._target
.canModify( self
._getAW
() ), \
176 "allowCreateEvent": self
._target
.canCreateConference(self
._getAW
().getUser()) }
177 page
= wc
.getHTML( self
._getAW
(), pars
)
180 def _getNavigationDrawer(self
):
181 pars
= {"target": self
._target
, "isModif": False}
182 return wcomponents
.WNavigationDrawer( pars
)
184 class WOverviewBreak( wcomponents
.WTemplated
):
186 def __init__( self
, aw
, entry
):
191 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
192 vars = wcomponents
.WTemplated
.getVars( self
)
193 vars["startTime"] = self
._break
.getAdjustedStartDate(tz
).strftime("%H:%M")
194 vars["title"] = self
._break
.getTitle()
198 class WOverviewContribBase( wcomponents
.WTemplated
):
200 def __init__( self
, aw
, contrib
, date
, details
="conference" ):
202 self
._contrib
= contrib
204 self
._details
= details
206 def _getSpeakerText( self
):
208 if self
._contrib
.getSpeakerText()!="":
209 l
.append( self
._contrib
.getSpeakerText() )
210 for av
in self
._contrib
.getSpeakerList():
211 l
.append( "%s"%av
.getAbrName() )
214 speakers
= "(%s)"%"; ".join(l
)
217 def _getLocation( self
):
219 if self
._contrib
.getOwnLocation() != None:
220 loc
= self
._contrib
.getLocation().getName()
222 if self
._contrib
.getOwnRoom() != None:
225 room
= self
._contrib
.getRoom().getName()
226 url
= linking
.RoomLinker().getURL( self
._contrib
.getRoom(), \
227 self
._contrib
.getLocation() )
229 room
= """<a href="%s" style="font-size: 0.9em">%s</a>"""%(url
, room
)
230 if loc
!= "" or room
!= "":
231 return "(%s %s)"%(loc
, room
)
235 def getHTML( self
, params
={} ):
236 return wcomponents
.WTemplated
.getHTML( self
, params
)
239 vars = wcomponents
.WTemplated
.getVars( self
)
240 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
241 vars["timezone"] = tz
242 vars["startTime"] = self
._contrib
.getAdjustedStartDate(tz
).strftime( "%H:%M" )
243 vars["title"] = self
._contrib
.getTitle()
244 vars["speakers"] = self
._getSpeakerText
()
245 vars["location"] = self
._getLocation
()
249 class WOverviewContribFullDisplay( WOverviewContribBase
):
253 class WOverviewContribMinDisplay( WOverviewContribBase
):
257 class WOverviewContribution
:
259 def __init__( self
, aw
, contrib
, date
, details
="conference" ):
262 """ This is needed for the future? The two
263 templates are currently identical """
265 if contrib
.canAccess( aw
):
266 self
._comp
= WOverviewContribFullDisplay( aw
, \
271 self
._comp
= WOverviewContribMinDisplay( aw
, \
275 def getHTML( self
, params
={} ):
278 return self
._comp
.getHTML( params
)
281 class WOverviewSessionBase( wcomponents
.WTemplated
):
283 def __init__( self
, aw
, session
, date
, details
="conference" ):
285 self
._session
= session
287 self
._details
= details
289 def _getConvenerText( self
):
291 if self
._session
.getConvenerText()!="":
292 l
.append( self
._session
.getConvenerText() )
293 for av
in self
._session
.getConvenerList():
294 l
.append( "%s"%av
.getAbrName() )
297 conveners
= "(%s)"%"; ".join(l
)
300 def _getLocation( self
):
302 if self
._session
.getOwnLocation() != None:
303 loc
= self
._session
.getLocation().getName()
305 if self
._session
.getOwnRoom() != None:
308 url
= linking
.RoomLinker().getURL( self
._session
.getRoom(), \
309 self
._session
.getLocation() )
310 room
= self
._session
.getRoom().getName()
312 room
= """<a href="%s" style="font-size: 0.9em">%s</a>"""%(url
, room
)
313 if loc
!= "" or room
!= "":
314 return "(%s %s)"%(loc
, room
)
318 def _getBreakItem( self
, entry
):
319 wc
= WOverviewBreak( self
._aw
, entry
)
320 return wc
.getHTML( {} )
322 def _getDetails( self
):
323 if self
._details
!= "contribution":
326 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
327 for entry
in self
._session
.getSchedule().getEntriesOnDay( self
._date
):
328 if self
._details
== "contribution":
329 if isinstance( entry
, schedule
.LinkedTimeSchEntry
) and \
330 isinstance( entry
.getOwner(), conference
.Contribution
):
331 wc
= WOverviewContribution( self
._aw
, \
335 res
.append( wc
.getHTML( ) )
336 elif isinstance( entry
, schedule
.BreakTimeSchEntry
):
337 res
.append( self
._getBreakItem
( entry
) )
338 return "".join( res
)
341 vars = wcomponents
.WTemplated
.getVars( self
)
342 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
343 vars["startTime"] = self
._session
.getStartDate().astimezone(timezone(tz
)).strftime("%H:%M")
344 conf
=self
._session
.getConference()
345 import MaKaC
.webinterface
.webFactoryRegistry
as webFactoryRegistry
346 wr
= webFactoryRegistry
.WebFactoryRegistry()
347 wf
= wr
.getFactory(conf
)
352 if type != 'meeting':
353 vars["title"] = self
._session
.getTitle()
354 vars["titleUrl"] = None
356 vars["title"] = self
._session
.getTitle()
357 vars["titleUrl"] = """%s#%s""" % (urlHandlers
.UHConferenceDisplay
.getURL(conf
), self
._session
.getId())
358 vars["conveners"] = self
._getConvenerText
()
359 vars["location"] = self
._getLocation
()
360 vars["details"] = self
._getDetails
()
363 class WOverviewSessionSlot( WOverviewSessionBase
):
365 def __init__( self
, aw
, slot
, date
, details
="conference" ):
367 self
._session
= slot
.getSession()
370 self
._details
= details
372 def _getDetails( self
):
373 if self
._details
!= "contribution":
376 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
377 for entry
in self
._slot
.getSchedule().getEntriesOnDay( self
._date
):
378 if self
._details
== "contribution":
379 if isinstance( entry
, schedule
.LinkedTimeSchEntry
) and type(entry
.getOwner()) is conference
.Contribution
:
380 wc
= WOverviewContribution( self
._aw
, \
384 res
.append( wc
.getHTML( ) )
385 elif isinstance( entry
, schedule
.BreakTimeSchEntry
):
386 res
.append( self
._getBreakItem
( entry
) )
387 return "".join( res
)
389 class WOverviewSessionFullDisplay( WOverviewSessionBase
):
393 class WOverviewSessionMinDisplay( WOverviewSessionBase
):
395 def _getBreakItem( self
, entry
):
399 class WOverviewSession
:
401 def __init__( self
, aw
, session
, date
, details
="conference" ):
403 if session
.canAccess( aw
):
404 self
._comp
= WOverviewSessionFullDisplay( aw
, \
409 self
._comp
= WOverviewSessionMinDisplay( aw
, \
413 def getHTML( self
, params
):
416 return self
._comp
.getHTML( params
)
419 class WOverviewConfBase( wcomponents
.WTemplated
):
421 def __init__( self
, aw
, conference
, date
, url
, icons
, details
="conference", startTime
= None ):
422 self
._conf
= conference
425 self
._details
= details
428 self
._startTime
= startTime
431 def _getChairText( self
):
433 if self
._conf
.getChairmanText()!="":
434 l
.append( self
._conf
.getChairmanText() )
435 for av
in self
._conf
.getChairList():
436 l
.append( "%s"%av
.getFullName() )
439 chairs
= "(%s)"%"; ".join(l
)
442 def _getLocation( self
):
444 if self
._conf
.getLocation() != None:
445 loc
= self
._conf
.getLocation().getName()
447 if self
._conf
.getRoom() != None and self
._conf
.getRoom().getName() != None:
448 room
= self
._conf
.getRoom().getName()
449 url
= "javascript:redirectToRoomLoc('" + escape_html(room
) + "','" + escape_html(loc
) +"')"
451 room
= """<a href="%s" style="font-size: 0.9em">%s</a>"""%(url
, room
)
452 if loc
!= "" or room
!= "":
453 return "(%s%s)"%(loc
, room
)
457 def _getBreakItem( self
, entry
):
458 wc
= WOverviewBreak( self
._aw
, entry
)
459 return wc
.getHTML( {} )
461 def _getDetails( self
):
462 if self
._details
== "conference":
465 tz
= DisplayTZ(self
._aw
,useServerTZ
=1).getDisplayTZ()
466 for entry
in self
._conf
.getSchedule().getEntriesOnDay( self
._date
):
467 if isinstance( entry
, schedule
.LinkedTimeSchEntry
) and \
468 isinstance( entry
.getOwner(), conference
.Session
) and entry
.getOwner().canView(self
._aw
):
469 wc
= WOverviewSession( self
._aw
, \
473 res
.append( wc
.getHTML({}) )
474 elif isinstance( entry
, schedule
.LinkedTimeSchEntry
) and \
475 isinstance( entry
.getOwner(), conference
.SessionSlot
) and entry
.getOwner().canView(self
._aw
):
476 wc
= WOverviewSessionSlot( self
._aw
, \
480 res
.append( wc
.getHTML({}) )
481 elif self
._details
== "contribution":
482 if isinstance(entry
, conference
.ContribSchEntry
) or \
483 isinstance( entry
, schedule
.LinkedTimeSchEntry
) and isinstance(entry
.getOwner(), conference
.Contribution
) and entry
.getOwner().canView(self
._aw
):
484 wc
= WOverviewContribution( self
._aw
, \
488 res
.append( wc
.getHTML( ) )
489 elif isinstance( entry
, schedule
.BreakTimeSchEntry
):
490 res
.append( self
._getBreakItem
( entry
) )
491 return "".join( res
)
493 def _getIcon( self
):
494 confid
= self
._conf
.getId()
496 for icon
in self
._icons
.keys():
497 if confid
in self
._icons
[icon
]:
499 categ
= cm
.getById(str(icon
))
500 iconHtml
+= """<img src="%s" width="16" height="16" alt="categ" onmouseover="IndicoUI.Widgets.Generic.tooltip(this, event, '%s')" />""" %(urlHandlers
.UHCategoryIcon
.getURL(categ
), categ
.getName())
504 vars = wcomponents
.WTemplated
.getVars( self
)
505 tz
= DisplayTZ(self
._aw
,useServerTZ
=1).getDisplayTZ()
507 vars["startTime"] = self
._startTime
.strftime("%H:%M")
509 vars["startTime"] = self
._conf
.calculateDayStartTime(self
._date
).strftime("%H:%M")
510 vars["timezone"] = tz
511 vars["title"] = self
._conf
.getTitle()
512 if self
._conf
.isProtected():
513 vars["title"] += """ <img src=%s style="vertical-align: middle; border: 0;">""" % Config
.getInstance().getSystemIconURL("protected")
514 vars["url"] = self
._url
515 vars["chairs"] = self
._getChairText
()
516 vars["location"] = self
._getLocation
()
517 vars["details"] = self
._getDetails
()
518 vars["icon"] = self
._getIcon
()
522 class WOverviewConfFullDisplay( WOverviewConfBase
):
525 class WOverviewConfMinDisplay( WOverviewConfBase
):
527 def _getDetails( self
):
530 def _getBreakItem( self
, entry
):
534 class WOverviewConferenceItem
:
536 def __init__(self
, aw
, conference
, date
, displayURL
, icons
, details
="conference", startTime
= None):
538 if details
=="conference" or conference
.canAccess( aw
):
539 self
._comp
= WOverviewConfFullDisplay( aw
, \
547 self
._comp
= WOverviewConfMinDisplay( aw
, \
555 def getHTML( self
, params
):
558 return self
._comp
.getHTML( params
)
561 class WDayOverview(wcomponents
.WTemplated
):
563 def __init__( self
, ow
):
567 vars = wcomponents
.WTemplated
.getVars( self
)
568 prevOW
= self
._ow
.getOverviewPrevPeriod()
569 prevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( prevOW
)
570 nextOW
= self
._ow
.getOverviewNextPeriod()
571 nextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nextOW
)
572 pprevOW
= self
._ow
.getOverviewPrevBigPeriod()
573 pprevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( pprevOW
)
574 nnextOW
= self
._ow
.getOverviewNextBigPeriod()
575 nnextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nnextOW
)
576 vars["date"] = """<a href="%s"><<</a> <a href="%s"><</a> %s <a href="%s">></a> <a href="%s">>></a>""" % (\
579 self
._ow
.getDate().strftime("%A %d %B %Y"), \
583 confs
= self
._ow
.getConferencesWithStartTime()
587 oi
= WOverviewConferenceItem( self
._ow
.getAW(), \
589 self
._ow
.getDate(), \
590 vars["displayConfURLGen"]( conf
),\
591 self
._ow
._cal
.getIcons(), \
592 self
._ow
.getDetailLevel(),
594 l
.append( oi
.getHTML( {} ) )
596 l
.append( _("There are no conferences on the selected day"))
597 vars["items"] = "".join(l
)
600 class WWeekOverview(wcomponents
.WTemplated
):
602 def __init__( self
, ow
):
606 vars = wcomponents
.WTemplated
.getVars( self
)
608 prevOW
= self
._ow
.getOverviewPrevPeriod()
609 prevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( prevOW
)
610 nextOW
= self
._ow
.getOverviewNextPeriod()
611 nextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nextOW
)
613 startDate
= """<a href="%s"><</a> %s""" % (\
615 self
._ow
.getStartDate().strftime("%A %d %B %Y"))
616 endDate
= """%s <a href="%s">></a>""" %(\
617 self
._ow
.getEndDate().strftime("%A %d %B %Y"),\
619 vars["dates"] = """%s – %s"""%(startDate
, endDate
)
622 sd
= self
._ow
.getStartDate()
624 while sd
<= self
._ow
.getEndDate():
625 weekend
= sd
.weekday() >= 5
626 vars["date%i" % idx
] = sd
.strftime("%a %d/%m")
628 confs
= self
._ow
.getConferencesWithStartTime(sd
)
629 for conf
, stTime
in confs
:
630 if weekend
and not conf
.hasSomethingOnWeekend(sd
.date()):
632 wc
= WOverviewConferenceItem(self
._ow
.getAW(), conf
, sd
, vars["displayConfURLGen"](conf
),
633 self
._ow
._cal
.getIcons(), self
._ow
.getDetailLevel(), stTime
)
634 res
.append(wc
.getHTML({}))
636 res
.append("<tr><td></td></tr>")
638 isWeekendFree
= False
639 vars["item%i" % idx
] = "".join(res
)
642 vars["isWeekendFree"] = isWeekendFree
646 class WMonthOverview(wcomponents
.WTemplated
):
648 def __init__( self
, ow
):
650 self
._isWeekendFree
= True
652 def _getDayCell( self
, day
):
654 confs
= day
.getConferencesWithStartTime()
659 wc
= WOverviewConferenceItem( self
._ow
.getAW(), \
662 self
._displayConfURLGen
( conf
),\
663 self
._ow
._cal
.getIcons(), \
664 self
._ow
.getDetailLevel(),
666 res
.append( wc
.getHTML( {} ) )
669 def _getMonth( self
):
672 dl
= self
._ow
.getDayList()
673 for i
in range( dl
[0].getWeekDay() ):
674 dayList
[numWeek
].append(None)
675 for day
in self
._ow
.getDayList():
676 dayList
[numWeek
].append(day
)
677 if day
.getWeekDay() >= 5:
678 if day
.getConferencesWithStartTime():
679 self
._isWeekendFree
= False
680 if day
.getWeekDay() == 6:
684 for i
in range( 6-dl
[-1].getWeekDay() ):
685 dayList
[numWeek
].append(None)
690 vars = wcomponents
.WTemplated
.getVars( self
)
691 prevOW
= self
._ow
.getOverviewPrevPeriod()
692 prevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( prevOW
)
693 nextOW
= self
._ow
.getOverviewNextPeriod()
694 nextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nextOW
)
695 pprevOW
= self
._ow
.getOverviewPrevBigPeriod()
696 pprevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( pprevOW
)
697 nnextOW
= self
._ow
.getOverviewNextBigPeriod()
698 nnextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nnextOW
)
699 startDate
= """<a href="%s"><<</a> <a href="%s"><</a> %s""" % (\
702 self
._ow
.getStartDate().strftime("%A %d %B %Y"))
703 endDate
= """%s <a href="%s">></a> <a href="%s">>></a>""" %(\
704 self
._ow
.getEndDate().strftime("%A %d %B %Y"),\
707 vars["dates"] = """%s – %s"""%(startDate
, endDate
)
709 dayNames
= [ _("Monday"), _("Tuesday"), _("Wednesday"), _("Thursday"), _("Friday"), \
710 _("Saturday"), _("Sunday") ]
711 #if calendar.SUNDAY == calendar.firstweekday():
712 # dayNames.remove( "Sunday" )
713 # dayNames.insert( "0", "Sunday" )
714 for name
in dayNames
:
715 vars["nameDay%i"%dayNames
.index(name
)] = name
716 self
._displayConfURLGen
= vars["displayConfURLGen"]
717 vars["month"] = self
._getMonth
()
718 vars["isWeekendFree"] = self
._isWeekendFree
719 vars["getDayCell"] = lambda day
: self
._getDayCell
(day
)
723 class WCategoryOverview(wcomponents
.WTemplated
):
725 def __init__( self
, ow
, aw
):
726 self
._categ
= ow
.getCategoryList()[0]
730 def _getDetailLevelOpts( self
):
732 for dl
in self
._ow
.getAllowedDetailLevels():
734 if dl
== self
._ow
.getDetailLevel():
735 selected
= "selected"
736 if dl
== "conference":
740 l
.append("""<option value="%s" %s>%s</option>"""%( dl
, selected
, dltext
))
743 def _getKey( self
, vars):
745 icons
= self
._ow
._cal
.getIcons().keys()
748 cm
= CategoryManager()
749 categ
=cm
.getById(str(icon
))
750 otherOW
= self
._ow
.getOverviewOtherCateg(categ
)
751 a
=(""" <a href="%s" style="font-size: 1.0em;" onmouseover="IndicoUI.Widgets.Generic.tooltip(this, event, '%s')"><img src="%s" width="16" height="16" border="0"> %s</a> <br/>""" %(
752 vars["categOverviewURLGen"]( otherOW
),
754 urlHandlers
.UHCategoryIcon
.getURL(categ
),
755 truncateTitle(categ
.getName(), 20)))
761 vars = wcomponents
.WTemplated
.getVars( self
)
762 l
= self
._ow
.getLocator()
771 vars["selMonth"] = ""
774 vars["detailLevelOpts"] = self
._getDetailLevelOpts
()
776 if isinstance( self
._ow
, wcalendar
.MonthOverview
):
777 displayOW
= WMonthOverview( self
._ow
)
778 vars["selMonth"] = "selected"
779 elif isinstance( self
._ow
, wcalendar
.WeekOverview
):
780 displayOW
= WWeekOverview( self
._ow
)
781 vars["selWeek"] = "selected"
783 displayOW
= WDayOverview( self
._ow
)
784 vars["selDay"] = "selected"
786 p
= { "displayConfURLGen": vars["displayConfURLGen"] }
787 vars["overview"] = displayOW
.getHTML( p
)
789 vars["locator"] = l
.getWebForm()
790 vars["key"] = self
._getKey
(vars)
792 vars["day"] = self
._ow
.getDate().day
793 vars["month"] = self
._ow
.getDate().month
794 vars["year"] = self
._ow
.getDate().year
798 def _getWeekDays(self
):
799 """returns a list with the current week days"""
801 year
=int(self
._ow
.getDate().year
)
802 month
=int(self
._ow
.getDate().month
)
803 day
=int(self
._ow
.getDate().day
)
804 daynumber
=int(calendar
.weekday(year
,month
,day
))
806 date
= self
._ow
.getDate() - timedelta(daynumber
)
810 res
.append((str(date
.day
)+"-"+str(date
.month
)+"-"+str(date
.year
)))
818 def _getNextWeekDays(self
):
821 y
=int(self
._ow
.getDate().year
)
822 m
=int(self
._ow
.getDate().month
)
823 d
=int(self
._ow
.getDate().day
)
829 if (d
+i
)<=31 and (m
==8 or m
==1 or m
==3 or m
==5 or m
==7 or m
==10):
830 res
+=[str(d
+i
)+"-"+str(m
)+"-"+str(y
)]
831 if (d
+i
)<=30 and (m
==4 or m
==6 or m
==9 or m
==11):
832 res
+=[str(d
+i
)+'-'+str(m
)+'-'+str(y
)]
833 if (d
+i
)<=28 and m
==2 and ((y
%4!=0) or (y
%4 ==0 and y
%100==0)):
834 res
+=[(str(d
+i
)+"-"+str(m
)+"-"+str(y
))]
835 if (d
+i
)<30 and m
==2 and ((y
%4==0 and y
%100!=0) or y
%400==0):
836 res
+=[(str(d
+i
)+"-"+str(m
)+"-"+str(y
))]
840 if d
<7 and len(res
)<7:
841 while j
<(7-len(res
)):
842 res
+=[(str(d
+i
+j
)+"-"+str(m
)+"-"+str(y
))]
848 def _whichPeriod(self
, vars):
849 if vars["selDay"] == "selected":
851 if vars["selWeek"] == "selected":
853 if vars["selMonth"] == "selected":
856 def _getMonthDays(self
):
857 year
=int(self
._ow
.getDate().year
)
858 month
=int(self
._ow
.getDate().month
)
860 for day
in range(1,calendar
.monthrange(year
,month
)[1]+1):
861 res
+=[str(day
)+'-'+str(month
)+'-'+str(year
)]
865 class WPCategOverview( WPCategoryDisplayBase
):
867 def __init__( self
, rh
, categ
, ow
):
868 WPCategoryDisplayBase
.__init
__( self
, rh
, categ
)
871 self
._locTZ
= DisplayTZ(self
._getAW
(),None,useServerTZ
=1).getDisplayTZ()
874 return WPCategoryDisplayBase
._getTitle
(self
) + " - " + _("Events Display")
876 def _getHeadContent( self
):
878 if self
._ow
.getDate().date() == nowutc().astimezone(timezone(self
._locTZ
)).date():
879 url
= urlHandlers
.UHCategOverviewToRSS
.getURL(self
._categ
)
880 return i18nformat("""<link rel="alternate" type="application/rss+xml" title= _("Indico RSS Feed") href="%s">""") % url
883 def _getBody( self
, params
):
884 if self
._categ
.getId() == "0" and type(self
._ow
) is Overview
and self
._ow
.getDate().date() == nowutc().astimezone(timezone(self
._locTZ
)).date():
885 path
= os
.path
.join(Config
.getInstance().getXMLCacheDir(),"categOverview")
886 currenttime
= int(time
.mktime(time
.strptime((datetime
.now()-timedelta(minutes
=60)).strftime("%a %b %d %H:%M:%S %Y"))))
887 if os
.path
.exists(path
) and os
.path
.getmtime(path
) > currenttime
:
888 fp
= file(path
, 'rb')
893 wc
= WCategoryOverview( self
._ow
, self
._rh
.getAW())
894 pars
= { "postURL": urlHandlers
.UHCategoryOverview
.getURL(), \
895 "displayConfURLGen": urlHandlers
.UHConferenceDisplay
.getURL
, \
896 "categOverviewURLGen": urlHandlers
.UHCategoryOverview
.getURLFromOverview
}
897 cache
= wc
.getHTML( pars
)
898 fp
= file(path
, 'wb')
903 wc
= WCategoryOverview( self
._ow
, self
._rh
.getAW())
904 pars
= { "postURL": urlHandlers
.UHCategoryOverview
.getURL(), \
905 "displayConfURLGen": urlHandlers
.UHConferenceDisplay
.getURL
, \
906 "categDisplayURL": urlHandlers
.UHCategoryDisplay
.getURL(self
._categ
), \
907 "categOverviewURLGen": urlHandlers
.UHCategoryOverview
.getURLFromOverview
, \
908 "categoryTitle": self
._categ
.getTitle() }
909 return wc
.getHTML( pars
)
911 def _getNavigationDrawer(self
):
912 #link = [{"url": urlHandlers.UHCategoryOverview.getURL(self._target), "title": _("Events overview")}]
913 pars
= {"target": self
._target
, "isModif": False}
914 return wcomponents
.WNavigationDrawer( pars
, type = "Overview" )
916 class WCategoryMap(wcomponents
.WTemplated
):
918 def __init__( self
, categ
):
921 def getCategMap( self
, categ
):
923 if len(categ
.getSubCategoryList()) > 0:
925 for subcat
in categ
.getSubCategoryList():
926 res
.append("<li><a href='%s'>%s</a>"% (urlHandlers
.UHCategoryDisplay
.getURL(subcat
), subcat
.getName()))
927 if subcat
.hasAnyProtection():
928 res
.append(""" <span style="font-size: 0.8em; color: gray;">(%s)</span>"""% _("protected"))
929 res
.append(self
.getCategMap(subcat
))
934 vars = wcomponents
.WTemplated
.getVars( self
)
935 vars['categName'] = self
._categ
.getName()
936 vars["categDisplayURL"] = urlHandlers
.UHCategoryDisplay
.getURL(self
._categ
)
937 vars['map'] = self
.getCategMap(self
._categ
)
940 class WPCategoryMap( WPCategoryDisplayBase
):
942 def __init__( self
, rh
, categ
):
943 WPCategoryDisplayBase
.__init
__( self
, rh
, categ
)
946 return WPCategoryDisplayBase
._getTitle
(self
) + " - " + _("Category Map")
948 def _getBody( self
, params
):
949 wc
= WCategoryMap( self
._target
)
951 return wc
.getHTML( pars
)
953 def _getNavigationDrawer(self
):
954 #link = [{"url": urlHandlers.UHCategoryMap.getURL(self._target), "title": _("Category map")}]
955 pars
= {"target": self
._target
, "isModif": False}
956 return wcomponents
.WNavigationDrawer( pars
, type = "Map" )
958 class WCategoryStatistics(wcomponents
.WTemplated
):
960 def __init__( self
, target
, wfReg
, stats
):
961 self
.__target
= target
965 def getHTML( self
, aw
):
967 return wcomponents
.WTemplated
.getHTML( self
)
970 vars = wcomponents
.WTemplated
.getVars( self
)
971 vars["name"] = self
.__target
.getName()
972 vars["img"] = self
.__target
.getIconURL()
973 vars["categDisplayURL"] = urlHandlers
.UHCategoryDisplay
.getURL(self
.__target
)
975 if self
._stats
!= None:
978 if self
._stats
["events"]:
979 wcsl
=wcomponents
.WCategoryStatisticsList( _("Number of events"), self
._stats
["events"] )
980 stats
.append(wcsl
.getHTML( self
._aw
))
981 # Number of contributions:
982 if self
._stats
["contributions"] != {}:
983 wcsl
=wcomponents
.WCategoryStatisticsList( _("Number of contributions"), self
._stats
["contributions"] )
984 stats
.append(wcsl
.getHTML( self
._aw
))
986 stats
.append( i18nformat("""<b> _("Number of contributions"): 0</b>"""))
987 stats
.append("<strong>{}</strong>: {}".format(
988 _("Number of attached files"), self
._stats
.get("files", _("Not available"))))
989 vars["updated"] = self
._stats
["updated"].strftime("%d %B %Y %H:%M")
991 stats
.append(i18nformat("""<b> _("No statistics for the events").</b>"""))
992 stats
.append(i18nformat("""<b> _("No statistics for the contributions").</b>"""))
993 stats
.append(i18nformat("<strong>{}</strong>".format(_("No statistics for attached files"))))
994 vars["updated"] = nowutc().strftime("%d %B %Y %H:%M")
995 vars["contents"] = "<br><br>".join( stats
)
997 vars["contents"] = _("This category doesn't contain any event. No statistics are available.")
998 vars["updated"] = nowutc().strftime("%d %B %Y %H:%M")
1001 class WPCategoryStatistics( WPCategoryDisplayBase
):
1003 def __init__( self
, rh
, target
, wfReg
, stats
):
1004 WPCategoryDisplayBase
.__init
__( self
, rh
, target
)
1008 def _getTitle(self
):
1009 return WPCategoryDisplayBase
._getTitle
(self
) + " - " + _("Category Statistics")
1011 def _getBody( self
, params
):
1012 wcs
= WCategoryStatistics( self
._target
, self
._wfReg
, self
._stats
)
1013 return wcs
.getHTML( self
._getAW
() )
1015 def _getNavigationDrawer(self
):
1016 #link = [{"url": urlHandlers.UHCategoryStatistics.getURL(self._target), "title": _("Category statistics")}]
1017 pars
= {"target": self
._target
, "isModif": False}
1018 return wcomponents
.WNavigationDrawer( pars
, type = "Statistics" )
1021 #---------------------------------------------------------------------------
1023 class WConferenceCreation( wcomponents
.WTemplated
):
1025 def __init__( self
, targetCateg
, type="conference", rh
= None ):
1026 self
._categ
= targetCateg
1032 vars = wcomponents
.WTemplated
.getVars( self
)
1034 vars["title"] = vars.get("title","")
1035 vars["description"] = vars.get("description","")
1036 vars["keywords"] = vars.get("keywords","")
1037 vars["contactInfo"] = vars.get("contactInfo","")
1038 av
=self
._rh
._getUser
()
1040 now
= nowutc().astimezone(timezone(tz
))
1041 vars["sDay"] = vars.get("sDay",now
.day
)
1042 vars["sMonth"] = vars.get("sMonth",now
.month
)
1043 vars["sYear"] = vars.get("sYear",now
.year
)
1044 vars["sHour"] = vars.get("sHour","8")
1045 vars["sMinute"] = vars.get("sMinute","00")
1046 vars["eDay"] = vars.get("eDay",now
.day
)
1047 vars["eMonth"] = vars.get("eMonth",now
.month
)
1048 vars["eYear"] = vars.get("eYear",now
.year
)
1049 vars["eHour"] = vars.get("eHour","18")
1050 vars["eMinute"] = vars.get("eMinute","00")
1053 vars["sMonth_"] = {}
1056 vars["sMinute_"] = {}
1059 for i
in range(0,10):
1060 vars["sDay_"][i
] = vars.get("sDay_%s"%i,now
.day
)
1061 vars["sMonth_"][i
] = vars.get("sMonth_%s"%i,now
.month
)
1062 vars["sYear_"][i
] = vars.get("sYear_%s"%i,now
.year
)
1063 vars["sHour_"][i
] = vars.get("sHour_%s"%i,"8")
1064 vars["sMinute_"][i
] = vars.get("sMinute_%s"%i,"00")
1065 vars["dur_"][i
] = vars.get("dur_%s"%i,"60")
1066 vars["nbDates"] = vars.get("nbDates",1)
1067 seltitle
= Config
.getInstance().getDefaultTimezone()
1069 seltitle
= self
._categ
.getTimezone()
1070 vars["timezoneOptions"] = TimezoneRegistry
.getShortSelectItemsHTML(seltitle
)
1071 vars["locationName"] = vars.get("locationName","")
1072 vars["locationAddress"] = vars.get("locationAddress","")
1073 vars["roomName"] = vars.get("locationRoom","")
1074 #vars["locator"] = self._categ.getLocator().getWebForm()
1075 vars["protection"] = "public"
1076 vars["categ"] = {"id":"", "title":_("-- please, choose a category --")}
1077 if self
._categ
and not self
._categ
.hasSubcategories():
1078 if self
._categ
.isProtected() :
1079 vars["protection"] = "private"
1080 vars["categ"] = {"id":self
._categ
.getId(), "title":self
._categ
.getTitle()}
1081 vars["nocategs"] = False
1082 if not CategoryManager().getRoot().hasSubcategories():
1083 vars["nocategs"] = True
1084 rootcateg
= CategoryManager().getRoot()
1085 if rootcateg
.isProtected():
1086 vars["protection"] = "private"
1087 vars["categ"] = {"id":rootcateg
.getId(), "title":rootcateg
.getTitle()}
1088 #vars["event_type"] = ""
1089 vars["navigator"] = navigator
1090 vars["orgText"] = ""
1091 if vars.get("orgText","") != "":
1092 vars["orgText"] = vars.get("orgText","")
1093 elif self
._rh
._getUser
():
1094 vars["orgText"] = self
._rh
._getUser
().getStraightFullName()
1095 vars["chairText"] = vars.get("chairText","")
1096 vars["supportEmail"] = vars.get("supportEmail","")
1097 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
1098 styles
= styleMgr
.getExistingStylesForEventType(self
._type
)
1102 defStyle
= self
._categ
.getDefaultStyle(self
._type
)
1104 defStyle
= styleMgr
.getDefaultStyleForEventType(self
._type
)
1105 for styleId
in styles
:
1106 if styleId
== defStyle
:
1107 selected
= "selected"
1110 styleoptions
+= "<option value=\"%s\" %s>%s</option>" % (styleId
,selected
,styleMgr
.getStyleName(styleId
))
1111 vars["styleOptions"] = styleoptions
1113 vars["chairpersonDefined"] = vars.get("chairpersonDefined", [])
1115 vars["useRoomBookingModule"] = Config
.getInstance().getIsRoomBookingActive()
1119 #---------------------------------------------------------------------------
1121 class WPConferenceCreationMainData( WPCategoryDisplayBase
):
1123 _userData
= ['favorite-user-list', 'favorite-user-ids']
1125 def getJSFiles(self
):
1126 return WPCategoryDisplayBase
.getJSFiles(self
) + \
1127 self
._includeJSPackage
('Management')
1129 def _getHeader( self
):
1132 wc
= wcomponents
.WHeader( self
._getAW
() )
1133 return wc
.getHTML( { "subArea": self
._getSiteArea
(), \
1134 "loginURL": self
._escapeChars
(str(self
.getLoginURL())),\
1135 "logoutURL": self
._escapeChars
(str(self
.getLogoutURL())) } )
1137 def _getNavigationDrawer(self
):
1138 if self
._target
and self
._target
.isRoot():
1141 pars
= {"target": self
._target
, "isModif": False}
1142 return wcomponents
.WNavigationDrawer( pars
)
1144 def _getWComponent( self
):
1145 return WConferenceCreation( self
._target
, self
._rh
._event
_type
, self
._rh
)
1147 def _getBody( self
, params
):
1148 ## TODO: TO REMOVE?????????
1149 #p = { "categDisplayURLGen": urlHandlers.UHCategoryDisplay.getURL }
1150 wc
= self
._getWComponent
()
1151 params
.update({"postURL": urlHandlers
.UHConferencePerformCreation
.getURL() })
1152 return "%s"%wc
.getHTML( params
)
1154 class WPCategoryModifBase( WPCategoryBase
):
1156 _userData
= ['favorite-user-ids']
1158 def getJSFiles(self
):
1159 return WPCategoryBase
.getJSFiles(self
) + \
1160 self
._includeJSPackage
('Management')
1162 def _getHeader(self
):
1163 wc
= wcomponents
.WHeader(self
._getAW
(), currentCategory
=self
._currentCategory
())
1165 'subArea': self
._getSiteArea
(),
1166 'loginURL': self
._escapeChars
(str(self
.getLoginURL())),
1167 'logoutURL': self
._escapeChars
(str(self
.getLogoutURL()))
1170 def _getNavigationDrawer(self
):
1171 pars
= {"target": self
._target
, "isModif" : True}
1172 return wcomponents
.WNavigationDrawer( pars
, bgColor
= "white" )
1174 def _createSideMenu( self
):
1175 self
._sideMenu
= wcomponents
.ManagementSideMenu()
1177 viewSection
= wcomponents
.SideMenuSection()
1179 self
._viewMenuItem
= wcomponents
.SideMenuItem(_("View category"),
1180 urlHandlers
.UHCategoryDisplay
.getURL( self
._target
))
1181 viewSection
.addItem( self
._viewMenuItem
)
1183 self
._sideMenu
.addSection(viewSection
)
1186 mainSection
= wcomponents
.SideMenuSection()
1188 self
._generalSettingsMenuItem
= wcomponents
.SideMenuItem(_("General settings"),
1189 urlHandlers
.UHCategoryModification
.getURL( self
._target
))
1190 mainSection
.addItem( self
._generalSettingsMenuItem
)
1192 self
._ACMenuItem
= wcomponents
.SideMenuItem(_("Protection"),
1193 urlHandlers
.UHCategModifAC
.getURL( self
._target
))
1194 mainSection
.addItem( self
._ACMenuItem
)
1196 self
._toolsMenuItem
= wcomponents
.SideMenuItem(_("Tools"),
1197 urlHandlers
.UHCategModifTools
.getURL( self
._target
))
1198 mainSection
.addItem( self
._toolsMenuItem
)
1200 self
._tasksMenuItem
= wcomponents
.SideMenuItem(_("Tasks"),
1201 urlHandlers
.UHCategModifTasks
.getURL( self
._target
))
1202 mainSection
.addItem( self
._tasksMenuItem
)
1203 if not self
._target
.tasksAllowed() :
1204 self
._tasksMenuItem
.setVisible(False)
1206 self
.extra_menu_items
= {}
1207 for name
, item
in sorted(values_from_signal(signals
.category
.management_sidemenu
.send(self
._target
)),
1208 key
=lambda x
: x
[1]._title
):
1209 self
.extra_menu_items
[name
] = item
1210 mainSection
.addItem(item
)
1212 self
._sideMenu
.addSection(mainSection
)
1214 def _createTabCtrl( self
):
1217 def _setActiveTab( self
):
1220 def _setActiveSideMenuItem( self
):
1223 def _getBody( self
, params
):
1224 self
._createSideMenu
()
1225 self
._setActiveSideMenuItem
()
1227 self
._createTabCtrl
()
1228 self
._setActiveTab
()
1230 sideMenu
= self
._sideMenu
.getHTML()
1232 frame
= WCategoryModifFrame()
1233 p
= { "category": self
._target
,
1234 "body": self
._getPageContent
( params
),
1235 "sideMenu": self
._sideMenu
.getHTML() }
1237 return frame
.getHTML( p
)
1239 def _getTabContent( self
, params
):
1242 def _getPageContent( self
, params
):
1245 def _getSiteArea(self
):
1246 return "ModificationArea"
1249 class WCategoryModifFrame(wcomponents
.WTemplated
):
1251 def __init__( self
):
1254 def getVars( self
):
1255 vars = wcomponents
.WTemplated
.getVars( self
)
1258 class WPCategModifMain( WPCategoryModifBase
):
1260 def _setActiveSideMenuItem( self
):
1261 self
._generalSettingsMenuItem
.setActive()
1264 class WCategModifMain(wcomponents
.WTemplated
):
1266 def __init__( self
, category
):
1267 self
._categ
= category
1269 def __getSubCategoryItems( self
, sl
, modifURLGen
):
1273 selbox
= """<select name="newpos%s" onChange="this.form.oldpos.value='%s';this.form.submit();">""" % (sl
.index(categ
),sl
.index(categ
))
1274 for i
in range (1,len(sl
)+1):
1275 if i
==sl
.index(categ
)+1:
1276 selbox
+= "<option selected value='%s'>%s" % (i
-1,i
)
1278 selbox
+= "<option value='%s'>%s" % (i
-1,i
)
1284 <input type="checkbox" name="selectedCateg" value="%s">
1287 <td style="padding-left:10px;">
1290 </tr>"""%(id, selbox
,modifURLGen( categ
), categ
.getName().strip() or "[no title]"))
1291 html
= i18nformat("""
1292 <input type="hidden" name="oldpos">
1293 <table align="left" width="100%%">
1295 <td width="3%%" nowrap><img src="%s" border="0" alt="Select all" onclick="javascript:selectAll(document.contentForm.selectedCateg)"><img src="%s" border="0" alt="Deselect all" onclick="javascript:deselectAll(document.contentForm.selectedCateg)"></td>
1297 <td class="titleCellFormat" width="100%%" style="padding-left:10px;"> _("Category name")</td>
1300 </table>""")%(Config
.getInstance().getSystemIconURL("checkAll"), Config
.getInstance().getSystemIconURL("uncheckAll"), "".join( temp
))
1303 def __getConferenceItems( self
, cl
, modifURLGen
, modifURLOpen
):
1307 textopen
= i18nformat(""" <b>[ <a href="%s"> _("re-open event")</a> ]</b>""") % modifURLOpen(conf
)
1313 <input type="checkbox" name="selectedConf" value="%s">
1315 <td align="center" width="17%%">%s</td>
1316 <td align="center" width="17%%">%s</td>
1317 <td width="100%%"><a href="%s">%s</a>%s</td>
1318 </tr>"""%(conf
.getId(), conf
.getAdjustedStartDate().date(), conf
.getAdjustedEndDate().date(),modifURLGen(conf
), conf
.getTitle(), textopen
))
1319 html
= i18nformat("""<table align="left" width="100%%">
1321 <td width="3%%" nowrap><img src="%s" border="0" alt="Select all" onclick="javascript:selectAll(document.contentForm.selectedConf)"><img src="%s" border="0" alt="Deselect all" onclick="javascript:deselectAll(document.contentForm.selectedConf)"></td>
1322 <td align="center" width="17%%" class="titleCellFormat" style="border-right:5px solid #FFFFFF; border-bottom: 1px solid #FFFFFF;"> _("Start date")</td>
1323 <td align="center" width="17%%" class="titleCellFormat" style="border-right:5px solid #FFFFFF; border-bottom: 1px solid #FFFFFF;"> _("End date")</td>
1324 <td width="100%%" class="titleCellFormat" style="border-right:5px solid #FFFFFF; border-bottom: 1px solid #FFFFFF;"> _("Conference title")</td>
1326 %s</table>""")%(Config
.getInstance().getSystemIconURL("checkAll"), Config
.getInstance().getSystemIconURL("uncheckAll"), "".join( temp
))
1329 def getVars( self
):
1331 index
= Catalog
.getIdx('categ_conf_sd').getCategory(self
._categ
.getId())
1332 vars = wcomponents
.WTemplated
.getVars( self
)
1333 vars["locator"] = self
._categ
.getLocator().getWebForm()
1334 vars["name"] = self
._categ
.getName()
1336 vars["description"] = self
._categ
.getDescription()
1338 if self
._categ
.getIcon() is not None:
1339 vars["icon"] = """<img src="%s" width="16" height="16" alt="category">"""%urlHandlers
.UHCategoryIcon
.getURL( self
._categ
)
1341 vars["icon"] = "None"
1342 vars["dataModifButton"] = ""
1343 if not self
._categ
.isRoot():
1344 vars["dataModifButton"] = i18nformat("""<input type="submit" class="btn" value="_("modify")">""")
1345 vars["removeItemsURL"] = vars["actionSubCategsURL"]
1346 if not self
._categ
.getSubCategoryList():
1347 vars['containsEvents'] = True
1348 vars["removeItemsURL"] = vars["actionConferencesURL"]
1349 vars["items"] = self
.__getConferenceItems
(index
.itervalues(), vars["confModifyURLGen"], vars["confModifyURLOpen"])
1351 vars['containsEvents'] = False
1352 vars["items"] = self
.__getSubCategoryItems
( self
._categ
.getSubCategoryList(), vars["categModifyURLGen"] )
1353 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
1354 vars["defaultMeetingStyle"] = styleMgr
.getStyleName(self
._categ
.getDefaultStyle("meeting"))
1355 vars["defaultLectureStyle"] = styleMgr
.getStyleName(self
._categ
.getDefaultStyle("simple_event"))
1357 ## vars["defaultVisibility"] = self._categ.getVisibility()
1358 vars["defaultTimezone"] = self
._categ
.getTimezone()
1359 visibility
= self
._categ
.getVisibility()
1360 categpath
= self
._categ
.getCategoryPath()
1362 if visibility
> len(categpath
):
1363 vars["defaultVisibility"] = _("Everywhere")
1364 elif visibility
== 0:
1365 vars["defaultVisibility"] = _("Nowhere")
1367 categId
= categpath
[visibility
-1]
1368 cat
= conference
.CategoryManager().getById(categId
)
1369 vars["defaultVisibility"] = cat
.getName()
1371 ###################################################################################################
1372 ## TODO: this code belongs to the TASKS MODULE. We should fix it or remove it.
1373 vars["enablePic"]=quoteattr(str(Config
.getInstance().getSystemIconURL( "enabledSection" )))
1374 vars["disablePic"]=quoteattr(str(Config
.getInstance().getSystemIconURL( "disabledSection" )))
1375 enabledText
= _("Click to disable")
1376 disabledText
= _("Click to enable")
1378 url
= urlHandlers
.UHCategoryTasksOption
.getURL( self
._categ
)
1381 if (self
._categ
.hasSubcategories()):
1382 icon
=vars["disablePic"]
1383 textIcon
= disabledText
1384 comment
= i18nformat("""<b> [ _("Category contains subcategories - this module cannot be enabled")]</b>""")
1386 elif self
._categ
.tasksAllowed():
1387 icon
=vars["enablePic"]
1388 textIcon
=enabledText
1389 if len(self
._categ
.getTaskList()) > 0 :
1390 comment
= i18nformat("""<b> [_("Task list is not empty - this module cannot be disabled")]</b>""")
1393 icon
=vars["disablePic"]
1394 textIcon
=disabledText
1395 tasksManagement
= """
1398 <a href=%s><img src=%s alt="%s" class="imglink"></a> <a href=%s>%s</a>%s
1400 </tr>"""%(url
,icon
,textIcon
,url
, _("Tasks List"),comment
)
1401 vars["tasksManagement"] = tasksManagement
1402 ###################################################################################################
1406 class WPCategoryModification( WPCategModifMain
):
1408 def _getPageContent( self
, params
):
1409 wc
= WCategModifMain( self
._target
)
1411 "dataModificationURL": urlHandlers
.UHCategoryDataModif
.getURL( self
._target
), \
1412 "addSubCategoryURL": urlHandlers
.UHCategoryCreation
.getURL(self
._target
),
1413 "addConferenceURL": urlHandlers
.UHConferenceCreation
.getURL( self
._target
), \
1414 "confModifyURLGen": urlHandlers
.UHConferenceModification
.getURL
, \
1415 "confModifyURLOpen": urlHandlers
.UHConferenceOpen
.getURL
, \
1416 "categModifyURLGen": urlHandlers
.UHCategoryModification
.getURL
, \
1417 "actionSubCategsURL": urlHandlers
.UHCategoryActionSubCategs
.getURL(self
._target
),
1418 "actionConferencesURL": urlHandlers
.UHCategoryActionConferences
.getURL(self
._target
)}
1419 return wc
.getHTML( pars
)
1422 class WCategoryDataModification(wcomponents
.WTemplated
):
1424 def __init__( self
, category
):
1425 self
._categ
= category
1427 def _getVisibilityHTML(self
):
1428 visibility
= self
._categ
.getVisibility()
1429 topcat
= self
._categ
1433 selected
= "selected"
1434 vis
= [ i18nformat("""<option value="0" %s> _("Nowhere")</option>""") % selected
]
1438 if level
== visibility
:
1439 selected
= "selected"
1440 if topcat
.getId() != "0":
1441 vis
.append("""<option value="%s" %s>%s</option>""" % (level
, selected
, truncateTitle(topcat
.getName(), 70)))
1442 topcat
= topcat
.getOwner()
1444 if visibility
> level
:
1445 selected
= "selected"
1446 vis
.append( i18nformat("""<option value="999" %s> _("Everywhere")</option>""") % selected
)
1450 def getVars( self
):
1451 vars = wcomponents
.WTemplated
.getVars( self
)
1452 vars["name"] = self
._categ
.getName()
1453 vars["description"] = self
._categ
.getDescription()
1454 vars["visibility"] = self
._getVisibilityHTML
()
1455 vars["timezoneOptions"] = TimezoneRegistry
.getShortSelectItemsHTML(self
._categ
.getTimezone())
1456 if self
._categ
.getIcon() is not None:
1457 vars["icon"] = """<img src="%s" width="16" height="16" alt="category">"""%urlHandlers
.UHCategoryIcon
.getURL( self
._categ
)
1459 vars["icon"] = "None"
1460 for type in [ "simple_event", "meeting" ]:
1461 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
1462 styles
= styleMgr
.getExistingStylesForEventType(type)
1464 for styleId
in styles
:
1465 defStyle
= self
._categ
.getDefaultStyle(type)
1467 defStyle
= styleMgr
.getDefaultStyleForEventType(type)
1468 if styleId
== defStyle
:
1469 selected
= "selected"
1472 styleoptions
+= "<option value=\"%s\" %s>%s</option>" % (styleId
,selected
,styleMgr
.getStyleName(styleId
))
1473 vars["%sStyleOptions" % type] = styleoptions
1478 class WPCategoryDataModification(WPCategModifMain
):
1480 def _getPageContent(self
, params
):
1481 wc
= WCategoryDataModification(self
._target
)
1482 pars
= {"postURL": urlHandlers
.UHCategoryPerformModification
.getURL(self
._target
)}
1483 return wc
.getHTML(pars
)
1486 class WCategoryCreation(wcomponents
.WTemplated
):
1488 def __init__(self
, target
):
1489 self
.__target
= target
1492 vars = wcomponents
.WTemplated
.getVars(self
)
1493 vars["locator"] = self
.__target
.getLocator().getWebForm()
1495 for type in ["simple_event", "meeting"]:
1496 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
1497 styles
= styleMgr
.getExistingStylesForEventType(type)
1500 for styleId
in styles
:
1501 defStyle
= self
.__target
.getDefaultStyle(type)
1504 defStyle
= styleMgr
.getDefaultStyleForEventType(type)
1505 if styleId
== defStyle
:
1506 selected
= "selected"
1510 styleoptions
+= "<option value=\"%s\" %s>%s</option>" % (styleId
, selected
, styleMgr
.getStyleName(styleId
))
1511 vars["%sStyleOptions" % type] = styleoptions
1513 default_tz
= Config
.getInstance().getDefaultTimezone()
1514 vars["timezoneOptions"] = TimezoneRegistry
.getShortSelectItemsHTML(default_tz
)
1515 vars["categTitle"] = self
.__target
.getTitle()
1516 if self
.__target
.isProtected():
1517 vars["categProtection"] = "private"
1519 vars["categProtection"] = "public"
1520 vars["numConferences"] = len(self
.__target
.conferences
)
1525 class WPCategoryCreation(WPCategModifMain
):
1527 def _getPageContent(self
, params
):
1528 wc
= WCategoryCreation(self
._target
)
1529 pars
= {"categDisplayURLGen": urlHandlers
.UHCategoryDisplay
.getURL
, \
1530 "postURL": urlHandlers
.UHCategoryPerformCreation
.getURL(self
._target
)}
1531 return wc
.getHTML(pars
)
1534 class WCategoryDeletion(object):
1536 def __init__(self
, categoryList
):
1537 self
._categList
= categoryList
1539 def getHTML(self
, actionURL
):
1542 for categ
in self
._categList
:
1543 categories
.append("""<li><i>%s</i></li>""" % categ
.getName())
1545 msg
= {'challenge': _("Are you sure that you want to delete the following categories?"),
1546 'target': "".join(categories
),
1548 'subtext': _("Note that all the existing sub-categories below will also be deleted")
1551 wc
= wcomponents
.WConfirmation()
1554 for categ
in self
._categList
:
1555 categIdList
.append(categ
.getId())
1557 return wc
.getHTML(msg
, actionURL
, {"selectedCateg": categIdList
},
1558 confirmButtonCaption
=_("Yes"),
1559 cancelButtonCaption
=_("No"),
1563 class WConferenceDeletion(wcomponents
.WTemplated
):
1567 class WPSubCategoryDeletion(WPCategModifMain
):
1569 def _getPageContent(self
, params
):
1570 selCategs
= params
["subCategs"]
1571 wc
= WCategoryDeletion(selCategs
)
1572 return wc
.getHTML(urlHandlers
.UHCategoryActionSubCategs
.getURL(self
._target
))
1575 class WPConferenceDeletion(WPCategModifMain
):
1577 def _getPageContent(self
, params
):
1578 wc
= WConferenceDeletion()
1579 return wc
.getHTML({'eventList': params
["events"],
1580 'postURL': urlHandlers
.UHCategoryActionConferences
.getURL(self
._target
),
1581 'cancelButtonCaption': _("No"),
1582 'confirmButtonCaption': _("Yes")})
1585 class WItemReallocation(wcomponents
.WTemplated
):
1587 def __init__(self
, itemList
):
1588 self
._itemList
= itemList
1590 def getHTML(self
, selectTree
, params
):
1591 self
._sTree
= selectTree
1592 return wcomponents
.WTemplated
.getHTML(self
, params
)
1594 def _getItemDescription(self
, item
):
1598 vars = wcomponents
.WTemplated
.getVars( self
)
1600 for item
in self
._itemList
:
1601 l
.append("<li><b>%s</b>"%self
._getItemDescription
(item
))
1602 vars["selectedItems"] = "".join(l
)
1603 vars["categTree"] = self
._sTree
.getHTML()
1607 class WCategoryReallocation( WItemReallocation
):
1609 def _getItemDescription( self
, item
):
1610 return item
.getName()
1613 class WConferenceReallocation( WItemReallocation
):
1615 def _getItemDescription( self
, item
):
1616 return item
.getTitle()
1619 class CategSelectTree
:
1621 def __init__( self
, aw
, excludedCat
, expandedCat
, \
1622 selectURLGen
, expandURLGen
, movingConference
= 0 ):
1624 self
._excludedCategs
= excludedCat
1625 self
._expandedCategs
= expandedCat
1626 self
._selectURLGen
= selectURLGen
1627 self
._expandURLGen
= expandURLGen
1628 self
._movingConference
= movingConference
1630 def _getItem( self
, categ
, level
=0 ):
1631 if not categ
.canAccess( self
._aw
):
1634 for i
in range(level
):
1635 html
= "%s "%html
1636 cfg
= Config
.getInstance()
1637 if categ
in self
._excludedCategs
:
1638 return """%s<img src="%s" border="0" alt=""> %s"""%(html
, cfg
.getSystemIconURL("collapsd.png"), categ
.getName())
1639 if (self
._movingConference
) and categ
.getSubCategoryList():
1640 title
= """%s"""%categ
.getName()
1642 title
= """<a href="%s">%s</a>"""%(self
._selectURLGen
( categ
), \
1644 if categ
in self
._expandedCategs
:
1645 ex
= copy( self
._expandedCategs
)
1647 html
= """%s<a href="%s"><img src="%s" border="0" alt=""></a> %s"""%(html
, self
._expandURLGen
( ex
), cfg
.getSystemIconURL("exploded.png"), title
)
1648 for subcat
in categ
.getSubCategoryList():
1649 html
= "%s<br>%s"%(html
, self
._getItem
(subcat
, level
+1) )
1651 html
= """%s<a href="%s"><img src="%s" border="0" alt=""></a> %s"""%(html
, self
._expandURLGen
( self
._expandedCategs
+[categ
] ), cfg
.getSystemIconURL("collapsd.png"), title
)
1654 def getHTML( self
):
1655 cm
= conference
.CategoryManager()
1656 return self
._getItem
( cm
.getRoot() )
1659 class WPCategoryReallocation( WPCategModifMain
):
1661 def _getReAllocateCategsURL( self
, destination
):
1662 url
= urlHandlers
.UHCategoryActionSubCategs
.getURL( destination
)
1664 for c
in self
._categs
:
1665 selectedCategs
.append( c
.getId() )
1666 url
.addParam( "selectedCateg", selectedCategs
)
1667 url
.addParam( "confirm", "" )
1668 url
.addParam( "reallocate", "" )
1671 def _getCategExpandCategURL( self
, expandedCategs
):
1673 for c
in self
._categs
:
1674 selected
.append( c
.getId() )
1676 for c
in expandedCategs
:
1677 expanded
.append( c
.getId() )
1678 url
= urlHandlers
.UHCategoryActionSubCategs
.getURL( self
._target
)
1679 url
.addParam( "selectedCateg", selected
)
1680 url
.addParam( "ex", expanded
)
1681 url
.addParam( "reallocate", "" )
1684 def _getExpandedCategs( self
, params
):
1685 exIdList
= params
.get("ex", [])
1686 if not isinstance( exIdList
, list ):
1687 exIdList
= [ exIdList
]
1689 cm
= conference
.CategoryManager()
1690 for categId
in exIdList
:
1691 expanded
.append( cm
.getById( categId
) )
1694 def _getPageContent( self
, params
):
1695 self
._categs
= params
["subCategs"]
1696 expanded
= self
._getExpandedCategs
( params
)
1697 pars
= {"cancelURL": urlHandlers
.UHCategoryModification
.getURL( self
._target
) }
1698 tree
= CategSelectTree( self
._getAW
(), self
._categs
, \
1700 self
._getReAllocateCategsURL
, \
1701 self
._getCategExpandCategURL
)
1702 wc
= WCategoryReallocation( self
._categs
)
1703 return wc
.getHTML( tree
, pars
)
1706 class WPConferenceReallocation( WPCategModifMain
):
1708 def _getReAllocateConfsURL( self
, destination
):
1709 url
= urlHandlers
.UHCategoryActionConferences
.getURL( destination
)
1710 url
.addParam( "srcCategId", self
._target
.getId() )
1711 url
.addParam( "selectedConf", self
._confIds
)
1712 url
.addParam( "confirm", "" )
1713 url
.addParam( "reallocate", "" )
1716 def _getExpandCategURL( self
, expandedCategs
):
1718 for c
in expandedCategs
:
1719 expanded
.append( c
.getId() )
1720 url
= urlHandlers
.UHCategoryActionConferences
.getURL( self
._target
)
1721 url
.addParam( "ex", expanded
)
1722 url
.addParam( "reallocate", "" )
1723 url
.addParam( "selectedConf", self
._confIds
)
1726 def _getExpandedCategs( self
, params
):
1727 exIdList
= params
.get("ex", [])
1728 if not isinstance( exIdList
, list ):
1729 exIdList
= [ exIdList
]
1731 cm
= conference
.CategoryManager()
1732 for categId
in exIdList
:
1733 expanded
.append( cm
.getById( categId
) )
1736 def _getPageContent( self
, params
):
1737 self
._confs
= params
["confs"]
1739 for c
in self
._confs
:
1740 self
._confIds
.append( c
.getId() )
1741 expanded
= self
._getExpandedCategs
( params
)
1742 pars
= {"cancelURL": urlHandlers
.UHCategoryModification
.getURL( self
._target
) }
1743 tree
= CategSelectTree( self
._getAW
(), [], \
1745 self
._getReAllocateConfsURL
, \
1746 self
._getExpandCategURL
, 1 )
1747 wc
= WConferenceReallocation( self
._confs
)
1748 return wc
.getHTML( tree
, pars
)
1751 class WCategModifAC(wcomponents
.WTemplated
):
1753 def __init__( self
, category
):
1754 self
._categ
= category
1756 def _getControlUserList(self
):
1757 result
= fossilize(self
._categ
.getManagerList())
1759 for email
in self
._categ
.getAccessController().getModificationEmail():
1761 pendingUser
["email"] = email
1762 pendingUser
["pending"] = True
1763 result
.append(pendingUser
)
1766 def getVars( self
):
1767 vars = wcomponents
.WTemplated
.getVars( self
)
1769 vars["modifyControlFrame"] = wcomponents
.WModificationControlFrame().getHTML(self
._categ
)
1770 if self
._categ
.isRoot() :
1775 vars["accessControlFrame"] = wcomponents
.WAccessControlFrame().getHTML(\
1777 vars["setVisibilityURL"],\
1779 if not self
._categ
.isProtected():
1780 df
= wcomponents
.WDomainControlFrame( self
._categ
)
1781 vars["accessControlFrame"] += "<br>%s"%df.getHTML()
1782 vars["confCreationControlFrame"] = ""
1783 vars["categoryId"] = self
._categ
.getId()
1784 if not self
._categ
.getSubCategoryList():
1785 frame
= wcomponents
.WConfCreationControlFrame( self
._categ
)
1786 p
= { "setStatusURL": vars["setConferenceCreationControlURL"] }
1787 vars["confCreationControlFrame"] = frame
.getHTML(p
)
1788 vars["managers"] = self
._getControlUserList
()
1791 class WPCategModifAC( WPCategoryModifBase
):
1793 def _setActiveSideMenuItem( self
):
1794 self
._ACMenuItem
.setActive()
1796 def _getPageContent(self
, params
):
1797 wc
= WCategModifAC(self
._target
)
1799 "setVisibilityURL": urlHandlers
.UHCategorySetVisibility
.getURL(self
._target
),
1800 "setConferenceCreationControlURL": urlHandlers
.UHCategorySetConfCreationControl
.getURL(self
._target
)
1802 return wc
.getHTML(pars
)
1804 #---------------------------------------------------------------------------------
1806 class WCategModifTools(wcomponents
.WTemplated
):
1808 def __init__( self
, category
):
1809 self
._categ
= category
1811 def getVars( self
):
1812 vars = wcomponents
.WTemplated
.getVars( self
)
1813 vars["deleteButton"] = ""
1814 vars["id"] = self
._categ
.getId()
1815 if not self
._categ
.isRoot():
1816 vars["deleteButton"] = i18nformat("""<input type="submit" class="btn" value="_("delete this category")">""")
1820 class WPCategModifTools( WPCategoryModifBase
):
1822 def _setActiveSideMenuItem( self
):
1823 self
._toolsMenuItem
.setActive()
1825 def _getPageContent( self
, params
):
1826 wc
= WCategModifTools( self
._target
)
1828 "deleteCategoryURL": urlHandlers
.UHCategoryDeletion
.getURL(self
._target
) }
1829 return wc
.getHTML( pars
)
1832 class WPCategoryDeletion( WPCategModifTools
):
1834 def _getPageContent( self
, params
):
1835 wc
= WCategoryDeletion( [self
._target
] )
1836 return wc
.getHTML( urlHandlers
.UHCategoryDeletion
.getURL( self
._target
) )
1838 #---------------------------------------------------------------------------------
1840 class WCategModifTasks(wcomponents
.WTemplated
):
1842 def __init__( self
, category
):
1843 self
._categ
= category
1845 def getVars( self
):
1846 vars = wcomponents
.WTemplated
.getVars( self
)
1847 if self
._categ
.tasksAllowed() :
1848 vars["tasksAllowed"] = _("Adding tasks is allowed")
1850 vars["tasksAllowed"] = _("Adding tasks IS NOT allowed")
1851 vars["id"] = self
._categ
.getId()
1852 vars["taskAction"] = urlHandlers
.UHCategModifTasksAction
.getURL(self
._categ
)
1853 vars["locator"] = ""
1855 if self
._categ
.tasksPublic() :
1856 vars["accessVisibility"] = _("PUBLIC")
1857 oppVisibility
= _("PRIVATE")
1859 vars["accessVisibility"] = _("PRIVATE")
1860 oppVisibility
= _("PUBLIC")
1861 vars["changeAccessVisibility"] = i18nformat("""( _("make it") <input type="submit" class="btn" name="accessVisibility" value="%s">)""")%oppVisibility
1863 if not self
._categ
.tasksPublic() :
1864 vars["commentVisibility"] = _("PRIVATE")
1865 vars["changeCommentVisibility"] = """"""
1867 if self
._categ
.tasksCommentPublic() :
1868 vars["commentVisibility"] = _("PUBLIC")
1869 oppVisibility
= _("PRIVATE")
1871 vars["commentVisibility"] = _("PRIVATE")
1872 oppVisibility
= _("PUBLIC")
1873 vars["changeCommentVisibility"] = i18nformat("""( _("make it") <input type="submit" class="btn" name="commentVisibility" value="%s">)""")%oppVisibility
1876 vars["managerList"] = self
._getPersonList
("manager")
1877 vars["commentList"] = self
._getPersonList
("commentator")
1878 vars["accessList"] = self
._getPersonList
("access")
1880 vars["accessOptions"] = self
._getAccessOptions
()
1881 vars["commentOptions"] = self
._getCommentOptions
()
1882 vars["managerOptions"] = self
._getManagerOptions
()
1887 def _getAccessOptions(self
, names
=[]):
1889 if len(names
) == 0 :
1890 html
.append("""<option value=""> </option>""")
1891 for event
in self
._categ
.getConferenceList() :
1893 for chair
in event
.getChairList() :
1894 text
= """<option value="h%s-%s">%s</option>"""%(event
.getId(),index
,chair
.getFullName())
1896 if not (chair
.getFullName() in names
) :
1898 names
.append(chair
.getFullName())
1900 for manager
in event
.getManagerList() :
1901 text
= """<option value="m%s-%s">%s</option>"""%(event
.getId(),index
,manager
.getFullName())
1903 if not (manager
.getFullName() in names
) :
1905 names
.append(manager
.getFullName())
1907 for participant
in event
.getParticipation().getParticipantList():
1908 text
= """<option value="p%s-%s">%s</option>"""%(event
.getId(),index
,participant
.getFullName())
1910 if not (participant
.getFullName() in names
) :
1912 names
.append(participant
.getFullName())
1916 def _getCommentOptions(self
, names
=[]):
1918 if len(names
) == 0 :
1919 html
.append("""<option value=""> </option>""")
1921 for a
in self
._categ
.getTasksAccessList() :
1922 text
= """<option value="a%s">%s</option>"""%(index
,a
.getFullName())
1924 if not (a
.getFullName() in names
) :
1926 names
.append(a
.getFullName())
1931 """+self
._getAccessOptions
(names
)
1933 def _getManagerOptions(self
):
1936 html
.append("""<option value=""> </option>""")
1938 for c
in self
._categ
.getTasksCommentatorList() :
1939 text
= """<option value="c%s">%s</option>"""%(index
,c
.getFullName())
1941 if not (c
.getFullName() in names
) :
1943 names
.append(c
.getFullName())
1948 """+self
._getCommentOptions
(names
)
1951 def _getPersonList(self
, personType
):
1954 if personType
== "access" :
1955 personList
= self
._categ
.getTasksAccessList()
1956 elif personType
== "manager" :
1957 personList
= self
._categ
.getTasksManagerList()
1958 elif personType
== "comentator" :
1959 personList
= self
._categ
.getTasksCommentatorList()
1963 for a
in personList
:
1966 <td><input type="checkbox" name="%s" value="%s"></td>
1969 """%(personType
, index
, a
.getFullName())
1981 class WPCategModifTasks( WPCategoryModifBase
):
1983 def _setActiveSideMenuItem( self
):
1984 self
._tasksMenuItem
.setActive()
1986 def _getPageContent( self
, params
):
1987 wc
= WCategModifTasks( self
._target
)
1989 "deleteCategoryURL": urlHandlers
.UHCategoryDeletion
.getURL(self
._target
) }
1991 return wc
.getHTML( pars
)