def appstruct(self): context = self.request.context appstruct = {} view_name = self.context.default_view or "view" for name, _ in get_registered_slots(view_name): appstruct[name] = self._used_snippets(context, name) return appstruct
def __init__(self, context, request, **kwargs): super(SlotsEditView, self).__init__(context, request, **kwargs) self.schema = colander.SchemaNode(colander.Mapping(), name="slots") view_name = context.default_view or "view" for name, title in get_registered_slots(view_name): choices = self._available_snippets(self.request.context, name) choices = map(lambda s: ("snippet-%d" % s.id, s.title), choices) snippet = colander.SchemaNode(colander.Mapping(), name="snippet-mapping", title=_(u'Snippet')) snippet.add(colander.SchemaNode(colander.String(), widget=SelectWidget(values=choices), name='snippet')) self.schema.add(colander.SchemaNode(colander.Sequence(), snippet, name=name, title=title, missing=[], widget=SequenceWidget(orderable=True), validator=validate_list))
def __init__(self, context, request, **kwargs): super(SlotsEditView, self).__init__(context, request, **kwargs) self.schema = colander.SchemaNode(colander.Mapping(), name="slots") view_name = context.default_view or "view" for name, title in get_registered_slots(view_name): choices = self._available_snippets(self.request.context, name) choices = map(lambda s: ("snippet-%d" % s.id, s.title), choices) snippet = colander.SchemaNode(colander.Mapping(), name="snippet-mapping", title=_(u'Snippet')) snippet.add( colander.SchemaNode(colander.String(), widget=SelectWidget(values=choices), name='snippet')) self.schema.add( colander.SchemaNode(colander.Sequence(), snippet, name=name, title=title, missing=[], widget=SequenceWidget(orderable=True), validator=validate_list))
def save_success(self, appstruct): appstruct.pop('csrf_token', None) context = self.request.context mapper = lambda snippet: ("snippet-%d" % snippet.id, snippet) view_name = self.context.default_view or "view" slots_names = [name for name, title in get_registered_slots(view_name)] for slot in context.slots: if slot.name in slots_names: snippets = self._available_snippets(context, slot.name) snippets = dict(map(mapper, snippets)) while slot.snippets: slot.snippets.pop() for snippet in appstruct[slot.name]: snippet_id = snippet['snippet'] if snippet_id in snippets: s = snippets[snippet_id] if s not in slot.snippets: slot.snippets.append(snippets[snippet_id]) del appstruct[slot.name] for slot_name in appstruct: snippets = self._available_snippets(context, slot_name) snippets = dict(map(mapper, snippets)) slot = DocumentSlot() slot.document = context slot.name = slot_name for snippet in appstruct[slot_name]: snippet_id = snippet['snippet'] if snippet_id in snippets: s = snippets[snippet_id] if s not in slot.snippets: slot.snippets.append(snippets[snippet_id]) for slot in context.slots: if slot.name not in slots_names: context.slots.remove(slot) DBSession.delete(slot) DBSession.flush() return HTTPFound(self.request.resource_url(context))