Ejemplo n.º 1
0
    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]
Ejemplo n.º 2
0
    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