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

Last change on this file since 2581 was 2581, checked in by fenix, 14 years ago

fixed import errors.
--Ths lin, and those below, will be ignored--

M utils.py

  • 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    portal_tabs_view = getMultiAdapter((site, site.REQUEST),
43                                       name='portal_tabs_view')
44    portal_tabs = portal_tabs_view.topLevelTabs(actions=actions)
45
46    # dump to html
47    value = u""
48    enc = portal_props.site_properties.getProperty('default_charset', 'utf-8')
49    for tab in portal_tabs:
50        value += TAB_HTML_SNIPPET % {'id': toUnicode(tab['id'], enc),
51                                     'url': toUnicode(tab['url'], enc),
52                                     'desc': toUnicode(tab['description'], enc),
53                                     'name': toUnicode(tab['name'], enc)}
54
55    if not hasattr(portal_props.aq_base, PROPERTY_SHEET):
56        portal_props.addPropertySheet(PROPERTY_SHEET,
57                                      'DropDown Menu Properties')
58    ap = getattr(portal_props.aq_base, PROPERTY_SHEET)
59    safeEditProperty(ap, PROPERTY_FIELD, value, 'text')
60
61def toUnicode(value, enc='utf-8'):
62    if isinstance(value, str):
63        return value.decode(enc)
64    else:
65        return value
Note: See TracBrowser for help on using the repository browser.