def groups(self): root = self.context request = self.request groups = [] for name, group in root.items(): if not group.isAvailable(): continue if IPreferenceCategory.providedBy(group): subgroups = [(sgroup.__title__, sgroup.__id__.split('.')[-1], sgroup) for t, sgroup in group.items() if sgroup.isAvailable()] if (len(subgroups) > 1) or hasEditableFields(group): groups.append((group.__title__, group, [{'id': id, 'group': sgroup} for t, id, sgroup in subgroups])) elif len(subgroups) == 1: groups.append((group.__title__, group, ())) else: groups.append((group.__title__, group, ())) return [{'group':group, 'subgroups': groups} for t, group, groups in groups]
def _process(self, context, path, level=1): request = self.request maincontext = self.context if path: data = [] items = getattr(context, 'items', ()) if callable(items): items = items() for name, prefs in items: if not prefs.isAvailable(): continue info = {'name': name, 'title': prefs.__title__, 'description': prefs.__description__, 'icon': queryMultiAdapter( (prefs, request), name='zmi_icon'), 'items': (), 'selected': False, 'prefs': prefs, 'level': level, 'editable': True} if prefs.__id__ == path[0].__id__: info['items'] = self._process(prefs, path[1:], level+1) elif prefs.__parent__.__id__ == '': info['items'] = self._process(prefs, [self.root], level+1) if len(info['items']) == 1: info['items'] = () if prefs.__id__ == self.context.__id__: info['selected'] = True if IPreferenceCategory.providedBy(prefs): if not info['items']: if not self._process(prefs, [prefs], level+1) \ and not hasEditableFields(prefs): continue elif not hasEditableFields(prefs): info['editable'] = False data.append(info) return data