[1140] | 1 | # -*- coding: utf-8 -*- |
---|
[1] | 2 | """ Utility functions """ |
---|
| 3 | |
---|
[372] | 4 | from zope.component import getMultiAdapter |
---|
| 5 | |
---|
| 6 | from OFS.DTMLMethod import addDTMLMethod |
---|
| 7 | |
---|
| 8 | from Products.CMFCore.utils import getToolByName |
---|
[2183] | 9 | try: |
---|
| 10 | # Plone 4 |
---|
| 11 | from plone.app.upgrade.utils import safeEditProperty |
---|
| 12 | except: |
---|
| 13 | from Products.CMFPlone.migrations.migration_util import safeEditProperty |
---|
| 14 | |
---|
[372] | 15 | from Products.CMFCore.Expression import Expression, createExprContext |
---|
| 16 | |
---|
| 17 | from config import PROPERTY_FIELD, PROPERTY_SHEET |
---|
| 18 | |
---|
[1140] | 19 | |
---|
| 20 | TAB_HTML_SNIPPET = """<li id="portaltab-%(id)s" class="plain"> |
---|
| 21 | <a href="%(url)s" accesskey="t" title="%(desc)s">%(name)s</a> |
---|
| 22 | </li> |
---|
| 23 | """ |
---|
| 24 | |
---|
| 25 | |
---|
[1] | 26 | def addCSS(container, sheetId, title, csshovering): |
---|
| 27 | """ Add DTML Method object to portal root """ |
---|
[372] | 28 | addDTMLMethod(container, sheetId, title, csshovering) |
---|
| 29 | |
---|
| 30 | def updateMenu(site): |
---|
| 31 | pu = getToolByName(site, 'plone_utils') |
---|
| 32 | pa = getToolByName(site, 'portal_actions') |
---|
| 33 | portal_props = getToolByName(site, 'portal_properties') |
---|
| 34 | |
---|
| 35 | # collect all portal tabs |
---|
[1140] | 36 | context_state = getMultiAdapter((site, site.REQUEST), |
---|
| 37 | name=u'plone_context_state') |
---|
[372] | 38 | actions = context_state.actions() |
---|
[2183] | 39 | if type(actions) == dict: |
---|
| 40 | # Plone 4 |
---|
| 41 | actions = actions['portal_tabs'] |
---|
| 42 | |
---|
[1140] | 43 | portal_tabs_view = getMultiAdapter((site, site.REQUEST), |
---|
| 44 | name='portal_tabs_view') |
---|
[372] | 45 | portal_tabs = portal_tabs_view.topLevelTabs(actions=actions) |
---|
| 46 | |
---|
| 47 | # dump to html |
---|
[1140] | 48 | value = u"" |
---|
| 49 | enc = portal_props.site_properties.getProperty('default_charset', 'utf-8') |
---|
[372] | 50 | for tab in portal_tabs: |
---|
[1140] | 51 | value += TAB_HTML_SNIPPET % {'id': toUnicode(tab['id'], enc), |
---|
| 52 | 'url': toUnicode(tab['url'], enc), |
---|
| 53 | 'desc': toUnicode(tab['description'], enc), |
---|
| 54 | 'name': toUnicode(tab['name'], enc)} |
---|
[372] | 55 | |
---|
| 56 | if not hasattr(portal_props.aq_base, PROPERTY_SHEET): |
---|
[1140] | 57 | portal_props.addPropertySheet(PROPERTY_SHEET, |
---|
| 58 | 'DropDown Menu Properties') |
---|
[372] | 59 | ap = getattr(portal_props.aq_base, PROPERTY_SHEET) |
---|
| 60 | safeEditProperty(ap, PROPERTY_FIELD, value, 'text') |
---|
[1140] | 61 | |
---|
| 62 | def toUnicode(value, enc='utf-8'): |
---|
| 63 | if isinstance(value, str): |
---|
| 64 | return value.decode(enc) |
---|
| 65 | else: |
---|
| 66 | return value |
---|