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 _getMaterials(self
):
86 for mat
in sorted(self
._target
.getAllMaterialList()):
87 if mat
.canView(self
._aw
):
91 def _getResourceName(self
, resource
):
92 if isinstance(resource
, conference
.Link
):
93 return resource
.getName() if resource
.getName() != "" and resource
.getName() != resource
.getURL() \
94 else resource
.getURL()
96 return resource
.getName() if resource
.getName() != "" and resource
.getName() != resource
.getFileName() \
97 else resource
.getFileName()
99 def getHTML(self
, aw
, params
):
101 return wcomponents
.WTemplated
.getHTML(self
, params
)
104 vars = wcomponents
.WTemplated
.getVars(self
)
105 isRootCategory
= self
._target
.getId() == "0"
107 vars["name"] = self
._target
.getName()
108 vars["description"] = self
._target
.getDescription()
109 vars["img"] = self
._target
.getIconURL()
110 vars["categ"] = vars["target"] = self
._target
;
111 vars["urlICSFile"] = urlHandlers
.UHCategoryToiCal
.getURL(self
._target
)
112 vars["isRootCategory"] = isRootCategory
113 vars["timezone"] = self
._timezone
114 vars["materials"] = self
._getMaterials
()
115 vars["getMaterialURL"] = lambda mat
: urlHandlers
.UHMaterialDisplay
.getURL(mat
)
116 vars["getResourceName"] = lambda resource
: self
._getResourceName
(resource
)
117 subcats
= self
._target
.subcategories
119 confs
= self
._target
.conferences
121 cl
= wcomponents
.WCategoryList(self
._target
)
122 params
= {"categoryDisplayURLGen": vars["categDisplayURLGen"]}
123 vars["contents"] = cl
.getHTML( self
._aw
, params
)
125 pastEvents
= session
.get('fetchPastEventsFrom', set())
126 showPastEvents
= (self
._target
.getId() in pastEvents
or
127 (session
.user
and session
.user
.settings
.get('show_past_events')))
128 cl
= wcomponents
.WConferenceList(self
._target
, self
._wfReg
, showPastEvents
)
129 params
= {"conferenceDisplayURLGen": vars["confDisplayURLGen"]}
130 vars["contents"] = cl
.getHTML( self
._aw
, params
)
132 cl
= wcomponents
.WEmptyCategory()
133 vars["contents"] = cl
.getHTML( self
._aw
)
136 for mgr
in self
._target
.getManagerList():
137 if isinstance(mgr
, AvatarUserWrapper
):
138 mgrs
.append(("avatar", mgr
.getAbrName()))
139 elif isinstance(mgr
, GroupWrapper
):
140 mgrs
.append(("group", mgr
.getName()))
142 vars["managers"] = sorted(mgrs
)
145 if self
._target
.conferences
:
146 vars.update(self
._getIcalExportParams
(self
._aw
.getUser(), '/export/categ/%s.ics' % self
._target
.getId(), {'from':"-7d"}))
148 vars["isLoggedIn"] = self
._aw
.getUser() is not None
150 minfo
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance()
151 vars["isNewsActive"] = minfo
.isNewsActive()
153 # if this is the front page, include the
154 # upcoming event information (if there are any)
156 upcoming
= ModuleHolder().getById('upcoming_events')
157 upcoming_list
= upcoming
.getUpcomingEventList()
159 vars["upcomingEvents"] = WUpcomingEvents(self
._timezone
, upcoming_list
).getHTML(vars)
161 vars["upcomingEvents"] = ''
166 class WPCategoryDisplay(WPCategoryDisplayBase
):
168 def __init__(self
, rh
, target
, wfReg
):
169 WPCategoryDisplayBase
.__init
__(self
, rh
, target
)
171 tzUtil
= DisplayTZ(self
._getAW
(), target
) # None,useServerTZ=1)
172 self
._locTZ
= tzUtil
.getDisplayTZ()
174 def getJSFiles(self
):
175 return WPCategoryDisplayBase
.getJSFiles(self
) + self
._includeJSPackage
('MaterialEditor')
177 def _getHeadContent(self
):
179 url
= urlHandlers
.UHCategoryToAtom
.getURL(self
._target
)
181 return WPCategoryDisplayBase
._getHeadContent
( self
) + \
182 i18nformat("""<link rel="alternate" type="application/atom+xml" title="_('Indico Atom Feed')" href="%s">""") % url
184 def _getBody( self
, params
):
185 wc
= WCategoryDisplay(self
._target
, self
._wfReg
, self
._locTZ
)
186 pars
= { "categDisplayURLGen": urlHandlers
.UHCategoryDisplay
.getURL
, \
187 "confDisplayURLGen": urlHandlers
.UHConferenceDisplay
.getURL
, \
188 "allowUserModif": self
._target
.canModify( self
._getAW
() ), \
189 "allowCreateEvent": self
._target
.canCreateConference(self
._getAW
().getUser()) }
190 page
= wc
.getHTML( self
._getAW
(), pars
)
193 def _getNavigationDrawer(self
):
194 pars
= {"target": self
._target
, "isModif": False}
195 return wcomponents
.WNavigationDrawer( pars
)
197 class WOverviewBreak( wcomponents
.WTemplated
):
199 def __init__( self
, aw
, entry
):
204 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
205 vars = wcomponents
.WTemplated
.getVars( self
)
206 vars["startTime"] = self
._break
.getAdjustedStartDate(tz
).strftime("%H:%M")
207 vars["title"] = self
._break
.getTitle()
211 class WOverviewContribBase( wcomponents
.WTemplated
):
213 def __init__( self
, aw
, contrib
, date
, details
="conference" ):
215 self
._contrib
= contrib
217 self
._details
= details
219 def _getSpeakerText( self
):
221 if self
._contrib
.getSpeakerText()!="":
222 l
.append( self
._contrib
.getSpeakerText() )
223 for av
in self
._contrib
.getSpeakerList():
224 l
.append( "%s"%av
.getAbrName() )
227 speakers
= "(%s)"%"; ".join(l
)
230 def _getLocation( self
):
232 if self
._contrib
.getOwnLocation() != None:
233 loc
= self
._contrib
.getLocation().getName()
235 if self
._contrib
.getOwnRoom() != None:
238 room
= self
._contrib
.getRoom().getName()
239 url
= linking
.RoomLinker().getURL( self
._contrib
.getRoom(), \
240 self
._contrib
.getLocation() )
242 room
= """<a href="%s" style="font-size: 0.9em">%s</a>"""%(url
, room
)
243 if loc
!= "" or room
!= "":
244 return "(%s %s)"%(loc
, room
)
248 def getHTML( self
, params
={} ):
249 return wcomponents
.WTemplated
.getHTML( self
, params
)
252 vars = wcomponents
.WTemplated
.getVars( self
)
253 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
254 vars["timezone"] = tz
255 vars["startTime"] = self
._contrib
.getAdjustedStartDate(tz
).strftime( "%H:%M" )
256 vars["title"] = self
._contrib
.getTitle()
257 vars["speakers"] = self
._getSpeakerText
()
258 vars["location"] = self
._getLocation
()
262 class WOverviewContribFullDisplay( WOverviewContribBase
):
266 class WOverviewContribMinDisplay( WOverviewContribBase
):
270 class WOverviewContribution
:
272 def __init__( self
, aw
, contrib
, date
, details
="conference" ):
275 """ This is needed for the future? The two
276 templates are currently identical """
278 if contrib
.canAccess( aw
):
279 self
._comp
= WOverviewContribFullDisplay( aw
, \
284 self
._comp
= WOverviewContribMinDisplay( aw
, \
288 def getHTML( self
, params
={} ):
291 return self
._comp
.getHTML( params
)
294 class WOverviewSessionBase( wcomponents
.WTemplated
):
296 def __init__( self
, aw
, session
, date
, details
="conference" ):
298 self
._session
= session
300 self
._details
= details
302 def _getConvenerText( self
):
304 if self
._session
.getConvenerText()!="":
305 l
.append( self
._session
.getConvenerText() )
306 for av
in self
._session
.getConvenerList():
307 l
.append( "%s"%av
.getAbrName() )
310 conveners
= "(%s)"%"; ".join(l
)
313 def _getLocation( self
):
315 if self
._session
.getOwnLocation() != None:
316 loc
= self
._session
.getLocation().getName()
318 if self
._session
.getOwnRoom() != None:
321 url
= linking
.RoomLinker().getURL( self
._session
.getRoom(), \
322 self
._session
.getLocation() )
323 room
= self
._session
.getRoom().getName()
325 room
= """<a href="%s" style="font-size: 0.9em">%s</a>"""%(url
, room
)
326 if loc
!= "" or room
!= "":
327 return "(%s %s)"%(loc
, room
)
331 def _getBreakItem( self
, entry
):
332 wc
= WOverviewBreak( self
._aw
, entry
)
333 return wc
.getHTML( {} )
335 def _getDetails( self
):
336 if self
._details
!= "contribution":
339 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
340 for entry
in self
._session
.getSchedule().getEntriesOnDay( self
._date
):
341 if self
._details
== "contribution":
342 if isinstance( entry
, schedule
.LinkedTimeSchEntry
) and \
343 isinstance( entry
.getOwner(), conference
.Contribution
):
344 wc
= WOverviewContribution( self
._aw
, \
348 res
.append( wc
.getHTML( ) )
349 elif isinstance( entry
, schedule
.BreakTimeSchEntry
):
350 res
.append( self
._getBreakItem
( entry
) )
351 return "".join( res
)
354 vars = wcomponents
.WTemplated
.getVars( self
)
355 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
356 vars["startTime"] = self
._session
.getStartDate().astimezone(timezone(tz
)).strftime("%H:%M")
357 conf
=self
._session
.getConference()
358 import MaKaC
.webinterface
.webFactoryRegistry
as webFactoryRegistry
359 wr
= webFactoryRegistry
.WebFactoryRegistry()
360 wf
= wr
.getFactory(conf
)
365 if type != 'meeting':
366 vars["title"] = self
._session
.getTitle()
367 vars["titleUrl"] = None
369 vars["title"] = self
._session
.getTitle()
370 vars["titleUrl"] = """%s#%s""" % (urlHandlers
.UHConferenceDisplay
.getURL(conf
), self
._session
.getId())
371 vars["conveners"] = self
._getConvenerText
()
372 vars["location"] = self
._getLocation
()
373 vars["details"] = self
._getDetails
()
376 class WOverviewSessionSlot( WOverviewSessionBase
):
378 def __init__( self
, aw
, slot
, date
, details
="conference" ):
380 self
._session
= slot
.getSession()
383 self
._details
= details
385 def _getDetails( self
):
386 if self
._details
!= "contribution":
389 tz
= DisplayTZ(self
._aw
).getDisplayTZ()
390 for entry
in self
._slot
.getSchedule().getEntriesOnDay( self
._date
):
391 if self
._details
== "contribution":
392 if isinstance( entry
, schedule
.LinkedTimeSchEntry
) and type(entry
.getOwner()) is conference
.Contribution
:
393 wc
= WOverviewContribution( self
._aw
, \
397 res
.append( wc
.getHTML( ) )
398 elif isinstance( entry
, schedule
.BreakTimeSchEntry
):
399 res
.append( self
._getBreakItem
( entry
) )
400 return "".join( res
)
402 class WOverviewSessionFullDisplay( WOverviewSessionBase
):
406 class WOverviewSessionMinDisplay( WOverviewSessionBase
):
408 def _getBreakItem( self
, entry
):
412 class WOverviewSession
:
414 def __init__( self
, aw
, session
, date
, details
="conference" ):
416 if session
.canAccess( aw
):
417 self
._comp
= WOverviewSessionFullDisplay( aw
, \
422 self
._comp
= WOverviewSessionMinDisplay( aw
, \
426 def getHTML( self
, params
):
429 return self
._comp
.getHTML( params
)
432 class WOverviewConfBase( wcomponents
.WTemplated
):
434 def __init__( self
, aw
, conference
, date
, url
, icons
, details
="conference", startTime
= None ):
435 self
._conf
= conference
438 self
._details
= details
441 self
._startTime
= startTime
444 def _getChairText( self
):
446 if self
._conf
.getChairmanText()!="":
447 l
.append( self
._conf
.getChairmanText() )
448 for av
in self
._conf
.getChairList():
449 l
.append( "%s"%av
.getFullName() )
452 chairs
= "(%s)"%"; ".join(l
)
455 def _getLocation( self
):
457 if self
._conf
.getLocation() != None:
458 loc
= self
._conf
.getLocation().getName()
460 if self
._conf
.getRoom() != None and self
._conf
.getRoom().getName() != None:
461 room
= self
._conf
.getRoom().getName()
462 url
= "javascript:redirectToRoomLoc('" + escape_html(room
) + "','" + escape_html(loc
) +"')"
464 room
= """<a href="%s" style="font-size: 0.9em">%s</a>"""%(url
, room
)
465 if loc
!= "" or room
!= "":
466 return "(%s%s)"%(loc
, room
)
470 def _getBreakItem( self
, entry
):
471 wc
= WOverviewBreak( self
._aw
, entry
)
472 return wc
.getHTML( {} )
474 def _getDetails( self
):
475 if self
._details
== "conference":
478 tz
= DisplayTZ(self
._aw
,useServerTZ
=1).getDisplayTZ()
479 for entry
in self
._conf
.getSchedule().getEntriesOnDay( self
._date
):
480 if isinstance( entry
, schedule
.LinkedTimeSchEntry
) and \
481 isinstance( entry
.getOwner(), conference
.Session
) and entry
.getOwner().canView(self
._aw
):
482 wc
= WOverviewSession( self
._aw
, \
486 res
.append( wc
.getHTML({}) )
487 elif isinstance( entry
, schedule
.LinkedTimeSchEntry
) and \
488 isinstance( entry
.getOwner(), conference
.SessionSlot
) and entry
.getOwner().canView(self
._aw
):
489 wc
= WOverviewSessionSlot( self
._aw
, \
493 res
.append( wc
.getHTML({}) )
494 elif self
._details
== "contribution":
495 if isinstance(entry
, conference
.ContribSchEntry
) or \
496 isinstance( entry
, schedule
.LinkedTimeSchEntry
) and isinstance(entry
.getOwner(), conference
.Contribution
) and entry
.getOwner().canView(self
._aw
):
497 wc
= WOverviewContribution( self
._aw
, \
501 res
.append( wc
.getHTML( ) )
502 elif isinstance( entry
, schedule
.BreakTimeSchEntry
):
503 res
.append( self
._getBreakItem
( entry
) )
504 return "".join( res
)
506 def _getIcon( self
):
507 confid
= self
._conf
.getId()
509 for icon
in self
._icons
.keys():
510 if confid
in self
._icons
[icon
]:
512 categ
= cm
.getById(str(icon
))
513 iconHtml
+= """<img src="%s" width="16" height="16" alt="categ" onmouseover="IndicoUI.Widgets.Generic.tooltip(this, event, '%s')" />""" %(urlHandlers
.UHCategoryIcon
.getURL(categ
), categ
.getName())
517 vars = wcomponents
.WTemplated
.getVars( self
)
518 tz
= DisplayTZ(self
._aw
,useServerTZ
=1).getDisplayTZ()
520 vars["startTime"] = self
._startTime
.strftime("%H:%M")
522 vars["startTime"] = self
._conf
.calculateDayStartTime(self
._date
).strftime("%H:%M")
523 vars["timezone"] = tz
524 vars["title"] = self
._conf
.getTitle()
525 if self
._conf
.isProtected():
526 vars["title"] += """ <img src=%s style="vertical-align: middle; border: 0;">""" % Config
.getInstance().getSystemIconURL("protected")
527 vars["url"] = self
._url
528 vars["chairs"] = self
._getChairText
()
529 vars["location"] = self
._getLocation
()
530 vars["details"] = self
._getDetails
()
531 vars["icon"] = self
._getIcon
()
535 class WOverviewConfFullDisplay( WOverviewConfBase
):
538 class WOverviewConfMinDisplay( WOverviewConfBase
):
540 def _getDetails( self
):
543 def _getBreakItem( self
, entry
):
547 class WOverviewConferenceItem
:
549 def __init__(self
, aw
, conference
, date
, displayURL
, icons
, details
="conference", startTime
= None):
551 if details
=="conference" or conference
.canAccess( aw
):
552 self
._comp
= WOverviewConfFullDisplay( aw
, \
560 self
._comp
= WOverviewConfMinDisplay( aw
, \
568 def getHTML( self
, params
):
571 return self
._comp
.getHTML( params
)
574 class WDayOverview(wcomponents
.WTemplated
):
576 def __init__( self
, ow
):
580 vars = wcomponents
.WTemplated
.getVars( self
)
581 prevOW
= self
._ow
.getOverviewPrevPeriod()
582 prevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( prevOW
)
583 nextOW
= self
._ow
.getOverviewNextPeriod()
584 nextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nextOW
)
585 pprevOW
= self
._ow
.getOverviewPrevBigPeriod()
586 pprevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( pprevOW
)
587 nnextOW
= self
._ow
.getOverviewNextBigPeriod()
588 nnextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nnextOW
)
589 vars["date"] = """<a href="%s"><<</a> <a href="%s"><</a> %s <a href="%s">></a> <a href="%s">>></a>""" % (\
592 self
._ow
.getDate().strftime("%A %d %B %Y"), \
596 confs
= self
._ow
.getConferencesWithStartTime()
600 oi
= WOverviewConferenceItem( self
._ow
.getAW(), \
602 self
._ow
.getDate(), \
603 vars["displayConfURLGen"]( conf
),\
604 self
._ow
._cal
.getIcons(), \
605 self
._ow
.getDetailLevel(),
607 l
.append( oi
.getHTML( {} ) )
609 l
.append( _("There are no conferences on the selected day"))
610 vars["items"] = "".join(l
)
613 class WWeekOverview(wcomponents
.WTemplated
):
615 def __init__( self
, ow
):
619 vars = wcomponents
.WTemplated
.getVars( self
)
621 prevOW
= self
._ow
.getOverviewPrevPeriod()
622 prevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( prevOW
)
623 nextOW
= self
._ow
.getOverviewNextPeriod()
624 nextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nextOW
)
626 startDate
= """<a href="%s"><</a> %s""" % (\
628 self
._ow
.getStartDate().strftime("%A %d %B %Y"))
629 endDate
= """%s <a href="%s">></a>""" %(\
630 self
._ow
.getEndDate().strftime("%A %d %B %Y"),\
632 vars["dates"] = """%s – %s"""%(startDate
, endDate
)
635 sd
= self
._ow
.getStartDate()
637 while sd
<= self
._ow
.getEndDate():
638 weekend
= sd
.weekday() >= 5
639 vars["date%i" % idx
] = sd
.strftime("%a %d/%m")
641 confs
= self
._ow
.getConferencesWithStartTime(sd
)
642 for conf
, stTime
in confs
:
643 if weekend
and not conf
.hasSomethingOnWeekend(sd
.date()):
645 wc
= WOverviewConferenceItem(self
._ow
.getAW(), conf
, sd
, vars["displayConfURLGen"](conf
),
646 self
._ow
._cal
.getIcons(), self
._ow
.getDetailLevel(), stTime
)
647 res
.append(wc
.getHTML({}))
649 res
.append("<tr><td></td></tr>")
651 isWeekendFree
= False
652 vars["item%i" % idx
] = "".join(res
)
655 vars["isWeekendFree"] = isWeekendFree
659 class WMonthOverview(wcomponents
.WTemplated
):
661 def __init__( self
, ow
):
663 self
._isWeekendFree
= True
665 def _getDayCell( self
, day
):
667 confs
= day
.getConferencesWithStartTime()
672 wc
= WOverviewConferenceItem( self
._ow
.getAW(), \
675 self
._displayConfURLGen
( conf
),\
676 self
._ow
._cal
.getIcons(), \
677 self
._ow
.getDetailLevel(),
679 res
.append( wc
.getHTML( {} ) )
682 def _getMonth( self
):
685 dl
= self
._ow
.getDayList()
686 for i
in range( dl
[0].getWeekDay() ):
687 dayList
[numWeek
].append(None)
688 for day
in self
._ow
.getDayList():
689 dayList
[numWeek
].append(day
)
690 if day
.getWeekDay() >= 5:
691 if day
.getConferencesWithStartTime():
692 self
._isWeekendFree
= False
693 if day
.getWeekDay() == 6:
697 for i
in range( 6-dl
[-1].getWeekDay() ):
698 dayList
[numWeek
].append(None)
703 vars = wcomponents
.WTemplated
.getVars( self
)
704 prevOW
= self
._ow
.getOverviewPrevPeriod()
705 prevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( prevOW
)
706 nextOW
= self
._ow
.getOverviewNextPeriod()
707 nextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nextOW
)
708 pprevOW
= self
._ow
.getOverviewPrevBigPeriod()
709 pprevsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( pprevOW
)
710 nnextOW
= self
._ow
.getOverviewNextBigPeriod()
711 nnextsel
= urlHandlers
.UHCategoryOverview
.getURLFromOverview( nnextOW
)
712 startDate
= """<a href="%s"><<</a> <a href="%s"><</a> %s""" % (\
715 self
._ow
.getStartDate().strftime("%A %d %B %Y"))
716 endDate
= """%s <a href="%s">></a> <a href="%s">>></a>""" %(\
717 self
._ow
.getEndDate().strftime("%A %d %B %Y"),\
720 vars["dates"] = """%s – %s"""%(startDate
, endDate
)
722 dayNames
= [ _("Monday"), _("Tuesday"), _("Wednesday"), _("Thursday"), _("Friday"), \
723 _("Saturday"), _("Sunday") ]
724 #if calendar.SUNDAY == calendar.firstweekday():
725 # dayNames.remove( "Sunday" )
726 # dayNames.insert( "0", "Sunday" )
727 for name
in dayNames
:
728 vars["nameDay%i"%dayNames
.index(name
)] = name
729 self
._displayConfURLGen
= vars["displayConfURLGen"]
730 vars["month"] = self
._getMonth
()
731 vars["isWeekendFree"] = self
._isWeekendFree
732 vars["getDayCell"] = lambda day
: self
._getDayCell
(day
)
736 class WCategoryOverview(wcomponents
.WTemplated
):
738 def __init__( self
, ow
, aw
):
739 self
._categ
= ow
.getCategoryList()[0]
743 def _getDetailLevelOpts( self
):
745 for dl
in self
._ow
.getAllowedDetailLevels():
747 if dl
== self
._ow
.getDetailLevel():
748 selected
= "selected"
749 if dl
== "conference":
753 l
.append("""<option value="%s" %s>%s</option>"""%( dl
, selected
, dltext
))
756 def _getKey( self
, vars):
758 icons
= self
._ow
._cal
.getIcons().keys()
761 cm
= CategoryManager()
762 categ
=cm
.getById(str(icon
))
763 otherOW
= self
._ow
.getOverviewOtherCateg(categ
)
764 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/>""" %(
765 vars["categOverviewURLGen"]( otherOW
),
767 urlHandlers
.UHCategoryIcon
.getURL(categ
),
768 truncateTitle(categ
.getName(), 20)))
774 vars = wcomponents
.WTemplated
.getVars( self
)
775 l
= self
._ow
.getLocator()
784 vars["selMonth"] = ""
787 vars["detailLevelOpts"] = self
._getDetailLevelOpts
()
789 if isinstance( self
._ow
, wcalendar
.MonthOverview
):
790 displayOW
= WMonthOverview( self
._ow
)
791 vars["selMonth"] = "selected"
792 elif isinstance( self
._ow
, wcalendar
.WeekOverview
):
793 displayOW
= WWeekOverview( self
._ow
)
794 vars["selWeek"] = "selected"
796 displayOW
= WDayOverview( self
._ow
)
797 vars["selDay"] = "selected"
799 p
= { "displayConfURLGen": vars["displayConfURLGen"] }
800 vars["overview"] = displayOW
.getHTML( p
)
802 vars["locator"] = l
.getWebForm()
803 vars["key"] = self
._getKey
(vars)
805 vars["day"] = self
._ow
.getDate().day
806 vars["month"] = self
._ow
.getDate().month
807 vars["year"] = self
._ow
.getDate().year
811 def _getWeekDays(self
):
812 """returns a list with the current week days"""
814 year
=int(self
._ow
.getDate().year
)
815 month
=int(self
._ow
.getDate().month
)
816 day
=int(self
._ow
.getDate().day
)
817 daynumber
=int(calendar
.weekday(year
,month
,day
))
819 date
= self
._ow
.getDate() - timedelta(daynumber
)
823 res
.append((str(date
.day
)+"-"+str(date
.month
)+"-"+str(date
.year
)))
831 def _getNextWeekDays(self
):
834 y
=int(self
._ow
.getDate().year
)
835 m
=int(self
._ow
.getDate().month
)
836 d
=int(self
._ow
.getDate().day
)
842 if (d
+i
)<=31 and (m
==8 or m
==1 or m
==3 or m
==5 or m
==7 or m
==10):
843 res
+=[str(d
+i
)+"-"+str(m
)+"-"+str(y
)]
844 if (d
+i
)<=30 and (m
==4 or m
==6 or m
==9 or m
==11):
845 res
+=[str(d
+i
)+'-'+str(m
)+'-'+str(y
)]
846 if (d
+i
)<=28 and m
==2 and ((y
%4!=0) or (y
%4 ==0 and y
%100==0)):
847 res
+=[(str(d
+i
)+"-"+str(m
)+"-"+str(y
))]
848 if (d
+i
)<30 and m
==2 and ((y
%4==0 and y
%100!=0) or y
%400==0):
849 res
+=[(str(d
+i
)+"-"+str(m
)+"-"+str(y
))]
853 if d
<7 and len(res
)<7:
854 while j
<(7-len(res
)):
855 res
+=[(str(d
+i
+j
)+"-"+str(m
)+"-"+str(y
))]
861 def _whichPeriod(self
, vars):
862 if vars["selDay"] == "selected":
864 if vars["selWeek"] == "selected":
866 if vars["selMonth"] == "selected":
869 def _getMonthDays(self
):
870 year
=int(self
._ow
.getDate().year
)
871 month
=int(self
._ow
.getDate().month
)
873 for day
in range(1,calendar
.monthrange(year
,month
)[1]+1):
874 res
+=[str(day
)+'-'+str(month
)+'-'+str(year
)]
878 class WPCategOverview( WPCategoryDisplayBase
):
880 def __init__( self
, rh
, categ
, ow
):
881 WPCategoryDisplayBase
.__init
__( self
, rh
, categ
)
884 self
._locTZ
= DisplayTZ(self
._getAW
(),None,useServerTZ
=1).getDisplayTZ()
887 return WPCategoryDisplayBase
._getTitle
(self
) + " - " + _("Events Display")
889 def _getHeadContent( self
):
891 if self
._ow
.getDate().date() == nowutc().astimezone(timezone(self
._locTZ
)).date():
892 url
= urlHandlers
.UHCategOverviewToRSS
.getURL(self
._categ
)
893 return i18nformat("""<link rel="alternate" type="application/rss+xml" title= _("Indico RSS Feed") href="%s">""") % url
896 def _getBody( self
, params
):
897 if self
._categ
.getId() == "0" and type(self
._ow
) is Overview
and self
._ow
.getDate().date() == nowutc().astimezone(timezone(self
._locTZ
)).date():
898 path
= os
.path
.join(Config
.getInstance().getXMLCacheDir(),"categOverview")
899 currenttime
= int(time
.mktime(time
.strptime((datetime
.now()-timedelta(minutes
=60)).strftime("%a %b %d %H:%M:%S %Y"))))
900 if os
.path
.exists(path
) and os
.path
.getmtime(path
) > currenttime
:
901 fp
= file(path
, 'rb')
906 wc
= WCategoryOverview( self
._ow
, self
._rh
.getAW())
907 pars
= { "postURL": urlHandlers
.UHCategoryOverview
.getURL(), \
908 "displayConfURLGen": urlHandlers
.UHConferenceDisplay
.getURL
, \
909 "categOverviewURLGen": urlHandlers
.UHCategoryOverview
.getURLFromOverview
}
910 cache
= wc
.getHTML( pars
)
911 fp
= file(path
, 'wb')
916 wc
= WCategoryOverview( self
._ow
, self
._rh
.getAW())
917 pars
= { "postURL": urlHandlers
.UHCategoryOverview
.getURL(), \
918 "displayConfURLGen": urlHandlers
.UHConferenceDisplay
.getURL
, \
919 "categDisplayURL": urlHandlers
.UHCategoryDisplay
.getURL(self
._categ
), \
920 "categOverviewURLGen": urlHandlers
.UHCategoryOverview
.getURLFromOverview
, \
921 "categoryTitle": self
._categ
.getTitle() }
922 return wc
.getHTML( pars
)
924 def _getNavigationDrawer(self
):
925 #link = [{"url": urlHandlers.UHCategoryOverview.getURL(self._target), "title": _("Events overview")}]
926 pars
= {"target": self
._target
, "isModif": False}
927 return wcomponents
.WNavigationDrawer( pars
, type = "Overview" )
929 class WCategoryMap(wcomponents
.WTemplated
):
931 def __init__( self
, categ
):
934 def getCategMap( self
, categ
):
936 if len(categ
.getSubCategoryList()) > 0:
938 for subcat
in categ
.getSubCategoryList():
939 res
.append("<li><a href='%s'>%s</a>"% (urlHandlers
.UHCategoryDisplay
.getURL(subcat
), subcat
.getName()))
940 if subcat
.hasAnyProtection():
941 res
.append(""" <span style="font-size: 0.8em; color: gray;">(%s)</span>"""% _("protected"))
942 res
.append(self
.getCategMap(subcat
))
947 vars = wcomponents
.WTemplated
.getVars( self
)
948 vars['categName'] = self
._categ
.getName()
949 vars["categDisplayURL"] = urlHandlers
.UHCategoryDisplay
.getURL(self
._categ
)
950 vars['map'] = self
.getCategMap(self
._categ
)
953 class WPCategoryMap( WPCategoryDisplayBase
):
955 def __init__( self
, rh
, categ
):
956 WPCategoryDisplayBase
.__init
__( self
, rh
, categ
)
959 return WPCategoryDisplayBase
._getTitle
(self
) + " - " + _("Category Map")
961 def _getBody( self
, params
):
962 wc
= WCategoryMap( self
._target
)
964 return wc
.getHTML( pars
)
966 def _getNavigationDrawer(self
):
967 #link = [{"url": urlHandlers.UHCategoryMap.getURL(self._target), "title": _("Category map")}]
968 pars
= {"target": self
._target
, "isModif": False}
969 return wcomponents
.WNavigationDrawer( pars
, type = "Map" )
971 class WCategoryStatistics(wcomponents
.WTemplated
):
973 def __init__( self
, target
, wfReg
, stats
):
974 self
.__target
= target
978 def getHTML( self
, aw
):
980 return wcomponents
.WTemplated
.getHTML( self
)
983 vars = wcomponents
.WTemplated
.getVars( self
)
984 vars["name"] = self
.__target
.getName()
985 vars["img"] = self
.__target
.getIconURL()
986 vars["categDisplayURL"] = urlHandlers
.UHCategoryDisplay
.getURL(self
.__target
)
988 if self
._stats
!= None:
991 if self
._stats
["events"]:
992 wcsl
=wcomponents
.WCategoryStatisticsList( _("Number of events"), self
._stats
["events"] )
993 stats
.append(wcsl
.getHTML( self
._aw
))
994 # Number of contributions:
995 if self
._stats
["contributions"] != {}:
996 wcsl
=wcomponents
.WCategoryStatisticsList( _("Number of contributions"), self
._stats
["contributions"] )
997 stats
.append(wcsl
.getHTML( self
._aw
))
999 stats
.append( i18nformat("""<b> _("Number of contributions"): 0</b>"""))
1000 stats
.append( i18nformat("""<b> _("Number of resources"): %s</b>""")%self
._stats
["resources"])
1001 vars["updated"] = self
._stats
["updated"].strftime("%d %B %Y %H:%M")
1003 stats
.append(i18nformat("""<b> _("No statistics for the events").</b>"""))
1004 stats
.append(i18nformat("""<b> _("No statistics for the contributions").</b>"""))
1005 stats
.append(i18nformat("""<b> _("No statistics for the resources").</b>"""))
1006 vars["updated"] = nowutc().strftime("%d %B %Y %H:%M")
1007 vars["contents"] = "<br><br>".join( stats
)
1009 vars["contents"] = _("This category doesn't contain any event. No statistics are available.")
1010 vars["updated"] = nowutc().strftime("%d %B %Y %H:%M")
1013 class WPCategoryStatistics( WPCategoryDisplayBase
):
1015 def __init__( self
, rh
, target
, wfReg
, stats
):
1016 WPCategoryDisplayBase
.__init
__( self
, rh
, target
)
1020 def _getTitle(self
):
1021 return WPCategoryDisplayBase
._getTitle
(self
) + " - " + _("Category Statistics")
1023 def _getBody( self
, params
):
1024 wcs
= WCategoryStatistics( self
._target
, self
._wfReg
, self
._stats
)
1025 return wcs
.getHTML( self
._getAW
() )
1027 def _getNavigationDrawer(self
):
1028 #link = [{"url": urlHandlers.UHCategoryStatistics.getURL(self._target), "title": _("Category statistics")}]
1029 pars
= {"target": self
._target
, "isModif": False}
1030 return wcomponents
.WNavigationDrawer( pars
, type = "Statistics" )
1033 #---------------------------------------------------------------------------
1035 class WConferenceCreation( wcomponents
.WTemplated
):
1037 def __init__( self
, targetCateg
, type="conference", rh
= None ):
1038 self
._categ
= targetCateg
1044 vars = wcomponents
.WTemplated
.getVars( self
)
1046 vars["title"] = vars.get("title","")
1047 vars["description"] = vars.get("description","")
1048 vars["keywords"] = vars.get("keywords","")
1049 vars["contactInfo"] = vars.get("contactInfo","")
1050 av
=self
._rh
._getUser
()
1052 now
= nowutc().astimezone(timezone(tz
))
1053 vars["sDay"] = vars.get("sDay",now
.day
)
1054 vars["sMonth"] = vars.get("sMonth",now
.month
)
1055 vars["sYear"] = vars.get("sYear",now
.year
)
1056 vars["sHour"] = vars.get("sHour","8")
1057 vars["sMinute"] = vars.get("sMinute","00")
1058 vars["eDay"] = vars.get("eDay",now
.day
)
1059 vars["eMonth"] = vars.get("eMonth",now
.month
)
1060 vars["eYear"] = vars.get("eYear",now
.year
)
1061 vars["eHour"] = vars.get("eHour","18")
1062 vars["eMinute"] = vars.get("eMinute","00")
1065 vars["sMonth_"] = {}
1068 vars["sMinute_"] = {}
1071 for i
in range(0,10):
1072 vars["sDay_"][i
] = vars.get("sDay_%s"%i,now
.day
)
1073 vars["sMonth_"][i
] = vars.get("sMonth_%s"%i,now
.month
)
1074 vars["sYear_"][i
] = vars.get("sYear_%s"%i,now
.year
)
1075 vars["sHour_"][i
] = vars.get("sHour_%s"%i,"8")
1076 vars["sMinute_"][i
] = vars.get("sMinute_%s"%i,"00")
1077 vars["dur_"][i
] = vars.get("dur_%s"%i,"60")
1078 vars["nbDates"] = vars.get("nbDates",1)
1079 seltitle
= Config
.getInstance().getDefaultTimezone()
1081 seltitle
= self
._categ
.getTimezone()
1082 vars["timezoneOptions"] = TimezoneRegistry
.getShortSelectItemsHTML(seltitle
)
1083 vars["locationName"] = vars.get("locationName","")
1084 vars["locationAddress"] = vars.get("locationAddress","")
1085 vars["roomName"] = vars.get("locationRoom","")
1086 #vars["locator"] = self._categ.getLocator().getWebForm()
1087 vars["protection"] = "public"
1088 vars["categ"] = {"id":"", "title":_("-- please, choose a category --")}
1089 if self
._categ
and not self
._categ
.hasSubcategories():
1090 if self
._categ
.isProtected() :
1091 vars["protection"] = "private"
1092 vars["categ"] = {"id":self
._categ
.getId(), "title":self
._categ
.getTitle()}
1093 vars["nocategs"] = False
1094 if not CategoryManager().getRoot().hasSubcategories():
1095 vars["nocategs"] = True
1096 rootcateg
= CategoryManager().getRoot()
1097 if rootcateg
.isProtected():
1098 vars["protection"] = "private"
1099 vars["categ"] = {"id":rootcateg
.getId(), "title":rootcateg
.getTitle()}
1100 #vars["event_type"] = ""
1101 vars["navigator"] = navigator
1102 vars["orgText"] = ""
1103 if vars.get("orgText","") != "":
1104 vars["orgText"] = vars.get("orgText","")
1105 elif self
._rh
._getUser
():
1106 vars["orgText"] = self
._rh
._getUser
().getStraightFullName()
1107 vars["chairText"] = vars.get("chairText","")
1108 vars["supportEmail"] = vars.get("supportEmail","")
1109 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
1110 styles
= styleMgr
.getExistingStylesForEventType(self
._type
)
1114 defStyle
= self
._categ
.getDefaultStyle(self
._type
)
1116 defStyle
= styleMgr
.getDefaultStyleForEventType(self
._type
)
1117 for styleId
in styles
:
1118 if styleId
== defStyle
:
1119 selected
= "selected"
1122 styleoptions
+= "<option value=\"%s\" %s>%s</option>" % (styleId
,selected
,styleMgr
.getStyleName(styleId
))
1123 vars["styleOptions"] = styleoptions
1125 vars["chairpersonDefined"] = vars.get("chairpersonDefined", [])
1127 vars["useRoomBookingModule"] = Config
.getInstance().getIsRoomBookingActive()
1131 #---------------------------------------------------------------------------
1133 class WPConferenceCreationMainData( WPCategoryDisplayBase
):
1135 _userData
= ['favorite-user-list', 'favorite-user-ids']
1137 def getJSFiles(self
):
1138 return WPCategoryDisplayBase
.getJSFiles(self
) + \
1139 self
._includeJSPackage
('Management')
1141 def _getHeader( self
):
1144 wc
= wcomponents
.WHeader( self
._getAW
() )
1145 return wc
.getHTML( { "subArea": self
._getSiteArea
(), \
1146 "loginURL": self
._escapeChars
(str(self
.getLoginURL())),\
1147 "logoutURL": self
._escapeChars
(str(self
.getLogoutURL())) } )
1149 def _getNavigationDrawer(self
):
1150 if self
._target
and self
._target
.isRoot():
1153 pars
= {"target": self
._target
, "isModif": False}
1154 return wcomponents
.WNavigationDrawer( pars
)
1156 def _getWComponent( self
):
1157 return WConferenceCreation( self
._target
, self
._rh
._event
_type
, self
._rh
)
1159 def _getBody( self
, params
):
1160 ## TODO: TO REMOVE?????????
1161 #p = { "categDisplayURLGen": urlHandlers.UHCategoryDisplay.getURL }
1162 wc
= self
._getWComponent
()
1163 params
.update({"postURL": urlHandlers
.UHConferencePerformCreation
.getURL() })
1164 return "%s"%wc
.getHTML( params
)
1166 class WPCategoryModifBase( WPCategoryBase
):
1168 _userData
= ['favorite-user-ids']
1170 def getJSFiles(self
):
1171 return WPCategoryBase
.getJSFiles(self
) + \
1172 self
._includeJSPackage
('Management')
1174 def _getHeader(self
):
1175 wc
= wcomponents
.WHeader(self
._getAW
(), currentCategory
=self
._currentCategory
())
1177 'subArea': self
._getSiteArea
(),
1178 'loginURL': self
._escapeChars
(str(self
.getLoginURL())),
1179 'logoutURL': self
._escapeChars
(str(self
.getLogoutURL()))
1182 def _getNavigationDrawer(self
):
1183 pars
= {"target": self
._target
, "isModif" : True}
1184 return wcomponents
.WNavigationDrawer( pars
, bgColor
= "white" )
1186 def _createSideMenu( self
):
1187 self
._sideMenu
= wcomponents
.ManagementSideMenu()
1189 viewSection
= wcomponents
.SideMenuSection()
1191 self
._viewMenuItem
= wcomponents
.SideMenuItem(_("View category"),
1192 urlHandlers
.UHCategoryDisplay
.getURL( self
._target
))
1193 viewSection
.addItem( self
._viewMenuItem
)
1195 self
._sideMenu
.addSection(viewSection
)
1198 mainSection
= wcomponents
.SideMenuSection()
1200 self
._generalSettingsMenuItem
= wcomponents
.SideMenuItem(_("General settings"),
1201 urlHandlers
.UHCategoryModification
.getURL( self
._target
))
1202 mainSection
.addItem( self
._generalSettingsMenuItem
)
1204 self
._filesMenuItem
= wcomponents
.SideMenuItem(_("Files"),
1205 urlHandlers
.UHCategModifFiles
.getURL(self
._target
))
1206 mainSection
.addItem( self
._filesMenuItem
)
1208 self
._ACMenuItem
= wcomponents
.SideMenuItem(_("Protection"),
1209 urlHandlers
.UHCategModifAC
.getURL( self
._target
))
1210 mainSection
.addItem( self
._ACMenuItem
)
1212 self
._toolsMenuItem
= wcomponents
.SideMenuItem(_("Tools"),
1213 urlHandlers
.UHCategModifTools
.getURL( self
._target
))
1214 mainSection
.addItem( self
._toolsMenuItem
)
1216 self
._tasksMenuItem
= wcomponents
.SideMenuItem(_("Tasks"),
1217 urlHandlers
.UHCategModifTasks
.getURL( self
._target
))
1218 mainSection
.addItem( self
._tasksMenuItem
)
1219 if not self
._target
.tasksAllowed() :
1220 self
._tasksMenuItem
.setVisible(False)
1222 self
.extra_menu_items
= {}
1223 for name
, item
in sorted(values_from_signal(signals
.category
.management_sidemenu
.send(self
._target
)),
1224 key
=lambda x
: x
[1]._title
):
1225 self
.extra_menu_items
[name
] = item
1226 mainSection
.addItem(item
)
1228 self
._sideMenu
.addSection(mainSection
)
1230 def _createTabCtrl( self
):
1233 def _setActiveTab( self
):
1236 def _setActiveSideMenuItem( self
):
1239 def _getBody( self
, params
):
1240 self
._createSideMenu
()
1241 self
._setActiveSideMenuItem
()
1243 self
._createTabCtrl
()
1244 self
._setActiveTab
()
1246 sideMenu
= self
._sideMenu
.getHTML()
1248 frame
= WCategoryModifFrame()
1249 p
= { "category": self
._target
,
1250 "body": self
._getPageContent
( params
),
1251 "sideMenu": self
._sideMenu
.getHTML() }
1253 return frame
.getHTML( p
)
1255 def _getTabContent( self
, params
):
1258 def _getPageContent( self
, params
):
1261 def _getSiteArea(self
):
1262 return "ModificationArea"
1265 class WCategoryModifFrame(wcomponents
.WTemplated
):
1267 def __init__( self
):
1270 def getVars( self
):
1271 vars = wcomponents
.WTemplated
.getVars( self
)
1274 class WPCategModifMain( WPCategoryModifBase
):
1276 def _setActiveSideMenuItem( self
):
1277 self
._generalSettingsMenuItem
.setActive()
1280 class WCategModifMain(wcomponents
.WTemplated
):
1282 def __init__( self
, category
):
1283 self
._categ
= category
1285 def __getSubCategoryItems( self
, sl
, modifURLGen
):
1289 selbox
= """<select name="newpos%s" onChange="this.form.oldpos.value='%s';this.form.submit();">""" % (sl
.index(categ
),sl
.index(categ
))
1290 for i
in range (1,len(sl
)+1):
1291 if i
==sl
.index(categ
)+1:
1292 selbox
+= "<option selected value='%s'>%s" % (i
-1,i
)
1294 selbox
+= "<option value='%s'>%s" % (i
-1,i
)
1300 <input type="checkbox" name="selectedCateg" value="%s">
1303 <td style="padding-left:10px;">
1306 </tr>"""%(id, selbox
,modifURLGen( categ
), categ
.getName().strip() or "[no title]"))
1307 html
= i18nformat("""
1308 <input type="hidden" name="oldpos">
1309 <table align="left" width="100%%">
1311 <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>
1313 <td class="titleCellFormat" width="100%%" style="padding-left:10px;"> _("Category name")</td>
1316 </table>""")%(Config
.getInstance().getSystemIconURL("checkAll"), Config
.getInstance().getSystemIconURL("uncheckAll"), "".join( temp
))
1319 def __getConferenceItems( self
, cl
, modifURLGen
, modifURLOpen
):
1323 textopen
= i18nformat(""" <b>[ <a href="%s"> _("re-open event")</a> ]</b>""") % modifURLOpen(conf
)
1329 <input type="checkbox" name="selectedConf" value="%s">
1331 <td align="center" width="17%%">%s</td>
1332 <td align="center" width="17%%">%s</td>
1333 <td width="100%%"><a href="%s">%s</a>%s</td>
1334 </tr>"""%(conf
.getId(), conf
.getAdjustedStartDate().date(), conf
.getAdjustedEndDate().date(),modifURLGen(conf
), conf
.getTitle(), textopen
))
1335 html
= i18nformat("""<table align="left" width="100%%">
1337 <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>
1338 <td align="center" width="17%%" class="titleCellFormat" style="border-right:5px solid #FFFFFF; border-bottom: 1px solid #FFFFFF;"> _("Start date")</td>
1339 <td align="center" width="17%%" class="titleCellFormat" style="border-right:5px solid #FFFFFF; border-bottom: 1px solid #FFFFFF;"> _("End date")</td>
1340 <td width="100%%" class="titleCellFormat" style="border-right:5px solid #FFFFFF; border-bottom: 1px solid #FFFFFF;"> _("Conference title")</td>
1342 %s</table>""")%(Config
.getInstance().getSystemIconURL("checkAll"), Config
.getInstance().getSystemIconURL("uncheckAll"), "".join( temp
))
1345 def getVars( self
):
1347 index
= Catalog
.getIdx('categ_conf_sd').getCategory(self
._categ
.getId())
1348 vars = wcomponents
.WTemplated
.getVars( self
)
1349 vars["locator"] = self
._categ
.getLocator().getWebForm()
1350 vars["name"] = self
._categ
.getName()
1352 vars["description"] = self
._categ
.getDescription()
1354 if self
._categ
.getIcon() is not None:
1355 vars["icon"] = """<img src="%s" width="16" height="16" alt="category">"""%urlHandlers
.UHCategoryIcon
.getURL( self
._categ
)
1357 vars["icon"] = "None"
1358 vars["dataModifButton"] = ""
1359 if not self
._categ
.isRoot():
1360 vars["dataModifButton"] = i18nformat("""<input type="submit" class="btn" value="_("modify")">""")
1361 vars["removeItemsURL"] = vars["actionSubCategsURL"]
1362 if not self
._categ
.getSubCategoryList():
1363 vars['containsEvents'] = True
1364 vars["removeItemsURL"] = vars["actionConferencesURL"]
1365 vars["items"] = self
.__getConferenceItems
(index
.itervalues(), vars["confModifyURLGen"], vars["confModifyURLOpen"])
1367 vars['containsEvents'] = False
1368 vars["items"] = self
.__getSubCategoryItems
( self
._categ
.getSubCategoryList(), vars["categModifyURLGen"] )
1369 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
1370 vars["defaultMeetingStyle"] = styleMgr
.getStyleName(self
._categ
.getDefaultStyle("meeting"))
1371 vars["defaultLectureStyle"] = styleMgr
.getStyleName(self
._categ
.getDefaultStyle("simple_event"))
1373 ## vars["defaultVisibility"] = self._categ.getVisibility()
1374 vars["defaultTimezone"] = self
._categ
.getTimezone()
1375 visibility
= self
._categ
.getVisibility()
1376 categpath
= self
._categ
.getCategoryPath()
1378 if visibility
> len(categpath
):
1379 vars["defaultVisibility"] = _("Everywhere")
1380 elif visibility
== 0:
1381 vars["defaultVisibility"] = _("Nowhere")
1383 categId
= categpath
[visibility
-1]
1384 cat
= conference
.CategoryManager().getById(categId
)
1385 vars["defaultVisibility"] = cat
.getName()
1387 ###################################################################################################
1388 ## TODO: this code belongs to the TASKS MODULE. We should fix it or remove it.
1389 vars["enablePic"]=quoteattr(str(Config
.getInstance().getSystemIconURL( "enabledSection" )))
1390 vars["disablePic"]=quoteattr(str(Config
.getInstance().getSystemIconURL( "disabledSection" )))
1391 enabledText
= _("Click to disable")
1392 disabledText
= _("Click to enable")
1394 url
= urlHandlers
.UHCategoryTasksOption
.getURL( self
._categ
)
1397 if (self
._categ
.hasSubcategories()):
1398 icon
=vars["disablePic"]
1399 textIcon
= disabledText
1400 comment
= i18nformat("""<b> [ _("Category contains subcategories - this module cannot be enabled")]</b>""")
1402 elif self
._categ
.tasksAllowed():
1403 icon
=vars["enablePic"]
1404 textIcon
=enabledText
1405 if len(self
._categ
.getTaskList()) > 0 :
1406 comment
= i18nformat("""<b> [_("Task list is not empty - this module cannot be disabled")]</b>""")
1409 icon
=vars["disablePic"]
1410 textIcon
=disabledText
1411 tasksManagement
= """
1414 <a href=%s><img src=%s alt="%s" class="imglink"></a> <a href=%s>%s</a>%s
1416 </tr>"""%(url
,icon
,textIcon
,url
, _("Tasks List"),comment
)
1417 vars["tasksManagement"] = tasksManagement
1418 ###################################################################################################
1422 class WPCategoryModification( WPCategModifMain
):
1424 def _getPageContent( self
, params
):
1425 wc
= WCategModifMain( self
._target
)
1427 "dataModificationURL": urlHandlers
.UHCategoryDataModif
.getURL( self
._target
), \
1428 "addSubCategoryURL": urlHandlers
.UHCategoryCreation
.getURL(self
._target
),
1429 "addConferenceURL": urlHandlers
.UHConferenceCreation
.getURL( self
._target
), \
1430 "confModifyURLGen": urlHandlers
.UHConferenceModification
.getURL
, \
1431 "confModifyURLOpen": urlHandlers
.UHConferenceOpen
.getURL
, \
1432 "categModifyURLGen": urlHandlers
.UHCategoryModification
.getURL
, \
1433 "actionSubCategsURL": urlHandlers
.UHCategoryActionSubCategs
.getURL(self
._target
),
1434 "actionConferencesURL": urlHandlers
.UHCategoryActionConferences
.getURL(self
._target
)}
1435 return wc
.getHTML( pars
)
1438 class WCategoryDataModification(wcomponents
.WTemplated
):
1440 def __init__( self
, category
):
1441 self
._categ
= category
1443 def _getVisibilityHTML(self
):
1444 visibility
= self
._categ
.getVisibility()
1445 topcat
= self
._categ
1449 selected
= "selected"
1450 vis
= [ i18nformat("""<option value="0" %s> _("Nowhere")</option>""") % selected
]
1454 if level
== visibility
:
1455 selected
= "selected"
1456 if topcat
.getId() != "0":
1457 vis
.append("""<option value="%s" %s>%s</option>""" % (level
, selected
, truncateTitle(topcat
.getName(), 70)))
1458 topcat
= topcat
.getOwner()
1460 if visibility
> level
:
1461 selected
= "selected"
1462 vis
.append( i18nformat("""<option value="999" %s> _("Everywhere")</option>""") % selected
)
1466 def getVars( self
):
1467 vars = wcomponents
.WTemplated
.getVars( self
)
1468 vars["name"] = self
._categ
.getName()
1469 vars["description"] = self
._categ
.getDescription()
1470 vars["visibility"] = self
._getVisibilityHTML
()
1471 vars["timezoneOptions"] = TimezoneRegistry
.getShortSelectItemsHTML(self
._categ
.getTimezone())
1472 if self
._categ
.getIcon() is not None:
1473 vars["icon"] = """<img src="%s" width="16" height="16" alt="category">"""%urlHandlers
.UHCategoryIcon
.getURL( self
._categ
)
1475 vars["icon"] = "None"
1476 for type in [ "simple_event", "meeting" ]:
1477 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
1478 styles
= styleMgr
.getExistingStylesForEventType(type)
1480 for styleId
in styles
:
1481 defStyle
= self
._categ
.getDefaultStyle(type)
1483 defStyle
= styleMgr
.getDefaultStyleForEventType(type)
1484 if styleId
== defStyle
:
1485 selected
= "selected"
1488 styleoptions
+= "<option value=\"%s\" %s>%s</option>" % (styleId
,selected
,styleMgr
.getStyleName(styleId
))
1489 vars["%sStyleOptions" % type] = styleoptions
1494 class WPCategoryDataModification(WPCategModifMain
):
1496 def _getPageContent(self
, params
):
1497 wc
= WCategoryDataModification(self
._target
)
1498 pars
= {"postURL": urlHandlers
.UHCategoryPerformModification
.getURL(self
._target
)}
1499 return wc
.getHTML(pars
)
1502 class WCategoryCreation(wcomponents
.WTemplated
):
1504 def __init__(self
, target
):
1505 self
.__target
= target
1508 vars = wcomponents
.WTemplated
.getVars(self
)
1509 vars["locator"] = self
.__target
.getLocator().getWebForm()
1511 for type in ["simple_event", "meeting"]:
1512 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
1513 styles
= styleMgr
.getExistingStylesForEventType(type)
1516 for styleId
in styles
:
1517 defStyle
= self
.__target
.getDefaultStyle(type)
1520 defStyle
= styleMgr
.getDefaultStyleForEventType(type)
1521 if styleId
== defStyle
:
1522 selected
= "selected"
1526 styleoptions
+= "<option value=\"%s\" %s>%s</option>" % (styleId
, selected
, styleMgr
.getStyleName(styleId
))
1527 vars["%sStyleOptions" % type] = styleoptions
1529 default_tz
= Config
.getInstance().getDefaultTimezone()
1530 vars["timezoneOptions"] = TimezoneRegistry
.getShortSelectItemsHTML(default_tz
)
1531 vars["categTitle"] = self
.__target
.getTitle()
1532 if self
.__target
.isProtected():
1533 vars["categProtection"] = "private"
1535 vars["categProtection"] = "public"
1536 vars["numConferences"] = len(self
.__target
.conferences
)
1541 class WPCategoryCreation(WPCategModifMain
):
1543 def _getPageContent(self
, params
):
1544 wc
= WCategoryCreation(self
._target
)
1545 pars
= {"categDisplayURLGen": urlHandlers
.UHCategoryDisplay
.getURL
, \
1546 "postURL": urlHandlers
.UHCategoryPerformCreation
.getURL(self
._target
)}
1547 return wc
.getHTML(pars
)
1550 class WCategoryDeletion(object):
1552 def __init__(self
, categoryList
):
1553 self
._categList
= categoryList
1555 def getHTML(self
, actionURL
):
1558 for categ
in self
._categList
:
1559 categories
.append("""<li><i>%s</i></li>""" % categ
.getName())
1561 msg
= {'challenge': _("Are you sure that you want to delete the following categories?"),
1562 'target': "".join(categories
),
1564 'subtext': _("Note that all the existing sub-categories below will also be deleted")
1567 wc
= wcomponents
.WConfirmation()
1570 for categ
in self
._categList
:
1571 categIdList
.append(categ
.getId())
1573 return wc
.getHTML(msg
, actionURL
, {"selectedCateg": categIdList
},
1574 confirmButtonCaption
=_("Yes"),
1575 cancelButtonCaption
=_("No"),
1579 class WConferenceDeletion(wcomponents
.WTemplated
):
1583 class WPSubCategoryDeletion(WPCategModifMain
):
1585 def _getPageContent(self
, params
):
1586 selCategs
= params
["subCategs"]
1587 wc
= WCategoryDeletion(selCategs
)
1588 return wc
.getHTML(urlHandlers
.UHCategoryActionSubCategs
.getURL(self
._target
))
1591 class WPConferenceDeletion(WPCategModifMain
):
1593 def _getPageContent(self
, params
):
1594 wc
= WConferenceDeletion()
1595 return wc
.getHTML({'eventList': params
["events"],
1596 'postURL': urlHandlers
.UHCategoryActionConferences
.getURL(self
._target
),
1597 'cancelButtonCaption': _("No"),
1598 'confirmButtonCaption': _("Yes")})
1601 class WItemReallocation(wcomponents
.WTemplated
):
1603 def __init__(self
, itemList
):
1604 self
._itemList
= itemList
1606 def getHTML(self
, selectTree
, params
):
1607 self
._sTree
= selectTree
1608 return wcomponents
.WTemplated
.getHTML(self
, params
)
1610 def _getItemDescription(self
, item
):
1614 vars = wcomponents
.WTemplated
.getVars( self
)
1616 for item
in self
._itemList
:
1617 l
.append("<li><b>%s</b>"%self
._getItemDescription
(item
))
1618 vars["selectedItems"] = "".join(l
)
1619 vars["categTree"] = self
._sTree
.getHTML()
1623 class WCategoryReallocation( WItemReallocation
):
1625 def _getItemDescription( self
, item
):
1626 return item
.getName()
1629 class WConferenceReallocation( WItemReallocation
):
1631 def _getItemDescription( self
, item
):
1632 return item
.getTitle()
1635 class CategSelectTree
:
1637 def __init__( self
, aw
, excludedCat
, expandedCat
, \
1638 selectURLGen
, expandURLGen
, movingConference
= 0 ):
1640 self
._excludedCategs
= excludedCat
1641 self
._expandedCategs
= expandedCat
1642 self
._selectURLGen
= selectURLGen
1643 self
._expandURLGen
= expandURLGen
1644 self
._movingConference
= movingConference
1646 def _getItem( self
, categ
, level
=0 ):
1647 if not categ
.canAccess( self
._aw
):
1650 for i
in range(level
):
1651 html
= "%s "%html
1652 cfg
= Config
.getInstance()
1653 if categ
in self
._excludedCategs
:
1654 return """%s<img src="%s" border="0" alt=""> %s"""%(html
, cfg
.getSystemIconURL("collapsd.png"), categ
.getName())
1655 if (self
._movingConference
) and categ
.getSubCategoryList():
1656 title
= """%s"""%categ
.getName()
1658 title
= """<a href="%s">%s</a>"""%(self
._selectURLGen
( categ
), \
1660 if categ
in self
._expandedCategs
:
1661 ex
= copy( self
._expandedCategs
)
1663 html
= """%s<a href="%s"><img src="%s" border="0" alt=""></a> %s"""%(html
, self
._expandURLGen
( ex
), cfg
.getSystemIconURL("exploded.png"), title
)
1664 for subcat
in categ
.getSubCategoryList():
1665 html
= "%s<br>%s"%(html
, self
._getItem
(subcat
, level
+1) )
1667 html
= """%s<a href="%s"><img src="%s" border="0" alt=""></a> %s"""%(html
, self
._expandURLGen
( self
._expandedCategs
+[categ
] ), cfg
.getSystemIconURL("collapsd.png"), title
)
1670 def getHTML( self
):
1671 cm
= conference
.CategoryManager()
1672 return self
._getItem
( cm
.getRoot() )
1675 class WPCategoryReallocation( WPCategModifMain
):
1677 def _getReAllocateCategsURL( self
, destination
):
1678 url
= urlHandlers
.UHCategoryActionSubCategs
.getURL( destination
)
1680 for c
in self
._categs
:
1681 selectedCategs
.append( c
.getId() )
1682 url
.addParam( "selectedCateg", selectedCategs
)
1683 url
.addParam( "confirm", "" )
1684 url
.addParam( "reallocate", "" )
1687 def _getCategExpandCategURL( self
, expandedCategs
):
1689 for c
in self
._categs
:
1690 selected
.append( c
.getId() )
1692 for c
in expandedCategs
:
1693 expanded
.append( c
.getId() )
1694 url
= urlHandlers
.UHCategoryActionSubCategs
.getURL( self
._target
)
1695 url
.addParam( "selectedCateg", selected
)
1696 url
.addParam( "ex", expanded
)
1697 url
.addParam( "reallocate", "" )
1700 def _getExpandedCategs( self
, params
):
1701 exIdList
= params
.get("ex", [])
1702 if not isinstance( exIdList
, list ):
1703 exIdList
= [ exIdList
]
1705 cm
= conference
.CategoryManager()
1706 for categId
in exIdList
:
1707 expanded
.append( cm
.getById( categId
) )
1710 def _getPageContent( self
, params
):
1711 self
._categs
= params
["subCategs"]
1712 expanded
= self
._getExpandedCategs
( params
)
1713 pars
= {"cancelURL": urlHandlers
.UHCategoryModification
.getURL( self
._target
) }
1714 tree
= CategSelectTree( self
._getAW
(), self
._categs
, \
1716 self
._getReAllocateCategsURL
, \
1717 self
._getCategExpandCategURL
)
1718 wc
= WCategoryReallocation( self
._categs
)
1719 return wc
.getHTML( tree
, pars
)
1722 class WPConferenceReallocation( WPCategModifMain
):
1724 def _getReAllocateConfsURL( self
, destination
):
1725 url
= urlHandlers
.UHCategoryActionConferences
.getURL( destination
)
1726 url
.addParam( "srcCategId", self
._target
.getId() )
1727 url
.addParam( "selectedConf", self
._confIds
)
1728 url
.addParam( "confirm", "" )
1729 url
.addParam( "reallocate", "" )
1732 def _getExpandCategURL( self
, expandedCategs
):
1734 for c
in expandedCategs
:
1735 expanded
.append( c
.getId() )
1736 url
= urlHandlers
.UHCategoryActionConferences
.getURL( self
._target
)
1737 url
.addParam( "ex", expanded
)
1738 url
.addParam( "reallocate", "" )
1739 url
.addParam( "selectedConf", self
._confIds
)
1742 def _getExpandedCategs( self
, params
):
1743 exIdList
= params
.get("ex", [])
1744 if not isinstance( exIdList
, list ):
1745 exIdList
= [ exIdList
]
1747 cm
= conference
.CategoryManager()
1748 for categId
in exIdList
:
1749 expanded
.append( cm
.getById( categId
) )
1752 def _getPageContent( self
, params
):
1753 self
._confs
= params
["confs"]
1755 for c
in self
._confs
:
1756 self
._confIds
.append( c
.getId() )
1757 expanded
= self
._getExpandedCategs
( params
)
1758 pars
= {"cancelURL": urlHandlers
.UHCategoryModification
.getURL( self
._target
) }
1759 tree
= CategSelectTree( self
._getAW
(), [], \
1761 self
._getReAllocateConfsURL
, \
1762 self
._getExpandCategURL
, 1 )
1763 wc
= WConferenceReallocation( self
._confs
)
1764 return wc
.getHTML( tree
, pars
)
1767 class WCategModifAC(wcomponents
.WTemplated
):
1769 def __init__( self
, category
):
1770 self
._categ
= category
1772 def _getControlUserList(self
):
1773 result
= fossilize(self
._categ
.getManagerList())
1775 for email
in self
._categ
.getAccessController().getModificationEmail():
1777 pendingUser
["email"] = email
1778 pendingUser
["pending"] = True
1779 result
.append(pendingUser
)
1782 def getVars( self
):
1783 vars = wcomponents
.WTemplated
.getVars( self
)
1785 vars["modifyControlFrame"] = wcomponents
.WModificationControlFrame().getHTML(self
._categ
)
1786 if self
._categ
.isRoot() :
1791 vars["accessControlFrame"] = wcomponents
.WAccessControlFrame().getHTML(\
1793 vars["setVisibilityURL"],\
1795 if not self
._categ
.isProtected():
1796 df
= wcomponents
.WDomainControlFrame( self
._categ
)
1797 vars["accessControlFrame"] += "<br>%s"%df.getHTML()
1798 vars["confCreationControlFrame"] = ""
1799 vars["categoryId"] = self
._categ
.getId()
1800 if not self
._categ
.getSubCategoryList():
1801 frame
= wcomponents
.WConfCreationControlFrame( self
._categ
)
1802 p
= { "setStatusURL": vars["setConferenceCreationControlURL"] }
1803 vars["confCreationControlFrame"] = frame
.getHTML(p
)
1804 vars["managers"] = self
._getControlUserList
()
1807 class WPCategModifAC( WPCategoryModifBase
):
1809 def _setActiveSideMenuItem( self
):
1810 self
._ACMenuItem
.setActive()
1812 def _getPageContent(self
, params
):
1813 wc
= WCategModifAC(self
._target
)
1815 "setVisibilityURL": urlHandlers
.UHCategorySetVisibility
.getURL(self
._target
),
1816 "setConferenceCreationControlURL": urlHandlers
.UHCategorySetConfCreationControl
.getURL(self
._target
)
1818 return wc
.getHTML(pars
)
1820 #---------------------------------------------------------------------------------
1822 class WCategModifTools(wcomponents
.WTemplated
):
1824 def __init__( self
, category
):
1825 self
._categ
= category
1827 def getVars( self
):
1828 vars = wcomponents
.WTemplated
.getVars( self
)
1829 vars["deleteButton"] = ""
1830 vars["id"] = self
._categ
.getId()
1831 if not self
._categ
.isRoot():
1832 vars["deleteButton"] = i18nformat("""<input type="submit" class="btn" value="_("delete this category")">""")
1836 class WPCategModifTools( WPCategoryModifBase
):
1838 def _setActiveSideMenuItem( self
):
1839 self
._toolsMenuItem
.setActive()
1841 def _getPageContent( self
, params
):
1842 wc
= WCategModifTools( self
._target
)
1844 "deleteCategoryURL": urlHandlers
.UHCategoryDeletion
.getURL(self
._target
) }
1845 return wc
.getHTML( pars
)
1848 class WPCategoryDeletion( WPCategModifTools
):
1850 def _getPageContent( self
, params
):
1851 wc
= WCategoryDeletion( [self
._target
] )
1852 return wc
.getHTML( urlHandlers
.UHCategoryDeletion
.getURL( self
._target
) )
1854 #---------------------------------------------------------------------------------
1856 class WCategModifTasks(wcomponents
.WTemplated
):
1858 def __init__( self
, category
):
1859 self
._categ
= category
1861 def getVars( self
):
1862 vars = wcomponents
.WTemplated
.getVars( self
)
1863 if self
._categ
.tasksAllowed() :
1864 vars["tasksAllowed"] = _("Adding tasks is allowed")
1866 vars["tasksAllowed"] = _("Adding tasks IS NOT allowed")
1867 vars["id"] = self
._categ
.getId()
1868 vars["taskAction"] = urlHandlers
.UHCategModifTasksAction
.getURL(self
._categ
)
1869 vars["locator"] = ""
1871 if self
._categ
.tasksPublic() :
1872 vars["accessVisibility"] = _("PUBLIC")
1873 oppVisibility
= _("PRIVATE")
1875 vars["accessVisibility"] = _("PRIVATE")
1876 oppVisibility
= _("PUBLIC")
1877 vars["changeAccessVisibility"] = i18nformat("""( _("make it") <input type="submit" class="btn" name="accessVisibility" value="%s">)""")%oppVisibility
1879 if not self
._categ
.tasksPublic() :
1880 vars["commentVisibility"] = _("PRIVATE")
1881 vars["changeCommentVisibility"] = """"""
1883 if self
._categ
.tasksCommentPublic() :
1884 vars["commentVisibility"] = _("PUBLIC")
1885 oppVisibility
= _("PRIVATE")
1887 vars["commentVisibility"] = _("PRIVATE")
1888 oppVisibility
= _("PUBLIC")
1889 vars["changeCommentVisibility"] = i18nformat("""( _("make it") <input type="submit" class="btn" name="commentVisibility" value="%s">)""")%oppVisibility
1892 vars["managerList"] = self
._getPersonList
("manager")
1893 vars["commentList"] = self
._getPersonList
("commentator")
1894 vars["accessList"] = self
._getPersonList
("access")
1896 vars["accessOptions"] = self
._getAccessOptions
()
1897 vars["commentOptions"] = self
._getCommentOptions
()
1898 vars["managerOptions"] = self
._getManagerOptions
()
1903 def _getAccessOptions(self
, names
=[]):
1905 if len(names
) == 0 :
1906 html
.append("""<option value=""> </option>""")
1907 for event
in self
._categ
.getConferenceList() :
1909 for chair
in event
.getChairList() :
1910 text
= """<option value="h%s-%s">%s</option>"""%(event
.getId(),index
,chair
.getFullName())
1912 if not (chair
.getFullName() in names
) :
1914 names
.append(chair
.getFullName())
1916 for manager
in event
.getManagerList() :
1917 text
= """<option value="m%s-%s">%s</option>"""%(event
.getId(),index
,manager
.getFullName())
1919 if not (manager
.getFullName() in names
) :
1921 names
.append(manager
.getFullName())
1923 for participant
in event
.getParticipation().getParticipantList():
1924 text
= """<option value="p%s-%s">%s</option>"""%(event
.getId(),index
,participant
.getFullName())
1926 if not (participant
.getFullName() in names
) :
1928 names
.append(participant
.getFullName())
1932 def _getCommentOptions(self
, names
=[]):
1934 if len(names
) == 0 :
1935 html
.append("""<option value=""> </option>""")
1937 for a
in self
._categ
.getTasksAccessList() :
1938 text
= """<option value="a%s">%s</option>"""%(index
,a
.getFullName())
1940 if not (a
.getFullName() in names
) :
1942 names
.append(a
.getFullName())
1947 """+self
._getAccessOptions
(names
)
1949 def _getManagerOptions(self
):
1952 html
.append("""<option value=""> </option>""")
1954 for c
in self
._categ
.getTasksCommentatorList() :
1955 text
= """<option value="c%s">%s</option>"""%(index
,c
.getFullName())
1957 if not (c
.getFullName() in names
) :
1959 names
.append(c
.getFullName())
1964 """+self
._getCommentOptions
(names
)
1967 def _getPersonList(self
, personType
):
1970 if personType
== "access" :
1971 personList
= self
._categ
.getTasksAccessList()
1972 elif personType
== "manager" :
1973 personList
= self
._categ
.getTasksManagerList()
1974 elif personType
== "comentator" :
1975 personList
= self
._categ
.getTasksCommentatorList()
1979 for a
in personList
:
1982 <td><input type="checkbox" name="%s" value="%s"></td>
1985 """%(personType
, index
, a
.getFullName())
1997 class WPCategModifTasks( WPCategoryModifBase
):
1999 def _setActiveSideMenuItem( self
):
2000 self
._tasksMenuItem
.setActive()
2002 def _getPageContent( self
, params
):
2003 wc
= WCategModifTasks( self
._target
)
2005 "deleteCategoryURL": urlHandlers
.UHCategoryDeletion
.getURL(self
._target
) }
2007 return wc
.getHTML( pars
)
2009 class WPCategoryModifExistingMaterials( WPCategoryModifBase
):
2011 _userData
= ['favorite-user-list', 'favorite-user-ids']
2013 def getJSFiles(self
):
2014 return WPCategoryModifBase
.getJSFiles(self
) + \
2015 self
._includeJSPackage
('Management') + \
2016 self
._includeJSPackage
('MaterialEditor')
2018 def _getPageContent( self
, pars
):
2019 wc
=wcomponents
.WShowExistingMaterial(self
._target
)
2020 return wc
.getHTML( pars
)
2022 def _setActiveSideMenuItem( self
):
2023 self
._filesMenuItem
.setActive()