Person: allow assignment with specific predicate to workspace
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3930 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
6a142885c0
commit
7b017cfcca
4 changed files with 48 additions and 6 deletions
|
@ -525,6 +525,7 @@ class EditObject(FormController, I18NView):
|
||||||
instance = self.instance
|
instance = self.instance
|
||||||
formState = instance.applyTemplate(data=form, fieldHandlers=self.fieldHandlers)
|
formState = instance.applyTemplate(data=form, fieldHandlers=self.fieldHandlers)
|
||||||
self.selected = []
|
self.selected = []
|
||||||
|
self.predicates = []
|
||||||
self.old = []
|
self.old = []
|
||||||
stateKeys = []
|
stateKeys = []
|
||||||
for k in form.keys():
|
for k in form.keys():
|
||||||
|
@ -578,6 +579,8 @@ class EditObject(FormController, I18NView):
|
||||||
self.old.append(v)
|
self.old.append(v)
|
||||||
elif fieldName == 'selected' and v not in self.selected:
|
elif fieldName == 'selected' and v not in self.selected:
|
||||||
self.selected.append(v)
|
self.selected.append(v)
|
||||||
|
elif fieldName == 'predicates' and v not in self.predicates:
|
||||||
|
self.predicates.append(v)
|
||||||
|
|
||||||
def collectAutoConcepts(self):
|
def collectAutoConcepts(self):
|
||||||
pass
|
pass
|
||||||
|
@ -589,11 +592,14 @@ class EditObject(FormController, I18NView):
|
||||||
concept = util.getObjectForUid(c)
|
concept = util.getObjectForUid(c)
|
||||||
predicate = util.getObjectForUid(p)
|
predicate = util.getObjectForUid(p)
|
||||||
self.deassignConcept(obj, concept, [predicate])
|
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:
|
if v != 'none' and v not in self.old:
|
||||||
c, p = v.split(':')
|
c, p = v.split(':')
|
||||||
concept = util.getObjectForUid(c)
|
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)
|
exists = self.getConceptRelations(obj, [p], concept)
|
||||||
if not exists:
|
if not exists:
|
||||||
self.assignConcept(obj, concept, predicate)
|
self.assignConcept(obj, concept, predicate)
|
||||||
|
|
|
@ -133,7 +133,8 @@
|
||||||
<td><span i18n:translate="">Type</span>: </td>
|
<td><span i18n:translate="">Type</span>: </td>
|
||||||
<td><b i18n:translate="" tal:content="type/title" /></td>
|
<td><b i18n:translate="" tal:content="type/title" /></td>
|
||||||
<td><span i18n:translate="">Concept</span>: </td>
|
<td><span i18n:translate="">Concept</span>: </td>
|
||||||
<td colspan="2">
|
<td colspan="2"
|
||||||
|
tal:define="predicates type/predicates|nothing">
|
||||||
<select name="form.assignments.selected:list">
|
<select name="form.assignments.selected:list">
|
||||||
<tal:concepts repeat="concept python: view.conceptsForType(type['token'])">
|
<tal:concepts repeat="concept python: view.conceptsForType(type['token'])">
|
||||||
<option tal:attributes="value concept/token"
|
<option tal:attributes="value concept/token"
|
||||||
|
@ -141,6 +142,18 @@
|
||||||
tal:content="concept/title">Zope Corp</option>
|
tal:content="concept/title">Zope Corp</option>
|
||||||
</tal:concepts>
|
</tal:concepts>
|
||||||
</select>
|
</select>
|
||||||
|
<tal:predicates condition="predicates">
|
||||||
|
<span i18n:translate="">Predicate:</span>
|
||||||
|
<select name="form.assignments.predicates:list">
|
||||||
|
<option tal:repeat="pred predicates"
|
||||||
|
tal:attributes="value pred"
|
||||||
|
i18n:translate=""
|
||||||
|
tal:content="python:view.conceptManager[pred].title" />
|
||||||
|
</select>
|
||||||
|
</tal:predicates>
|
||||||
|
<input type="hidden"
|
||||||
|
name="form.assignments.predicates:list" value="standard"
|
||||||
|
tal:condition="not:predicates" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr tal:repeat="relation view/assignments">
|
<tr tal:repeat="relation view/assignments">
|
||||||
|
@ -152,6 +165,9 @@
|
||||||
tal:attributes="value relation/uidToken;" />
|
tal:attributes="value relation/uidToken;" />
|
||||||
<span tal:content="relation/adapted/getLongTitle">Something</span>
|
<span tal:content="relation/adapted/getLongTitle">Something</span>
|
||||||
(<span i18n:translate="" tal:content="relation/typeTitle">Topic</span>)
|
(<span i18n:translate="" tal:content="relation/typeTitle">Topic</span>)
|
||||||
|
<tal:predicate condition="python:relation.predicate != view.defaultPredicate">
|
||||||
|
[<i i18n:translate="" tal:content="relation/predicate/title" />]
|
||||||
|
</tal:predicate>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -75,6 +75,14 @@
|
||||||
class="loops.organize.browser.event.CalendarInfo"
|
class="loops.organize.browser.event.CalendarInfo"
|
||||||
permission="zope.View" />
|
permission="zope.View" />
|
||||||
|
|
||||||
|
<!-- specialized forms -->
|
||||||
|
|
||||||
|
<browser:page
|
||||||
|
name="edit_person.html"
|
||||||
|
for="loops.interfaces.INode"
|
||||||
|
class="loops.organize.browser.party.EditPersonForm"
|
||||||
|
permission="zope.View" />
|
||||||
|
|
||||||
<!-- authentication -->
|
<!-- authentication -->
|
||||||
|
|
||||||
<browser:addform
|
<browser:addform
|
||||||
|
@ -83,8 +91,7 @@
|
||||||
content_factory="loops.organize.auth.PersonBasedAuthenticator"
|
content_factory="loops.organize.auth.PersonBasedAuthenticator"
|
||||||
keyword_arguments="prefix"
|
keyword_arguments="prefix"
|
||||||
name="AddPersonBasedAuthenticator.html"
|
name="AddPersonBasedAuthenticator.html"
|
||||||
permission="zope.ManageServices"
|
permission="zope.ManageServices" />
|
||||||
/>
|
|
||||||
|
|
||||||
<browser:addMenuItem
|
<browser:addMenuItem
|
||||||
title="Person-based Authenticator"
|
title="Person-based Authenticator"
|
||||||
|
|
|
@ -34,6 +34,7 @@ from cybertools.ajax import innerHtml
|
||||||
from cybertools.browser.action import actions
|
from cybertools.browser.action import actions
|
||||||
from cybertools.browser.form import FormController
|
from cybertools.browser.form import FormController
|
||||||
from loops.browser.action import DialogAction
|
from loops.browser.action import DialogAction
|
||||||
|
from loops.browser.form import EditConceptForm
|
||||||
from loops.browser.node import NodeView
|
from loops.browser.node import NodeView
|
||||||
from loops.common import adapted
|
from loops.common import adapted
|
||||||
from loops.organize.party import getPersonForUser
|
from loops.organize.party import getPersonForUser
|
||||||
|
@ -56,7 +57,7 @@ actions.register('createPerson', 'portlet', DialogAction,
|
||||||
actions.register('editPerson', 'portlet', DialogAction,
|
actions.register('editPerson', 'portlet', DialogAction,
|
||||||
title=_(u'Edit Person...'),
|
title=_(u'Edit Person...'),
|
||||||
description=_(u'Modify person.'),
|
description=_(u'Modify person.'),
|
||||||
viewName='edit_concept.html',
|
viewName='edit_person.html',
|
||||||
dialogName='editPerson',
|
dialogName='editPerson',
|
||||||
prerequisites=['registerDojoDateWidget'],
|
prerequisites=['registerDojoDateWidget'],
|
||||||
)
|
)
|
||||||
|
@ -106,6 +107,18 @@ actions.register('send_email', 'object', DialogAction,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class EditPersonForm(EditConceptForm):
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def presetTypesForAssignment(self):
|
||||||
|
types = list(self.typeManager.listTypes(include=('workspace',)))
|
||||||
|
#assigned = [r.context for r in self.assignments]
|
||||||
|
#types = [t for t in types if t.typeProvider not in assigned]
|
||||||
|
return [dict(title=t.title, token=t.tokenForSearch,
|
||||||
|
predicates=['standard', 'ismember', 'ismaster']) for t in types]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SendEmailForm(NodeView):
|
class SendEmailForm(NodeView):
|
||||||
|
|
||||||
__call__ = innerHtml
|
__call__ = innerHtml
|
||||||
|
|
Loading…
Add table
Reference in a new issue