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/>.
19 from cgi
import escape
20 from operator
import methodcaller
22 from pytz
import timezone
25 import MaKaC
.common
.info
as info
26 import MaKaC
.conference
as conference
27 import MaKaC
.webinterface
.pages
.conferences
as conferences
28 import MaKaC
.webinterface
.urlHandlers
as urlHandlers
29 import MaKaC
.webinterface
.wcomponents
as wcomponents
30 from MaKaC
import domain
31 from MaKaC
.common
import timezoneUtils
, utils
32 from MaKaC
.common
.Announcement
import getAnnoucementMgrInstance
33 from MaKaC
.common
.fossilize
import fossilize
34 from MaKaC
.fossils
.modules
import INewsItemFossil
35 from MaKaC
.i18n
import _
36 from MaKaC
.webinterface
.pages
.conferences
import WConfModifBadgePDFOptions
37 from MaKaC
.webinterface
.pages
.main
import WPMainBase
40 from indico
.core
import signals
41 from indico
.core
.config
import Config
42 from indico
.modules
import ModuleHolder
43 from indico
.modules
.users
import User
44 from indico
.util
.i18n
import i18nformat
, get_all_locales
45 from indico
.util
.signals
import values_from_signal
46 from indico
.web
.flask
.util
import url_for
49 class WPAdminsBase(WPMainBase
):
51 _userData
= ['favorite-user-ids']
53 def _getSiteArea(self
):
54 return "AdministrationArea"
56 def getCSSFiles(self
):
57 return WPMainBase
.getCSSFiles(self
) + self
._asset
_env
['admin_sass'].urls()
60 return WPMainBase
.getJSFiles(self
) + \
61 self
._includeJSPackage
('Admin') + \
62 self
._includeJSPackage
('Management')
64 def _getHeader( self
):
67 wc
= wcomponents
.WHeader( self
._getAW
() )
68 return wc
.getHTML( { "subArea": self
._getSiteArea
(), \
69 "loginURL": self
._escapeChars
(str(self
.getLoginURL())),\
70 "logoutURL": self
._escapeChars
(str(self
.getLogoutURL())), \
71 "tabControl": self
._getTabControl
() } )
73 def _createSideMenu(self
):
74 self
._sideMenu
= wcomponents
.ManagementSideMenu()
76 mainSection
= wcomponents
.SideMenuSection()
78 self
._generalSettingsMenuItem
= wcomponents
.SideMenuItem(_("General settings"),
79 urlHandlers
.UHAdminArea
.getURL())
80 mainSection
.addItem( self
._generalSettingsMenuItem
)
82 self
._domainsMenuItem
= wcomponents
.SideMenuItem(_("IP Domains"),
83 urlHandlers
.UHDomains
.getURL())
84 mainSection
.addItem( self
._domainsMenuItem
)
86 self
._templatesMenuItem
= wcomponents
.SideMenuItem(_("Layout"),
87 urlHandlers
.UHAdminLayoutGeneral
.getURL())
88 mainSection
.addItem( self
._templatesMenuItem
)
90 self
._servicesMenuItem
= wcomponents
.SideMenuItem(_("Services"), urlHandlers
.UHIPBasedACL
.getURL())
91 mainSection
.addItem(self
._servicesMenuItem
)
93 self
._homepageMenuItem
= wcomponents
.SideMenuItem(_("Homepage"),
94 urlHandlers
.UHUpdateNews
.getURL())
95 mainSection
.addItem( self
._homepageMenuItem
)
97 self
._systemMenuItem
= wcomponents
.SideMenuItem(_("System"),
98 urlHandlers
.UHAdminsSystem
.getURL())
99 mainSection
.addItem( self
._systemMenuItem
)
101 self
._protectionMenuItem
= wcomponents
.SideMenuItem(_("Protection"),
102 urlHandlers
.UHAdminsProtection
.getURL())
103 mainSection
.addItem( self
._protectionMenuItem
)
105 self
.extra_menu_items
= {}
106 for name
, item
in sorted(values_from_signal(signals
.admin_sidemenu
.send()),
107 key
=lambda x
: x
[1]._title
):
108 self
.extra_menu_items
[name
] = item
109 mainSection
.addItem(item
)
111 self
._sideMenu
.addSection(mainSection
)
114 def _getBody( self
, params
):
115 self
._createSideMenu
()
116 self
._setActiveSideMenuItem
()
118 self
._createTabCtrl
()
121 frame
= WAdminFrame()
122 p
= { "body": self
._getPageContent
( params
),
123 "sideMenu": self
._sideMenu
.getHTML() }
125 return frame
.getHTML( p
)
127 def _getNavigationDrawer(self
):
128 return wcomponents
.WSimpleNavigationDrawer(_("Server Admin"), urlHandlers
.UHAdminArea
.getURL
, bgColor
="white" )
130 def _createTabCtrl(self
):
133 def _getTabContent(self
):
136 def _setActiveTab(self
):
139 def _setActiveSideMenuItem(self
):
142 def _getPageContent(self
, params
):
145 class WAdmins(wcomponents
.WTemplated
):
148 vars = wcomponents
.WTemplated
.getVars( self
)
149 minfo
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance()
150 vars["title"] = minfo
.getTitle()
151 vars["organisation"] = minfo
.getOrganisation()
152 vars['supportEmail'] = Config
.getInstance().getSupportEmail()
153 vars['publicSupportEmail'] = Config
.getInstance().getPublicSupportEmail()
154 vars['noReplyEmail'] = Config
.getInstance().getNoReplyEmail()
155 vars["lang"] = minfo
.getLang()
157 if minfo
.getCity() != "":
158 vars["address"] = minfo
.getCity()
159 if minfo
.getCountry() != "":
160 if vars["address"] != "":
161 vars["address"] = "%s (%s)"%(vars["address"], minfo
.getCountry())
163 vars["address"] = "%s"%minfo
.getCountry()
164 vars["timezone"] = Config
.getInstance().getDefaultTimezone()
165 vars["systemIconAdmins"] = Config
.getInstance().getSystemIconURL( "admin" )
166 iconDisabled
= str(Config
.getInstance().getSystemIconURL( "disabledSection" ))
167 iconEnabled
= str(Config
.getInstance().getSystemIconURL( "enabledSection" ))
168 url
= urlHandlers
.UHAdminSwitchNewsActive
.getURL()
169 icon
= iconEnabled
if minfo
.isNewsActive() else iconDisabled
170 vars["features"] = i18nformat("""<a href="%s"><img src="%s" border="0" style="float:left; padding-right: 5px">_("News Pages")</a>""") % (url
, icon
)
171 vars["administrators"] = fossilize(sorted([u
.as_avatar
for u
in User
.find(is_admin
=True, is_deleted
=False)],
172 key
=methodcaller('getStraightFullName')))
176 class WAdminFrame(wcomponents
.WTemplated
):
178 def __init__( self
):
182 vars = wcomponents
.WTemplated
.getVars( self
)
183 vars["imgGestionGrey"] = Config
.getInstance().getSystemIconURL( "gestionGrey" )
184 vars["titleTabPixels"] = self
.getTitleTabPixels()
185 vars["intermediateVTabPixels"] = self
.getIntermediateVTabPixels()
188 def getIntermediateVTabPixels( self
):
191 def getTitleTabPixels( self
):
194 class WRBAdminFrame(WAdminFrame
):
197 class WPAdmins( WPAdminsBase
):
199 def _setActiveSideMenuItem(self
):
200 self
._generalSettingsMenuItem
.setActive()
202 def _getPageContent( self
, params
):
204 pars
= { "GeneralInfoModifURL": urlHandlers
.UHGeneralInfoModification
.getURL() }
205 return wc
.getHTML( pars
)
208 class WGeneralInfoModification(wcomponents
.WTemplated
):
211 vars = wcomponents
.WTemplated
.getVars(self
)
212 genInfo
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance()
213 vars["title"] = genInfo
.getTitle()
214 vars["organisation"] = genInfo
.getOrganisation()
215 vars["city"] = genInfo
.getCity()
216 vars["country"] = genInfo
.getCountry()
217 vars["language"] = genInfo
.getLang()
218 vars["language_list"] = get_all_locales()
222 class WPGenInfoModification( WPAdmins
):
224 def _getPageContent( self
, params
):
225 wc
= WGeneralInfoModification()
226 pars
= { "postURL": urlHandlers
.UHGeneralInfoPerformModification
.getURL() }
227 return wc
.getHTML( pars
)
229 class WPHomepageCommon( WPAdminsBase
):
230 def _setActiveSideMenuItem(self
):
231 self
._homepageMenuItem
.setActive()
233 def _createTabCtrl( self
):
234 self
._tabCtrl
= wcomponents
.TabControl()
236 self
._subTabNews
= self
._tabCtrl
.newTab( "news", _("News"), \
237 urlHandlers
.UHUpdateNews
.getURL() )
238 self
._subTabAnnouncements
= self
._tabCtrl
.newTab( "announcements", _("Announcements"), \
239 urlHandlers
.UHAnnouncement
.getURL() )
240 self
._subTabUpcoming
= self
._tabCtrl
.newTab( "upcoming", _("Upcoming Events"), \
241 urlHandlers
.UHConfigUpcomingEvents
.getURL() )
243 def _getPageContent(self
, params
):
244 return wcomponents
.WTabControl( self
._tabCtrl
, self
._getAW
() ).getHTML( self
._getTabContent
( params
) )
246 class WPUpdateNews( WPHomepageCommon
):
248 def _setActiveTab( self
):
249 self
._subTabNews
.setActive()
251 def getCSSFiles(self
):
252 return WPHomepageCommon
.getCSSFiles(self
) + self
._asset
_env
['news_sass'].urls()
254 def _getTabContent( self
, params
):
255 tz
= timezone(timezoneUtils
.DisplayTZ(self
._getAW
()).getDisplayTZ())
257 newsModule
= ModuleHolder().getById("news")
259 newslist
= fossilize(newsModule
.getNewsItemsList(), INewsItemFossil
, tz
=tz
)
260 newsTypesList
= newsModule
.getNewsTypesAsDict()
261 recentDays
= newsModule
.getRecentDays()
263 pars
= {"newslist": newslist
,
264 "newsTypesList": newsTypesList
,
265 "recentDays": recentDays
}
267 return wc
.getHTML( pars
)
269 class WUpdateNews(wcomponents
.WTemplated
):
272 vars = wcomponents
.WTemplated
.getVars( self
)
273 vars["baseURL"] = Config
.getInstance().getBaseURL()
274 vars["postURL"] = urlHandlers
.UHUpdateNews
.getURL()
277 class WPConfigUpcomingEvents( WPHomepageCommon
):
279 def _setActiveTab( self
):
280 self
._subTabUpcoming
.setActive()
282 def _getTabContent( self
, params
):
283 wc
= WConfigUpcomingEvents()
285 return wc
.getHTML( pars
)
287 class WConfigUpcomingEvents(wcomponents
.WTemplated
):
290 vars = wcomponents
.WTemplated
.getVars( self
)
291 module
= ModuleHolder().getById("upcoming_events")
292 vars["cacheTTL"] = module
.getCacheTTL().seconds
/60
293 vars["numberItems"] = module
.getNumberItems()
297 class WPAnnouncementModif( WPHomepageCommon
):
299 def _setActiveTab( self
):
300 self
._subTabAnnouncements
.setActive()
302 def _getTabContent( self
, params
):
303 wc
= WAnnouncementModif()
304 pars
= {"saveURL": urlHandlers
.UHAnnouncementSave
.getURL() }
305 return wc
.getHTML( pars
)
307 class WAnnouncementModif(wcomponents
.WTemplated
):
310 vars = wcomponents
.WTemplated
.getVars(self
)
311 an
= getAnnoucementMgrInstance()
312 vars["announcement"] = escape(an
.getText()).replace("\"", """)
316 class WPServicesCommon( WPAdminsBase
):
318 def _setActiveSideMenuItem(self
):
319 self
._servicesMenuItem
.setActive()
321 def _createTabCtrl( self
):
322 self
._tabCtrl
= wcomponents
.TabControl()
324 self
._subTabIPBasedACL
= self
._tabCtrl
.newTab( "ip_based_acl", _("IP Based ACL"), \
325 urlHandlers
.UHIPBasedACL
.getURL() )
327 def _getPageContent(self
, params
):
328 return wcomponents
.WTabControl( self
._tabCtrl
, self
._getAW
() ).getHTML( self
._getTabContent
( params
) )
331 class WPTemplatesCommon( WPAdminsBase
):
333 def _setActiveSideMenuItem(self
):
334 self
._templatesMenuItem
.setActive()
336 def _createTabCtrl( self
):
337 self
._tabCtrl
= wcomponents
.TabControl()
339 self
._subTabGeneral
= self
._tabCtrl
.newTab( "general", _("General Definitions"), \
340 urlHandlers
.UHAdminLayoutGeneral
.getURL() )
341 self
._subTabStyles
= self
._tabCtrl
.newTab( "styles", _("Timetable Styles"), \
342 urlHandlers
.UHAdminsStyles
.getURL() )
343 self
._subTabCSSTpls
= self
._tabCtrl
.newTab( "styles", _("Conference Styles"), \
344 urlHandlers
.UHAdminsConferenceStyles
.getURL() )
345 self
._subTabBadges
= self
._tabCtrl
.newTab( "badges", _("Badges"), \
346 urlHandlers
.UHBadgeTemplates
.getURL() )
347 self
._subTabPosters
= self
._tabCtrl
.newTab( "posters", _("Posters"), \
348 urlHandlers
.UHPosterTemplates
.getURL() )
350 def _getPageContent(self
, params
):
351 return wcomponents
.WTabControl( self
._tabCtrl
, self
._getAW
() ).getHTML( self
._getTabContent
( params
) )
353 return WPAdminsBase
._getBody
( self
, params
)
355 return self
._getTabContent
( params
)
358 class WPBadgeTemplatesBase(WPTemplatesCommon
):
360 def getCSSFiles(self
):
361 return WPTemplatesCommon
.getCSSFiles(self
) + self
._asset
_env
['indico_badges_css'].urls()
363 def getJSFiles(self
):
364 return WPTemplatesCommon
.getJSFiles(self
) + self
._includeJSPackage
('badges_js')
367 class WPAdminLayoutGeneral( WPTemplatesCommon
):
369 def _setActiveTab( self
):
370 self
._subTabGeneral
.setActive()
372 def __getAvailableTemplates(self
):
373 tplDir
= Config
.getInstance().getTPLDir()
375 tplRE
= re
.compile('^([^\.]+)\.([^\.]+)\.tpl$')
379 fnames
= os
.listdir(tplDir
);
381 m
= tplRE
.match(fname
)
383 templates
[m
.group(2)] = None
385 tplRE
= re
.compile('^([^\.]+)\.([^\.]+)\.wohl$')
387 fnames
= os
.listdir(os
.path
.join(tplDir
, 'chelp'))
389 m
= tplRE
.match(fname
)
391 templates
[m
.group(2)] = None
393 cssRE
= re
.compile('Default.([^\.]+)\.css$')
395 fnames
= os
.listdir(Config
.getInstance().getCssDir())
397 m
= cssRE
.match(fname
)
399 templates
[m
.group(1)] = None
401 return templates
.keys()
403 def _getTabContent(self
, params
):
404 minfo
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance()
405 socialCfg
= minfo
.getSocialAppConfig()
406 wc
= WAdminLayoutGeneral()
408 "defaultTemplateSet": minfo
.getDefaultTemplateSet(),
409 "availableTemplates": self
.__getAvailableTemplates
(),
410 "templateSetFormURL": urlHandlers
.UHAdminLayoutSaveTemplateSet
.getURL(),
411 "socialFormURL": urlHandlers
.UHAdminLayoutSaveSocial
.getURL(),
412 "socialActive": socialCfg
.get('active', True),
413 "facebookData": socialCfg
.get('facebook', {})
415 return wc
.getHTML(pars
)
418 class WAdminLayoutGeneral(wcomponents
.WTemplated
):
422 class WPAdminsConferenceStyles( WPTemplatesCommon
):
424 def _getTabContent( self
, params
):
425 wp
= WAdminsConferenceStyles()
426 return wp
.getHTML(params
)
428 def _setActiveTab( self
):
429 self
._subTabCSSTpls
.setActive()
432 class WAdminsConferenceStyles(wcomponents
.WTemplated
):
435 vars = wcomponents
.WTemplated
.getVars( self
)
436 vars["contextHelpText"] = _("This is the list of templates that an organizer can use to customize a conference")
437 cssTplsModule
=ModuleHolder().getById("cssTpls")
438 vars["cssTplsModule"] = cssTplsModule
442 class WPAdminsStyles( WPTemplatesCommon
):
444 def _getTabContent( self
, params
):
446 return wp
.getHTML(params
)
448 def _setActiveTab( self
):
449 self
._subTabStyles
.setActive()
451 class WAdminsStyles(wcomponents
.WTemplated
):
454 vars = wcomponents
.WTemplated
.getVars( self
)
455 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
456 vars["styleMgr"] = styleMgr
457 baseTPLPath
= styleMgr
.getBaseTPLPath()
458 baseCSSPath
= styleMgr
.getBaseCSSPath()
459 vars["contextHelpText"] = i18nformat("""- <b>_("TPL files")</b> _("are mandatory and located in"):<br/>%s<br/>- <b>_("CSS files")</b> _("are optional and located in"):<br/>%s<br/>- <b>_("Lines in red")</b> _("indicate missing .tpl or .css files (these styles will not be presented to the users"))""") % (baseTPLPath
,baseCSSPath
)
460 vars["deleteIconURL"] = Config
.getInstance().getSystemIconURL("remove")
463 class WPAdminsAddStyle( WPAdminsStyles
):
465 def _getTabContent( self
, params
):
466 wp
= WAdminsAddStyle()
467 return wp
.getHTML(params
)
469 class WAdminsAddStyle(wcomponents
.WTemplated
):
471 def _getAllFiles(self
, basePath
, extension
, excludedDirs
=[]):
473 for root
, dirs
, files
in os
.walk(basePath
):
474 for excluded
in excludedDirs
:
476 dirs
.remove(excluded
)
477 for filename
in files
:
478 fullPath
= os
.path
.join(root
, filename
)
479 if os
.path
.isfile(fullPath
) and filename
.endswith(extension
):
480 collectedFiles
.append(os
.path
.relpath(fullPath
, basePath
))
481 return sorted(collectedFiles
)
484 vars = wcomponents
.WTemplated
.getVars( self
)
485 styleMgr
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance().getStyleManager()
486 vars["styleMgr"] = styleMgr
487 baseTPLPath
= styleMgr
.getBaseTPLPath()
488 baseCSSPath
= styleMgr
.getBaseCSSPath()
489 baseXSLPath
= styleMgr
.getBaseXSLPath()
490 vars["availableTemplates"] = self
._getAllFiles
(baseTPLPath
, '.tpl', excludedDirs
=['include'])
491 vars["availableStyleSheets"] = self
._getAllFiles
(baseXSLPath
, '.xsl', excludedDirs
=['include'])
492 vars["availableCSS"] = self
._getAllFiles
(baseCSSPath
, '.css')
493 vars["xslContextHelpText"] = r
"Lists all XSL files in %s (except special folders named \'include\', which are reserved)" % baseXSLPath
494 vars["tplContextHelpText"] = r
"Lists all TPL files in %s (except special folders named \'include\', which are reserved)" % baseTPLPath
495 vars["cssContextHelpText"] = "Lists all CSS files in %s" % baseCSSPath
498 class WAdminTemplates(wcomponents
.WTemplated
):
501 vars = wcomponents
.WTemplated
.getVars( self
)
504 class WPBadgeTemplates(WPBadgeTemplatesBase
):
505 pageURL
= "badgeTemplates.py"
507 def __init__(self
, rh
):
508 WPBadgeTemplatesBase
.__init
__(self
, rh
)
510 def _getTabContent( self
, params
):
511 wp
= WBadgeTemplates(conference
.CategoryManager().getDefaultConference())
512 return wp
.getHTML(params
)
514 def _setActiveTab( self
):
515 self
._subTabBadges
.setActive()
518 class WPPosterTemplates(WPBadgeTemplatesBase
):
519 pageURL
= "posterTemplates.py"
521 def __init__(self
, rh
):
522 WPBadgeTemplatesBase
.__init
__(self
, rh
)
524 def _getTabContent( self
, params
):
525 wp
= WPosterTemplates(conference
.CategoryManager().getDefaultConference())
526 return wp
.getHTML(params
)
528 def _setActiveTab(self
):
529 self
._subTabPosters
.setActive()
532 class WPBadgeTemplateDesign(WPBadgeTemplatesBase
):
534 def __init__(self
, rh
, conf
, templateId
=None, new
=False):
535 WPBadgeTemplatesBase
.__init
__(self
, rh
)
537 self
.__templateId
= templateId
540 def _setActiveTab(self
):
541 self
._subTabBadges
.setActive()
543 def _getTabContent(self
, params
):
544 wc
= conferences
.WConfModifBadgeDesign(self
._conf
, self
.__templateId
, self
.__new
)
548 class WPPosterTemplateDesign(WPBadgeTemplatesBase
):
550 def __init__(self
, rh
, conf
, templateId
=None, new
=False):
551 WPBadgeTemplatesBase
.__init
__(self
, rh
)
553 self
.__templateId
= templateId
556 def _setActiveTab(self
):
557 self
._subTabPosters
.setActive()
559 def _getTabContent(self
, params
):
560 wc
= conferences
.WConfModifPosterDesign(self
._conf
, self
.__templateId
, self
.__new
)
564 class WBadgePosterTemplatingBase(wcomponents
.WTemplated
):
566 DEF_TEMPLATE_BADGE
= None
568 def __init__(self
, conference
, user
=None):
569 wcomponents
.WTemplated
.__init
__(self
)
570 self
._conf
= conference
575 vars = wcomponents
.WTemplated
.getVars(self
)
576 vars['NewDefaultTemplateURL'] = str(self
.DEF_TEMPLATE_BADGE
.getURL(self
._conf
,
577 self
._conf
.getBadgeTemplateManager().getNewTemplateId(), new
=True))
579 vars['templateList'] = self
._getTemplates
()
580 self
._addExtras
(vars)
584 def _getConfTemplates(self
):
586 To be overridden in inheriting class.
590 def _getTemplates(self
):
592 rawTemplates
= self
._getConfTemplates
()
593 rawTemplates
.sort(lambda x
, y
: cmp(x
[1].getName(), y
[1].getName()))
595 for templateId
, template
in rawTemplates
:
596 templates
.append(self
._processTemplate
(templateId
, template
))
600 def _addExtras(self
, vars):
602 To be overridden in inheriting class, adds specific entries
603 into the dictionary vars which the child implementation may require.
607 def _processTemplate(self
, templateId
, template
):
609 To be overridden in inheriting class, takes the template and its
610 ID, the child then processes the data into the format it expects later.
615 class WBadgeTemplates(WBadgePosterTemplatingBase
):
617 DEF_TEMPLATE_BADGE
= urlHandlers
.UHModifDefTemplateBadge
619 def _addExtras(self
, vars):
620 vars['PDFOptions'] = WConfModifBadgePDFOptions(self
._conf
,
621 showKeepValues
=False,
622 showTip
=False).getHTML()
624 def _getConfTemplates(self
):
625 return self
._conf
.getBadgeTemplateManager().getTemplates().items()
627 def _processTemplate(self
, templateId
, template
):
631 'name': template
.getName(),
632 'urlEdit': str(uh
.UHConfModifBadgeDesign
.getURL(self
._conf
, templateId
)),
633 'urlDelete': str(uh
.UHConfModifBadgePrinting
.getURL(self
._conf
, deleteTemplateId
=templateId
))
639 class WPosterTemplates(WBadgePosterTemplatingBase
):
641 DEF_TEMPLATE_BADGE
= urlHandlers
.UHModifDefTemplatePoster
643 def _getConfTemplates(self
):
644 return self
._conf
.getPosterTemplateManager().getTemplates().items()
646 def _processTemplate(self
, templateId
, template
):
650 'name': template
.getName(),
651 'urlEdit': str(uh
.UHConfModifPosterDesign
.getURL(self
._conf
, templateId
)),
652 'urlDelete': str(uh
.UHConfModifPosterPrinting
.getURL(self
._conf
, deleteTemplateId
=templateId
)),
653 'urlCopy': str(uh
.UHConfModifPosterPrinting
.getURL(self
._conf
, copyTemplateId
=templateId
))
659 class WPDomainBase( WPAdminsBase
):
661 def __init__( self
, rh
):
662 WPAdminsBase
.__init
__( self
, rh
)
664 def _setActiveSideMenuItem( self
):
665 self
._domainsMenuItem
.setActive()
667 class WBrowseDomains( wcomponents
.WTemplated
):
669 def __init__( self
, letter
=None ):
670 self
._letter
= letter
673 vars = wcomponents
.WTemplated
.getVars( self
)
674 dh
= domain
.DomainHolder()
675 letters
= dh
.getBrowseIndex()
676 vars["browseIndex"] = i18nformat("""
677 <span class="nav_border"><a href='' class="nav_link" onClick="document.browseForm.letter.disable=1;document.browseForm.submit();return false;">_("clear")</a></span>""")
678 if self
._letter
== "all":
679 vars["browseIndex"] += """
682 vars["browseIndex"] += i18nformat("""
683 <span class="nav_border"><a href='' class="nav_link" onClick="document.browseForm.letter.value='all';document.browseForm.submit();return false;">_("all")</a></span> """)
684 for letter
in letters
:
685 if self
._letter
== letter
:
686 vars["browseIndex"] += """\n[%s] """ % letter
688 vars["browseIndex"] += """\n<span class="nav_border"><a href='' class="nav_link" onClick="document.browseForm.letter.value='%s';document.browseForm.submit();return false;">%s</a></span> """ % (escape(letter
,True),letter
)
689 vars["browseResult"] = ""
691 if self
._letter
not in [ None, "" ]:
692 if self
._letter
!= "all":
693 res
= dh
.matchFirstLetter(self
._letter
)
695 res
= dh
.getValuesToList()
696 res
.sort(utils
.sortDomainsByName
)
697 vars["browseResult"] = WHTMLDomainList(vars,res
).getHTML()
700 class WDomainList(wcomponents
.WTemplated
):
702 def __init__( self
, criteria
, params
):
703 self
._criteria
= criteria
704 self
._params
= params
706 def _performSearch( self
, criteria
):
707 dh
= domain
.DomainHolder()
708 res
= dh
.match(criteria
)
712 vars = wcomponents
.WTemplated
.getVars( self
)
713 vars["createDomainURL"] = urlHandlers
.UHNewDomain
.getURL()
714 vars["nbDomains"] = domain
.DomainHolder().getLength()
715 vars["browseDomains"] = WBrowseDomains(self
._params
.get("letter",None)).getHTML(vars)
716 vars["browseDomainsURL"] = urlHandlers
.UHDomains
.getURL()
717 vars["searchDomainsURL"] = urlHandlers
.UHDomains
.getURL()
720 domainList
= self
._performSearch
(self
._criteria
)
721 vars["domains"] = WHTMLDomainList(vars,domainList
).getHTML()
724 class WHTMLDomainList
:
726 def __init__(self
, vars, list):
734 <table width="100%%" align="left" style="border-top: 1px solid #777777; padding-top:10px">"""
737 for dom
in self
._list
:
742 url
= self
._vars
["domainDetailsURLGen"]( dom
)
744 <td bgcolor="%s"><a href="%s">%s</a></td>
745 </tr>"""%(color
, url
, dom
.getName() or _("no name") ) )
747 text
+= "".join( ul
)
750 <td><br><span class="blacktext"> No domains for this search</span></td></tr>"""
756 class WPDomainList( WPDomainBase
):
758 def __init__( self
, rh
, params
):
759 WPDomainBase
.__init
__( self
, rh
)
760 self
._params
= params
762 def _getPageContent( self
, params
):
764 if self
._params
.get("sName","") != "":
765 criteria
["name"] = self
._params
.get("sName","")
766 comp
= WDomainList(criteria
,self
._params
)
767 pars
= {"domainDetailsURLGen": urlHandlers
.UHDomainDetails
.getURL
}
768 return comp
.getHTML(pars
)
771 class WDomainDetails(wcomponents
.WTemplated
):
773 def __init__( self
, dom
):
777 vars = wcomponents
.WTemplated
.getVars( self
)
778 vars["name"] = self
._domain
.getName()
779 vars["description"] = self
._domain
.getDescription()
780 vars["filters"] = "<br>".join(self
._domain
.getFilterList())
784 class WPDomainDetails( WPDomainBase
):
786 def __init__(self
, rh
, domain
):
787 WPDomainBase
.__init
__(self
, rh
)
788 self
._domain
= domain
790 def _getPageContent( self
, params
):
791 comp
= WDomainDetails( self
._domain
)
792 pars
= {"modifyURL": urlHandlers
.UHDomainModification
.getURL( self
._domain
) }
793 return comp
.getHTML( pars
)
796 class WDomainDataModification(wcomponents
.WTemplated
):
798 def __init__( self
, dom
):
802 vars = wcomponents
.WTemplated
.getVars( self
)
803 vars["name"] = self
._domain
.getName()
804 vars["description"] = self
._domain
.getDescription()
805 vars["filters"] = ";".join( self
._domain
.getFilterList() )
806 vars["locator"] = self
._domain
.getLocator().getWebForm()
810 class WPDomainModification( WPDomainBase
):
812 def __init__(self
, rh
, domain
):
813 WPDomainBase
.__init
__(self
, rh
)
814 self
._domain
= domain
816 def _getPageContent( self
, params
):
817 comp
= WDomainDataModification( self
._domain
)
819 'postURL': urlHandlers
.UHDomainPerformModification
.getURL(self
._domain
)
821 return comp
.getHTML( pars
)
824 class WDomainCreation(wcomponents
.WTemplated
):
828 class WPDomainCreation( WPDomainBase
):
830 def _getPageContent( self
, params
):
831 comp
= WDomainCreation()
832 pars
= {"postURL": urlHandlers
.UHDomainPerformCreation
.getURL()}
833 return comp
.getHTML( pars
)
836 class WPAdminsSystemBase(WPAdminsBase
):
837 def __init__(self
, rh
):
838 WPAdminsBase
.__init
__(self
, rh
)
840 def _setActiveSideMenuItem(self
):
841 self
._systemMenuItem
.setActive()
843 def _createTabCtrl(self
):
844 self
._tabCtrl
= wcomponents
.TabControl()
846 self
._subTabConfiguration
= self
._tabCtrl
.newTab("configuration", _("Configuration"),
847 urlHandlers
.UHAdminsSystem
.getURL())
848 self
._subTabMaintenance
= self
._tabCtrl
.newTab("maintenance", _("Maintenance"),
849 urlHandlers
.UHMaintenance
.getURL())
851 def _getPageContent(self
, params
):
852 return wcomponents
.WTabControl(self
._tabCtrl
, self
._getAW
()).getHTML(self
._getTabContent
(params
))
855 class WPAdminsSystem(WPAdminsSystemBase
):
857 def _setActiveTab(self
):
858 self
._subTabConfiguration
.setActive()
860 def _getTabContent(self
, params
):
862 return wc
.getHTML(params
)
865 class WAdminsSystem(wcomponents
.WTemplated
):
868 vars = wcomponents
.WTemplated
.getVars(self
)
869 minfo
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance()
870 vars["minfo"] = minfo
871 vars["ModifURL"] = urlHandlers
.UHAdminsSystemModif
.getURL()
872 vars['use_proxy'] = Config
.getInstance().getUseProxy()
876 class WPAdminsSystemModif(WPAdminsSystemBase
):
878 def _getTabContent(self
, params
):
879 wc
= WAdminsSystemModif()
880 return wc
.getHTML(params
)
883 class WAdminsSystemModif(wcomponents
.WTemplated
):
886 vars = wcomponents
.WTemplated
.getVars(self
)
887 minfo
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance()
888 vars["minfo"] = minfo
889 vars["postURL"] = urlHandlers
.UHAdminsSystemModif
.getURL()
893 class WPMaintenanceBase(WPAdminsSystemBase
):
895 def __init__(self
, rh
):
896 WPAdminsBase
.__init
__(self
, rh
)
898 def _setActiveTab(self
):
899 self
._subTabMaintenance
.setActive()
902 class WPMaintenance(WPMaintenanceBase
):
904 def __init__(self
, rh
, s
, dbSize
):
905 WPMaintenanceBase
.__init
__(self
, rh
)
907 self
._dbSize
= dbSize
909 def _getTabContent(self
, params
):
910 wc
= WAdminMaintenance()
911 pars
= { "cleanupURL": urlHandlers
.UHMaintenanceTmpCleanup
.getURL(), \
912 "tempSize": self
._stat
[0], \
913 "nFiles": "%s files" % self
._stat
[1], \
914 "nDirs": "%s folders" % self
._stat
[2], \
915 "packURL": urlHandlers
.UHMaintenancePack
.getURL(), \
916 "dbSize": self
._dbSize
}
917 return wc
.getHTML(pars
)
920 class WAdminMaintenance(wcomponents
.WTemplated
):
923 vars = wcomponents
.WTemplated
.getVars(self
)
927 class WPMaintenanceTmpCleanup(WPMaintenanceBase
):
929 def __init__(self
, rh
):
930 WPMaintenanceBase
.__init
__(self
, rh
)
932 def _getTabContent(self
, params
):
933 msg
= """Are you sure you want to delete the temporary directory
934 (note that all the files in that directory will be deleted)?"""
935 wc
= wcomponents
.WConfirmation()
936 url
= urlHandlers
.UHMaintenancePerformTmpCleanup
.getURL()
938 <table align="center" width="95%%">
940 <td class="formTitle">Maintenance: Cleaning-up temporary directory</td>
949 """ % wc
.getHTML(msg
, url
, {})
952 class WPMaintenancePack(WPMaintenanceBase
):
954 def __init__(self
, rh
):
955 WPMaintenanceBase
.__init
__(self
, rh
)
957 def _getTabContent(self
, params
):
958 wc
= wcomponents
.WConfirmation()
959 msg
= """Are you sure you want to pack the database?"""
960 url
= urlHandlers
.UHMaintenancePerformPack
.getURL()
962 <table align="center" width="95%%">
964 <td class="formTitle">Maintenance: Database packing</td>
973 """ % wc
.getHTML(msg
, url
, {})
976 class WPIPBasedACL( WPServicesCommon
):
978 def __init__( self
, rh
):
979 WPServicesCommon
.__init
__( self
, rh
)
981 def _getTabContent(self
, params
):
983 return wc
.getHTML(params
)
985 def _setActiveTab(self
):
986 self
._subTabIPBasedACL
.setActive()
989 class WIPBasedACL(wcomponents
.WTemplated
):
992 vars = wcomponents
.WTemplated
.getVars(self
)
993 minfo
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance()
994 vars["ipList"] = minfo
.getIPBasedACLMgr().get_full_access_acl()
995 vars["removeIcon"] = Config
.getInstance().getSystemIconURL("remove")
999 class WPAdminProtection(WPAdminsBase
):
1001 def _setActiveSideMenuItem(self
):
1002 self
._protectionMenuItem
.setActive()
1004 def _getPageContent(self
, params
):
1005 wc
= WAdminProtection()
1009 class WAdminProtection(wcomponents
.WTemplated
):
1012 vars = wcomponents
.WTemplated
.getVars(self
)
1013 minfo
= info
.HelperMaKaCInfo
.getMaKaCInfoInstance()
1014 vars["protectionDisclaimerProtected"] = minfo
.getProtectionDisclaimerProtected()
1015 vars["protectionDisclaimerRestricted"] = minfo
.getProtectionDisclaimerRestricted()