more on person; provide address, task
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1225 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
6ab11a50e9
commit
98c195492e
5 changed files with 110 additions and 9 deletions
|
@ -28,6 +28,7 @@ from zope.app.catalog.interfaces import ICatalog
|
||||||
from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent
|
from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent
|
||||||
from zope.app.container.contained import ObjectRemovedEvent
|
from zope.app.container.contained import ObjectRemovedEvent
|
||||||
from zope.app.form.browser.interfaces import ITerms
|
from zope.app.form.browser.interfaces import ITerms
|
||||||
|
from zope.app.form.interfaces import IDisplayWidget
|
||||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.cachedescriptors.property import Lazy
|
||||||
from zope.dottedname.resolve import resolve
|
from zope.dottedname.resolve import resolve
|
||||||
|
@ -74,12 +75,15 @@ class ConceptView(BaseView):
|
||||||
ti = IType(self.context).typeInterface
|
ti = IType(self.context).typeInterface
|
||||||
if not ti: return
|
if not ti: return
|
||||||
adapter = ti(self.context)
|
adapter = ti(self.context)
|
||||||
for f in ti:
|
for n, f in schema.getFieldsInOrder(ti):
|
||||||
title = getattr(ti[f], 'title', '')
|
value = getattr(adapter, n, '')
|
||||||
value = getattr(adapter, f, '')
|
if not value:
|
||||||
if not (value and title):
|
|
||||||
continue
|
continue
|
||||||
yield {'title': title, 'value': value, 'id': f}
|
bound = f.bind(adapter)
|
||||||
|
widget = component.getMultiAdapter(
|
||||||
|
(bound, self.request), IDisplayWidget)
|
||||||
|
widget.setRenderedValue(value)
|
||||||
|
yield dict(title=f.title, value=value, id=n, widget=widget)
|
||||||
|
|
||||||
def children(self):
|
def children(self):
|
||||||
for r in self.context.getChildRelations():
|
for r in self.context.getChildRelations():
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<tr tal:repeat="field item/fieldData">
|
<tr tal:repeat="field item/fieldData">
|
||||||
<td><span tal:content="field/title"
|
<td><span tal:content="field/title"
|
||||||
i18n:translate="" />:</td>
|
i18n:translate="" />:</td>
|
||||||
<td tal:content="nocall:field/value"></td>
|
<td tal:content="structure field/widget"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<metal:listing use-macro="item/template/macros/conceptlisting2" />
|
<metal:listing use-macro="item/template/macros/conceptlisting2" />
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
i18n_domain="zope"
|
i18n_domain="zope"
|
||||||
>
|
>
|
||||||
|
|
||||||
<!-- party: person, ... -->
|
<!-- party: person, address, task, ... -->
|
||||||
|
|
||||||
<zope:adapter factory="loops.organize.party.Person"
|
<zope:adapter factory="loops.organize.party.Person"
|
||||||
provides="loops.organize.interfaces.IPerson"
|
provides="loops.organize.interfaces.IPerson"
|
||||||
|
@ -25,6 +25,26 @@
|
||||||
handler="loops.organize.party.removePersonReferenceFromPrincipal"
|
handler="loops.organize.party.removePersonReferenceFromPrincipal"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<zope:adapter factory="loops.organize.party.Address"
|
||||||
|
trusted="True" />
|
||||||
|
|
||||||
|
<zope:class class="loops.organize.party.Address">
|
||||||
|
<require permission="zope.View"
|
||||||
|
interface="cybertools.organize.interfaces.IAddress" />
|
||||||
|
<require permission="zope.ManageContent"
|
||||||
|
set_schema="cybertools.organize.interfaces.IAddress" />
|
||||||
|
</zope:class>
|
||||||
|
|
||||||
|
<zope:adapter factory="loops.organize.task.Task"
|
||||||
|
trusted="True" />
|
||||||
|
|
||||||
|
<zope:class class="loops.organize.task.Task">
|
||||||
|
<require permission="zope.View"
|
||||||
|
interface="cybertools.organize.interfaces.ITask" />
|
||||||
|
<require permission="zope.ManageContent"
|
||||||
|
set_schema="cybertools.organize.interfaces.ITask" />
|
||||||
|
</zope:class>
|
||||||
|
|
||||||
<!-- my stuff and other views -->
|
<!-- my stuff and other views -->
|
||||||
|
|
||||||
<zope:adapter
|
<zope:adapter
|
||||||
|
@ -36,6 +56,17 @@
|
||||||
permission="zope.View"
|
permission="zope.View"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<!-- widget(s) -->
|
||||||
|
|
||||||
|
<zope:view
|
||||||
|
type="zope.publisher.interfaces.browser.IBrowserRequest"
|
||||||
|
for="cybertools.organize.interfaces.SimpleList
|
||||||
|
zope.schema.interfaces.ITextLine"
|
||||||
|
provides="zope.app.form.interfaces.IDisplayWidget"
|
||||||
|
factory="cybertools.browser.widget.SimpleListDisplayWidget"
|
||||||
|
permission="zope.Public"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- member registration -->
|
<!-- member registration -->
|
||||||
|
|
||||||
<zope:adapter factory="loops.organize.member.MemberRegistrationManager"
|
<zope:adapter factory="loops.organize.member.MemberRegistrationManager"
|
||||||
|
|
|
@ -33,6 +33,7 @@ from zope.schema.interfaces import ValidationError
|
||||||
from zope.app.form.interfaces import WidgetInputError
|
from zope.app.form.interfaces import WidgetInputError
|
||||||
from zope.security.proxy import removeSecurityProxy
|
from zope.security.proxy import removeSecurityProxy
|
||||||
|
|
||||||
|
from cybertools.organize.interfaces import IAddress
|
||||||
from cybertools.organize.party import Person as BasePerson
|
from cybertools.organize.party import Person as BasePerson
|
||||||
from cybertools.typology.interfaces import IType
|
from cybertools.typology.interfaces import IType
|
||||||
from loops.interfaces import IConcept
|
from loops.interfaces import IConcept
|
||||||
|
@ -42,7 +43,7 @@ from loops.type import TypeInterfaceSourceList, AdapterBase
|
||||||
|
|
||||||
# register IPerson as a type interface - (TODO: use a function for this)
|
# register IPerson as a type interface - (TODO: use a function for this)
|
||||||
|
|
||||||
TypeInterfaceSourceList.typeInterfaces += (IPerson,)
|
TypeInterfaceSourceList.typeInterfaces += (IPerson, IAddress)
|
||||||
|
|
||||||
|
|
||||||
class Person(AdapterBase, BasePerson):
|
class Person(AdapterBase, BasePerson):
|
||||||
|
@ -51,7 +52,7 @@ class Person(AdapterBase, BasePerson):
|
||||||
|
|
||||||
implements(IPerson)
|
implements(IPerson)
|
||||||
|
|
||||||
_attributes = ('context', '__parent__', 'userId',)
|
_attributes = ('context', '__parent__', 'userId', 'phoneNumbers')
|
||||||
_schemas = list(IPerson) + list(IConcept)
|
_schemas = list(IPerson) + list(IConcept)
|
||||||
|
|
||||||
def getUserId(self):
|
def getUserId(self):
|
||||||
|
@ -79,6 +80,12 @@ class Person(AdapterBase, BasePerson):
|
||||||
pa = annotations(principal)
|
pa = annotations(principal)
|
||||||
pa[ANNOTATION_KEY] = None
|
pa[ANNOTATION_KEY] = None
|
||||||
|
|
||||||
|
def getPhoneNumbers(self):
|
||||||
|
return getattr(self.context, '_phoneNumbers', [])
|
||||||
|
def setPhoneNumbers(self, value):
|
||||||
|
self.context._phoneNumbers = value
|
||||||
|
phoneNumbers = property(getPhoneNumbers, setPhoneNumbers)
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def authentication(self):
|
def authentication(self):
|
||||||
return getAuthenticationUtility(self.context)
|
return getAuthenticationUtility(self.context)
|
||||||
|
@ -125,3 +132,19 @@ def removePersonReferenceFromPrincipal(context, event):
|
||||||
person = IPerson(context)
|
person = IPerson(context)
|
||||||
person.removeReferenceFromPrincipal(person.userId)
|
person.removeReferenceFromPrincipal(person.userId)
|
||||||
|
|
||||||
|
|
||||||
|
class Address(AdapterBase):
|
||||||
|
""" typeInterface adapter for concepts of type 'address'.
|
||||||
|
"""
|
||||||
|
|
||||||
|
implements(IAddress)
|
||||||
|
|
||||||
|
_attributes = ('context', '__parent__', 'lines')
|
||||||
|
_schemas = list(IAddress) + list(IConcept)
|
||||||
|
|
||||||
|
def getLines(self):
|
||||||
|
return getattr(self.context, '_lines', [])
|
||||||
|
def setLines(self, value):
|
||||||
|
self.context._lines = value
|
||||||
|
lines = property(getLines, setLines)
|
||||||
|
|
||||||
|
|
43
organize/task.py
Normal file
43
organize/task.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 Helmut Merz helmutm@cy55.de
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
|
||||||
|
"""
|
||||||
|
Adapters for IConcept providing interfaces from the cybertools.organize package.
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
"""
|
||||||
|
|
||||||
|
from zope.interface import implements
|
||||||
|
|
||||||
|
from cybertools.organize.interfaces import ITask
|
||||||
|
from loops.interfaces import IConcept
|
||||||
|
from loops.type import TypeInterfaceSourceList, AdapterBase
|
||||||
|
|
||||||
|
|
||||||
|
TypeInterfaceSourceList.typeInterfaces += (ITask,)
|
||||||
|
|
||||||
|
|
||||||
|
class Task(AdapterBase):
|
||||||
|
""" typeInterface adapter for concepts of type 'task' or 'project'.
|
||||||
|
"""
|
||||||
|
|
||||||
|
implements(ITask)
|
||||||
|
|
||||||
|
_attributes = ('context', '__parent__',)
|
||||||
|
_schemas = list(ITask) + list(IConcept)
|
||||||
|
|
Loading…
Add table
Reference in a new issue