1 | # -*- coding: utf-8 -*- |
---|
2 | from zope.i18n import translate |
---|
3 | from zope.component import getUtility |
---|
4 | from zope.schema.interfaces import ITitledTokenizedTerm |
---|
5 | |
---|
6 | from Products.CMFCore.utils import getToolByName |
---|
7 | |
---|
8 | from plone.app.registry.browser import controlpanel |
---|
9 | from plone.registry.interfaces import IRegistry |
---|
10 | |
---|
11 | from quintagroup.dropdownmenu.interfaces import IDropDownMenuSettings, _ |
---|
12 | |
---|
13 | |
---|
14 | class DropDownMenuSettingsEditForm(controlpanel.RegistryEditForm): |
---|
15 | |
---|
16 | schema = IDropDownMenuSettings |
---|
17 | label = _(u"DropDown Menu settings") |
---|
18 | description = _(u"Please enter the options specified") |
---|
19 | |
---|
20 | def applyChanges(self, data): |
---|
21 | """To save a few fields into portal_properties tool""" |
---|
22 | result = super(DropDownMenuSettingsEditForm, self).applyChanges(data) |
---|
23 | self._settings(data['show_content_tabs'], |
---|
24 | data['show_nonfolderish_tabs']) |
---|
25 | return result |
---|
26 | |
---|
27 | def update(self): |
---|
28 | """Also get values for a few fields from portal_properties tool""" |
---|
29 | try: |
---|
30 | super(DropDownMenuSettingsEditForm, self).update() |
---|
31 | except KeyError: |
---|
32 | registry = getUtility(IRegistry) |
---|
33 | registry.registerInterface(self.schema) |
---|
34 | super(DropDownMenuSettingsEditForm, self).update() |
---|
35 | conf = self._settings() |
---|
36 | self._overrideValue(self.widgets['show_content_tabs'], not conf[0]) |
---|
37 | self._overrideValue(self.widgets['show_nonfolderish_tabs'], |
---|
38 | not conf[1]) |
---|
39 | |
---|
40 | def _overrideValue(self, widget, value): |
---|
41 | if value: |
---|
42 | widget.value = ['selected'] |
---|
43 | |
---|
44 | widget.items = [] |
---|
45 | for count, term in enumerate(widget.terms): |
---|
46 | checked = widget.isChecked(term) |
---|
47 | id = '%s-%i' % (widget.id, count) |
---|
48 | label = term.token |
---|
49 | if ITitledTokenizedTerm.providedBy(term): |
---|
50 | label = translate(term.title, context=widget.request, |
---|
51 | default=term.title) |
---|
52 | widget.items.append({'id': id, 'name': widget.name + ':list', |
---|
53 | 'value': term.token, 'label': label, 'checked': checked}) |
---|
54 | |
---|
55 | def _settings(self, folder=None, nonfolderish=None): |
---|
56 | """Return portal_properties settings""" |
---|
57 | props = [True, True] |
---|
58 | prop_tool = getToolByName(self.context, 'portal_properties') |
---|
59 | if 'site_properties' in prop_tool.objectIds(): |
---|
60 | sheet = prop_tool._getOb('site_properties') |
---|
61 | if sheet.hasProperty('disable_folder_sections'): |
---|
62 | if folder is not None: |
---|
63 | sheet.manage_changeProperties( |
---|
64 | disable_folder_sections=not folder) |
---|
65 | props[0] = sheet.getProperty('disable_folder_sections') |
---|
66 | if sheet.hasProperty('disable_nonfolderish_sections'): |
---|
67 | if nonfolderish is not None: |
---|
68 | sheet.manage_changeProperties( |
---|
69 | disable_nonfolderish_sections=not nonfolderish) |
---|
70 | props[1] = sheet.getProperty('disable_nonfolderish_sections') |
---|
71 | return props |
---|
72 | |
---|
73 | |
---|
74 | class DropDownMenuSettingsControlPanel(controlpanel.ControlPanelFormWrapper): |
---|
75 | form = DropDownMenuSettingsEditForm |
---|