def __init__(self, *args): form.EditForm.__init__(self, *args) self.hlite = getHliteTool() self.highlights = IHighlightDataStorage(self.context) self.group_obj = None
class EditHighlight(form.EditForm): edit_label = _(u"Edit Highlight Data") add_label = _(u"Highlight Data") description = _(u"Highlight data that will appear in any configured highlight UI") template = ViewPageTemplateFile('templates/edithighlight.pt') ignoreRequest = True def __init__(self, *args): form.EditForm.__init__(self, *args) self.hlite = getHliteTool() self.highlights = IHighlightDataStorage(self.context) self.group_obj = None @property def label(self): if self.isEditing(): return self.edit_label else: return self.add_label @property def fields(self): schema = self.group_obj.schema fields = (field.Fields(schema) + field.Fields(IHighlightGroupSelect).select('selected_group')) fields['selected_group'].ignoreContext = True return fields @property def ignoreContext(self): return not (self.group_obj and self.group_obj.id in self.highlights) def getContent(self): content = self.highlights.get(self.group_obj.id, None) if content is None: content = self.getDefaultContent() return content def getDefaultContent(self): for name, factory in component.getFactoriesFor(self.group_obj.schema): if name == 'highlightdata': return factory() def update(self): self.groupsel = GroupSelectForm(self.context, self.request) self.groupsel.update() if self.groupsel.group is None: group = self.request.get('group', None) if group and group in self.highlights: self.group_obj = self.hlite[group] else: self.group_obj = getDefaultGroup(self.context) else: self.group_obj = self.groupsel.group super(EditHighlight, self).update() def updateWidgets(self): form.EditForm.updateWidgets(self) if self.group_obj: self.widgets['selected_group'].value = self.group_obj.id self.widgets['selected_group'].mode = HIDDEN_MODE def isEditing(self): """Returns True if context is highlighted in group""" return self.group_obj and self.group_obj.id in self.highlights or False @button.buttonAndHandler(_('Apply'), name='apply') def handleApply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return if data['selected_group']: self.group_obj = self.hlite[data['selected_group']] content = self.getContent() del data['selected_group'] changes = form.applyChanges(self, content, data) if self.group_obj.id not in self.highlights: self.highlights[self.group_obj.id] = content interface.alsoProvides(self.context, IHighlighted) if changes: content.author = getActiveUser() self.context.reindexObject(idxs=['object_provides', 'hlite_groups']) self.status = self.successMessage self.refreshActions = True self.updateWidgets() else: self.status = self.noChangesMessage else: self.status = _(u'Please select a group.') @button.buttonAndHandler(_(u'Delete'), name='delete', condition=lambda form: form.isEditing()) def handleDelete(self, action): data, errors = self.extractData() if data['selected_group']: self.group_obj = self.hlite[data['selected_group']] self.group_obj.removeItem(obj=self.context) self.updateWidgets() self.status = self.successMessage self.refreshActions = True else: self.status = _(u'Please select a group.')