Skip to content

Commit

Permalink
Migrate to Plone 6 / Python 3
Browse files Browse the repository at this point in the history
  • Loading branch information
laulaz committed Oct 1, 2024
1 parent 6a72f2e commit 9d405d2
Show file tree
Hide file tree
Showing 57 changed files with 445 additions and 1,148 deletions.
6 changes: 1 addition & 5 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,7 @@
'ExtensionClass',
'collective.z3cform.datagridfield',
'collective.contact.widget >= 1.12',
'collective.dexteritytextindexer',
'setuptools',
'ecreall.helpers.upgrade >= 1.1.6.dev0',
'five.grok',
'five.globalrequest',
'plone.api>=1.4.11',
'plone.app.dexterity',
Expand All @@ -61,8 +58,7 @@
'plone.app.relationfield',
'plone.app.textfield!=1.2.8',
'plone.autoform',
'plone.formwidget.datetime',
'plone.formwidget.masterselect>=1.3,<2.0.0',
'plone.formwidget.masterselect',
'plone.supermodel',
'Products.CMFPlone',
'vobject',
Expand Down
24 changes: 7 additions & 17 deletions src/collective/contact/core/adapters.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
from collective.contact.core.behaviors import IBirthday
from collective.contact.core.content.held_position import HeldPosition
from collective.contact.core.content.organization import IOrganization
from collective.contact.core.content.organization import Organization
from collective.contact.core.interfaces import IContactable
from collective.contact.core.interfaces import IHeldPosition
from collective.contact.core.interfaces import IPersonHeldPositions
from collective.contact.core.interfaces import IVCard
from five import grok
from plone import api
from Products.CMFPlone.utils import safe_unicode
from zope.interface import implements
from zope.interface import implementer
from zope.interface import Interface

import datetime
Expand Down Expand Up @@ -74,9 +70,7 @@ def get_vcard(self):
return vcard


class ContactDetailsVCard(grok.Adapter, ContactableVCard):
grok.context(Interface)
grok.provides(IVCard)
class ContactDetailsVCard(ContactableVCard):

def __init__(self, context):
self.context = context
Expand All @@ -90,10 +84,8 @@ def get_vcard(self):
return vcard


class HeldPositionVCard(grok.Adapter, ContactableVCard):
grok.implements(IHeldPosition)
grok.context(HeldPosition)
grok.provides(IVCard)
@implementer(IHeldPosition)
class HeldPositionVCard(ContactableVCard):

def __init__(self, context):
self.context = context
Expand Down Expand Up @@ -147,10 +139,8 @@ def get_vcard(self):
return vcard


class OrganizationVCard(grok.Adapter, ContactableVCard):
grok.implements(IOrganization)
grok.context(Organization)
grok.provides(IVCard)
@implementer(IOrganization)
class OrganizationVCard(ContactableVCard):

def __init__(self, context):
self.context = context
Expand Down Expand Up @@ -182,8 +172,8 @@ def sort_closed_positions(position1, position2):
return cmp(position1.end_date, position2.end_date)


@implementer(IPersonHeldPositions)
class PersonHeldPositionsAdapter(object):
implements(IPersonHeldPositions)

def __init__(self, person):
self.person = person
Expand Down
13 changes: 9 additions & 4 deletions src/collective/contact/core/behaviors.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,22 @@
from plone.app.textfield import RichText
from plone.autoform import directives as form
from plone.autoform.interfaces import IFormFieldProvider
from plone.formwidget.datetime.z3cform.widget import DateFieldWidget
from plone.app.z3cform.widget import DatetimeFieldWidget
from plone.formwidget.masterselect import MasterSelectBoolField
from plone.supermodel import model
from plone.supermodel.directives import fieldset
from Products.CMFDefault.exceptions import EmailAddressInvalid
from Products.CMFDefault.utils import checkEmailAddress
from z3c.form.widget import ComputedWidgetAttribute
from zope import schema
from zope.interface import alsoProvides
from zope.interface import Interface

try:
from Products.CMFDefault.exceptions import EmailAddressInvalid
from Products.CMFDefault.utils import checkEmailAddress
except ImportError:
from Products.CMFPlone.RegistrationTool import checkEmailAddress
from Products.CMFPlone.RegistrationTool import EmailAddressInvalid

import datetime
import re

Expand Down Expand Up @@ -318,7 +323,7 @@ def default_use_parent_address(adapter):

class IBirthday(model.Schema):

form.widget(birthday=DateFieldWidget)
form.widget(birthday=DatetimeFieldWidget)
birthday = schema.Date(
title=_("Birthday"),
required=False,
Expand Down
3 changes: 0 additions & 3 deletions src/collective/contact/core/behaviors.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,10 @@
xmlns="http://namespaces.zope.org/zope"
xmlns:plone="http://namespaces.plone.org/plone"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:grok="http://namespaces.zope.org/grok"
i18n_domain="collective.contact.core">

<include package="plone.behavior" file="meta.zcml" />

<grok:grok package=".behaviors" />

<plone:behavior
title="Contact details"
description="Contact details (phone number, address, email, ...)."
Expand Down
17 changes: 7 additions & 10 deletions src/collective/contact/core/browser/addcontact.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@
from collective.contact.core import _
from collective.contact.core.behaviors import IContactDetails
from collective.contact.core.content.person import IPerson
from collective.contact.widget.interfaces import IContactWidgetSettings
from collective.contact.widget.schema import ContactChoice
from collective.contact.widget.source import ContactSourceBinder
from five import grok
from plone import api
from plone.dexterity.browser.add import DefaultAddForm
from plone.dexterity.events import AddCancelledEvent
Expand All @@ -25,7 +23,7 @@
from zope.contentprovider.interfaces import IContentProvider
from zope.event import notify
from zope.i18n import Message
from zope.interface import implements
from zope.interface import implementer
from zope.interface import Interface
from zope.publisher.browser import BrowserView

Expand All @@ -50,9 +48,8 @@ def add_url_for_portal_type(self, directory_url, portal_type):
"""


class ContactWidgetSettings(grok.GlobalUtility):
grok.provides(IContactWidgetSettings)
grok.implements(ICustomSettings)
@implementer(ICustomSettings)
class ContactWidgetSettings(object):

def label_for_portal_type(self, portal_type):
if isinstance(portal_type, Message):
Expand Down Expand Up @@ -162,8 +159,8 @@ def add_contact_infos(self, widget):
}


@implementer(IContentProvider)
class MasterSelectAddContactProvider(BrowserView):
implements(IContentProvider)

def __init__(self, context, request, view):
super(MasterSelectAddContactProvider, self).__init__(context, request)
Expand Down Expand Up @@ -313,6 +310,7 @@ class IAddContact(model.Schema):
source=ContactSourceBinder(portal_type="position"))


@implementer(IFieldsAndContentProvidersForm)
class AddContact(DefaultAddForm, form.AddForm):
"""
The following is possible with this AddContact form:
Expand All @@ -324,7 +322,6 @@ class AddContact(DefaultAddForm, form.AddForm):
It's for this case we want no required errors in the form if the
IHeldPosition required fields are not filled.
"""
implements(IFieldsAndContentProvidersForm)
contentProviders = ContentProviders(['organization-ms'])
# contentProviders['organization-ms'] = MasterSelectAddContactProvider
contentProviders['organization-ms'].position = -1
Expand Down Expand Up @@ -355,7 +352,7 @@ def updateWidgets(self):
# del the widget of the one from IHeldPosition but keep its field
del self.widgets[self._schema_name + '.position']
if self.schema != IAddHeldPosition:
for widget in self.widgets.values():
for widget in list(self.widgets.values()):
if getattr(widget, 'required', False):
# copy field to not modify original one
widget.field = copy.copy(widget.field)
Expand Down Expand Up @@ -454,8 +451,8 @@ def updateWidgets(self):
super(AddContactFromPosition, self).updateWidgets()


@implementer(IFieldsAndContentProvidersForm)
class AddOrganization(form.AddForm):
implements(IFieldsAndContentProvidersForm)
contentProviders = ContentProviders(['organization-ms'])
contentProviders['organization-ms'].position = 2
label = _(u"Create ${name}", mapping={'name': _(u"organization/position")})
Expand Down
14 changes: 3 additions & 11 deletions src/collective/contact/core/browser/address.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
from Acquisition import aq_base
from collective.contact.core.behaviors import ADDRESS_FIELDS
from collective.contact.core.behaviors import IContactDetails
from collective.contact.core.browser import TEMPLATES_DIR
from collective.contact.core.interfaces import IContactCoreParameters
from collective.contact.core.interfaces import IHeldPosition
from five import grok
from Products.Five import BrowserView
from plone import api


grok.templatedir(TEMPLATES_DIR)


def get_address(obj):
"""Returns a dictionary which contains address fields"""
if aq_base(obj).use_parent_address is True:
Expand All @@ -34,18 +30,14 @@ def get_address(obj):
value = getattr(obj, field, '') or ''
address[field] = value

if not [v for v in address.values() if v]:
if not [v for v in list(address.values()) if v]:
# no value in address fields
return {}

return address


class Address(grok.View):
grok.name('address')
grok.context(IContactDetails)
grok.require("zope2.View")
grok.template('address')
class Address(BrowserView):

def namespace(self):
return get_address(self.context)
40 changes: 40 additions & 0 deletions src/collective/contact/core/browser/basefields/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:zcml="http://namespaces.zope.org/zcml"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="collective.contact.core">

<browser:page
name="basefields"
for="collective.contact.core.content.person.IPerson"
class=".views.PersonBaseFields"
template="templates/person.pt"
permission="zope2.View"
/>

<browser:page
name="basefields"
for="collective.contact.core.content.organization.IOrganization"
class=".views.OrganizationBaseFields"
template="templates/organization.pt"
permission="zope2.View"
/>

<browser:page
name="basefields"
for="collective.contact.core.content.position.IPosition"
class=".views.PositionBaseFields"
template="templates/position.pt"
permission="zope2.View"
/>

<browser:page
name="basefields"
for="collective.contact.core.content.held_position.IHeldPosition"
class=".views.HeldPositionBaseFields"
template="templates/held_position.pt"
permission="zope2.View"
/>

</configure>
45 changes: 18 additions & 27 deletions src/collective/contact/core/browser/basefields/views.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,13 @@
from AccessControl import getSecurityManager
from collective.contact.core.behaviors import IBirthday
from collective.contact.core.browser.utils import date_to_DateTime
from collective.contact.core.content.organization import IOrganization
from collective.contact.core.content.person import IPerson
from collective.contact.core.content.position import IPosition
from collective.contact.core.interfaces import IContactCoreParameters
from collective.contact.core.interfaces import IHeldPosition
from five import grok
from plone import api
from Products.Five import BrowserView
from zope.component import getUtility
from zope.schema.interfaces import IVocabularyFactory


grok.templatedir('templates')


class BaseFields(object):

def display_below_content_title(self):
Expand All @@ -24,11 +17,7 @@ def display_below_content_title(self):
default=False)


class PersonBaseFields(grok.View, BaseFields):
grok.name('basefields')
grok.template('person')
grok.context(IPerson)

class PersonBaseFields(BrowserView):
name = ''
birthday = ''
person_title = ''
Expand Down Expand Up @@ -58,13 +47,12 @@ def update(self):
self.gender = person.gender or ''
self.can_edit = sm.checkPermission('Modify portal content', person)

def __call__(self):
self.update()
return super(PersonBaseFields, self).__call__()

class OrganizationBaseFields(grok.View, BaseFields):

grok.name('basefields')
grok.template('organization')
grok.context(IOrganization)

class OrganizationBaseFields(BrowserView):
name = ''
type = ''
positions = []
Expand All @@ -83,13 +71,12 @@ def update(self):
pass
self.activity = self.context.activity

def __call__(self):
self.update()
return super(OrganizationBaseFields, self).__call__()

class PositionBaseFields(grok.View, BaseFields):

grok.name('basefields')
grok.template('position')
grok.context(IPosition)

class PositionBaseFields(BrowserView):
name = ''
type = ''

Expand All @@ -101,12 +88,12 @@ def update(self):
vocabulary = factory(self.context)
self.type = vocabulary.getTerm(position.position_type).title

def __call__(self):
self.update()
return super(PositionBaseFields, self).__call__()

class HeldPositionBaseFields(grok.View, BaseFields):
grok.name('basefields')
grok.template('held_position')
grok.context(IHeldPosition)

class HeldPositionBaseFields(BrowserView):
start_date = ''
end_date = ''
birthday = ''
Expand Down Expand Up @@ -139,3 +126,7 @@ def update(self):
self.title = held_position.get_full_title()

self.position = held_position.get_position()

def __call__(self):
self.update()
return super(HeldPositionBaseFields, self).__call__()
Loading

0 comments on commit 9d405d2

Please sign in to comment.