source: products/Products.qPloneDropDownMenu/trunk/Products/qPloneDropDownMenu/utils.py

Last change on this file was 2618, checked in by fenix, 14 years ago
  • made some fixes;
  • increment version;
  • added history;
  • Property svn:eol-style set to native
File size: 2.2 KB
Line 
1# -*- coding: utf-8 -*-
2""" Utility functions """
3
4from zope.component import getMultiAdapter
5
6from OFS.DTMLMethod import addDTMLMethod
7
8from Products.CMFCore.utils import getToolByName
9try: 
10    # Plone 4
11    from plone.app.upgrade.utils import safeEditProperty
12except: 
13    from Products.CMFPlone.migrations.migration_util import safeEditProperty
14
15from Products.CMFCore.Expression import Expression, createExprContext
16
17from config import PROPERTY_FIELD, PROPERTY_SHEET
18
19
20TAB_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
26def addCSS(container, sheetId, title, csshovering):
27    """ Add DTML Method object to portal root """
28    addDTMLMethod(container, sheetId, title, csshovering)
29
30def 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
36    context_state = getMultiAdapter((site, site.REQUEST),
37                                    name=u'plone_context_state')
38    actions = context_state.actions()
39    if type(actions) == dict:
40        # Plone 4
41        actions = actions['portal_tabs']
42
43    portal_tabs_view = getMultiAdapter((site, site.REQUEST),
44                                       name='portal_tabs_view')
45    portal_tabs = portal_tabs_view.topLevelTabs(actions=actions)
46
47    # dump to html
48    value = u""
49    enc = portal_props.site_properties.getProperty('default_charset', 'utf-8')
50    for tab in portal_tabs:
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)}
55
56    if not hasattr(portal_props.aq_base, PROPERTY_SHEET):
57        portal_props.addPropertySheet(PROPERTY_SHEET,
58                                      'DropDown Menu Properties')
59    ap = getattr(portal_props.aq_base, PROPERTY_SHEET)
60    safeEditProperty(ap, PROPERTY_FIELD, value, 'text')
61
62def toUnicode(value, enc='utf-8'):
63    if isinstance(value, str):
64        return value.decode(enc)
65    else:
66        return value
Note: See TracBrowser for help on using the repository browser.