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
|
||||
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)
|
||||
|
|
|
@ -133,7 +133,8 @@
|
|||
<td><span i18n:translate="">Type</span>: </td>
|
||||
<td><b i18n:translate="" tal:content="type/title" /></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">
|
||||
<tal:concepts repeat="concept python: view.conceptsForType(type['token'])">
|
||||
<option tal:attributes="value concept/token"
|
||||
|
@ -141,6 +142,18 @@
|
|||
tal:content="concept/title">Zope Corp</option>
|
||||
</tal:concepts>
|
||||
</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>
|
||||
</tr>
|
||||
<tr tal:repeat="relation view/assignments">
|
||||
|
@ -152,6 +165,9 @@
|
|||
tal:attributes="value relation/uidToken;" />
|
||||
<span tal:content="relation/adapted/getLongTitle">Something</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>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
|
@ -75,6 +75,14 @@
|
|||
class="loops.organize.browser.event.CalendarInfo"
|
||||
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 -->
|
||||
|
||||
<browser:addform
|
||||
|
@ -83,8 +91,7 @@
|
|||
content_factory="loops.organize.auth.PersonBasedAuthenticator"
|
||||
keyword_arguments="prefix"
|
||||
name="AddPersonBasedAuthenticator.html"
|
||||
permission="zope.ManageServices"
|
||||
/>
|
||||
permission="zope.ManageServices" />
|
||||
|
||||
<browser:addMenuItem
|
||||
title="Person-based Authenticator"
|
||||
|
|
|
@ -34,6 +34,7 @@ from cybertools.ajax import innerHtml
|
|||
from cybertools.browser.action import actions
|
||||
from cybertools.browser.form import FormController
|
||||
from loops.browser.action import DialogAction
|
||||
from loops.browser.form import EditConceptForm
|
||||
from loops.browser.node import NodeView
|
||||
from loops.common import adapted
|
||||
from loops.organize.party import getPersonForUser
|
||||
|
@ -56,7 +57,7 @@ actions.register('createPerson', 'portlet', DialogAction,
|
|||
actions.register('editPerson', 'portlet', DialogAction,
|
||||
title=_(u'Edit Person...'),
|
||||
description=_(u'Modify person.'),
|
||||
viewName='edit_concept.html',
|
||||
viewName='edit_person.html',
|
||||
dialogName='editPerson',
|
||||
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):
|
||||
|
||||
__call__ = innerHtml
|
||||
|
|
Loading…
Add table
Reference in a new issue