[1205] | 1 | # -*- coding: utf-8 -*- |
---|
| 2 | from zope.i18n import translate |
---|
[3511] | 3 | from zope.component import getUtility |
---|
[1205] | 4 | from zope.schema.interfaces import ITitledTokenizedTerm |
---|
| 5 | |
---|
| 6 | from Products.CMFCore.utils import getToolByName |
---|
| 7 | |
---|
[1180] | 8 | from plone.app.registry.browser import controlpanel |
---|
[3511] | 9 | from plone.registry.interfaces import IRegistry |
---|
[1180] | 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 | |
---|
[1205] | 20 | def applyChanges(self, data): |
---|
| 21 | """To save a few fields into portal_properties tool""" |
---|
| 22 | result = super(DropDownMenuSettingsEditForm, self).applyChanges(data) |
---|
[3153] | 23 | self._settings(data['show_content_tabs'], |
---|
| 24 | data['show_nonfolderish_tabs']) |
---|
[1205] | 25 | return result |
---|
[1180] | 26 | |
---|
[1205] | 27 | def update(self): |
---|
| 28 | """Also get values for a few fields from portal_properties tool""" |
---|
[3511] | 29 | try: |
---|
| 30 | super(DropDownMenuSettingsEditForm, self).update() |
---|
| 31 | except KeyError: |
---|
| 32 | registry = getUtility(IRegistry) |
---|
| 33 | registry.registerInterface(self.schema) |
---|
| 34 | super(DropDownMenuSettingsEditForm, self).update() |
---|
[1205] | 35 | conf = self._settings() |
---|
| 36 | self._overrideValue(self.widgets['show_content_tabs'], not conf[0]) |
---|
[3151] | 37 | self._overrideValue(self.widgets['show_nonfolderish_tabs'], |
---|
| 38 | not conf[1]) |
---|
[1205] | 39 | |
---|
| 40 | def _overrideValue(self, widget, value): |
---|
| 41 | if value: |
---|
[2630] | 42 | widget.value = ['selected'] |
---|
| 43 | |
---|
[1205] | 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', |
---|
[3151] | 53 | 'value': term.token, 'label': label, 'checked': checked}) |
---|
[1205] | 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 | |
---|
[1180] | 74 | class DropDownMenuSettingsControlPanel(controlpanel.ControlPanelFormWrapper): |
---|
| 75 | form = DropDownMenuSettingsEditForm |
---|