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,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: | ||||||
|  |  | ||||||
|  | @ -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
	
	 helmutm
						helmutm