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

View file

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

View file

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

View file

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