class TagEditViewlet(ViewletBase): title = "Tags" sort_order = 1 render = ZopeTwoPageTemplateFile('tag-edit.pt') def __init__(self, context, request, view, manager): self.context = context self.taggable = ITaggable(context) self.request = request def tags(self): validator = getUtility(ITagValidator) return validator.tags() def selected_tags(self): tags = self.request.form.get('tag',[]) if isinstance(tags, basestring): tags=[tags] return tags def validate(self): validator = getUtility(ITagValidator) errors = {} for tag in self.selected_tags(): is_valid = validator.can_add(tag) if not is_valid: errors['tag'] = "Invalid tag" return errors def save(self): self.taggable.update(self.selected_tags())