diff --git a/browser/form.py b/browser/form.py index 1e946ea..726ef60 100644 --- a/browser/form.py +++ b/browser/form.py @@ -525,6 +525,7 @@ class EditObject(FormController, I18NView): instance = self.instance formState = instance.applyTemplate(data=form, fieldHandlers=self.fieldHandlers) self.selected = [] + self.predicates = [] self.old = [] stateKeys = [] for k in form.keys(): @@ -578,6 +579,8 @@ class EditObject(FormController, I18NView): self.old.append(v) elif fieldName == 'selected' and v not in self.selected: self.selected.append(v) + elif fieldName == 'predicates' and v not in self.predicates: + self.predicates.append(v) def collectAutoConcepts(self): pass @@ -589,11 +592,14 @@ class EditObject(FormController, I18NView): concept = util.getObjectForUid(c) predicate = util.getObjectForUid(p) self.deassignConcept(obj, concept, [predicate]) - for v in self.selected: + for idx, v in enumerate(self.selected): if v != 'none' and v not in self.old: c, p = v.split(':') concept = util.getObjectForUid(c) - predicate = util.getObjectForUid(p) + if len(self.predicates) > idx: # predefined types + predicates + predicate = self.view.conceptManager[self.predicates[idx]] + else: + predicate = util.getObjectForUid(p) exists = self.getConceptRelations(obj, [p], concept) if not exists: self.assignConcept(obj, concept, predicate) diff --git a/browser/form_macros.pt b/browser/form_macros.pt index 8b596ca..e15de5b 100644 --- a/browser/form_macros.pt +++ b/browser/form_macros.pt @@ -133,7 +133,8 @@ Type: Concept: - + + + Predicate: + + + @@ -152,6 +165,9 @@ tal:attributes="value relation/uidToken;" /> Something (Topic) + + [] + diff --git a/organize/browser/configure.zcml b/organize/browser/configure.zcml index 35fe923..4970017 100644 --- a/organize/browser/configure.zcml +++ b/organize/browser/configure.zcml @@ -75,6 +75,14 @@ class="loops.organize.browser.event.CalendarInfo" permission="zope.View" /> + + + + + permission="zope.ManageServices" />