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:
helmutm 2010-08-02 08:05:44 +00:00
parent 6a142885c0
commit 7b017cfcca
4 changed files with 48 additions and 6 deletions

View file

@ -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,10 +592,13 @@ 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)
if len(self.predicates) > idx: # predefined types + predicates
predicate = self.view.conceptManager[self.predicates[idx]]
else:
predicate = util.getObjectForUid(p) predicate = util.getObjectForUid(p)
exists = self.getConceptRelations(obj, [p], concept) exists = self.getConceptRelations(obj, [p], concept)
if not exists: if not exists:

View file

@ -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>

View file

@ -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"

View file

@ -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