From 5d8d0ce799646b9f721507ee4f37dc710ede18ba Mon Sep 17 00:00:00 2001 From: Gagaro Date: Tue, 20 Aug 2013 18:09:47 +0200 Subject: [PATCH] feat: add settings for users --- collective/rcse/configure.zcml | 1 + collective/rcse/content/configure.zcml | 2 + collective/rcse/content/member.py | 2 + collective/rcse/content/settings.py | 26 +++++++++++++ .../rcse/page/controller/configure.zcml | 8 ++++ .../rcse/page/controller/person_view.py | 4 +- .../page/controller/personal-preferences.py | 25 ++++++++++-- collective/rcse/page/controller/settings.py | 26 +++++++++++++ .../page/controller/timeline_item_view.py | 1 - collective/rcse/profiles/default/registry.xml | 17 -------- collective/rcse/settings.py | 39 ++++++++----------- 11 files changed, 105 insertions(+), 46 deletions(-) create mode 100644 collective/rcse/content/settings.py create mode 100644 collective/rcse/page/controller/settings.py diff --git a/collective/rcse/configure.zcml b/collective/rcse/configure.zcml index f20e1e14..73ded35b 100644 --- a/collective/rcse/configure.zcml +++ b/collective/rcse/configure.zcml @@ -15,6 +15,7 @@ + diff --git a/collective/rcse/content/configure.zcml b/collective/rcse/content/configure.zcml index f29f9091..99c1e72d 100644 --- a/collective/rcse/content/configure.zcml +++ b/collective/rcse/content/configure.zcml @@ -18,4 +18,6 @@ for="collective.rcse.content.member.IMember Products.DCWorkflow.interfaces.IAfterTransitionEvent" /> + + diff --git a/collective/rcse/content/member.py b/collective/rcse/content/member.py index 9832b099..590e1b4d 100644 --- a/collective/rcse/content/member.py +++ b/collective/rcse/content/member.py @@ -3,6 +3,8 @@ from plone.namedfile import field from plone.supermodel import model from z3c.form.browser.select import SelectFieldWidget +from zope.annotation import IAttributeAnnotatable +from zope import interface from zope import schema from collective.rcse.i18n import _ diff --git a/collective/rcse/content/settings.py b/collective/rcse/content/settings.py new file mode 100644 index 00000000..9b08a45a --- /dev/null +++ b/collective/rcse/content/settings.py @@ -0,0 +1,26 @@ +from zope.annotation.interfaces import IAttributeAnnotatable, IAnnotations +from zope.annotation import factory +from zope import component +from zope import interface +from zope import schema + +from collective.rcse.settings import getDefaultSettings + + +class ISettings(interface.Interface): + settings = schema.Dict( + title=u"Settings", + key_type=schema.ASCIILine(), + value_type=schema.ASCIILine() + ) + + +class Settings(object): + interface.implements(ISettings) + component.adapts(IAttributeAnnotatable) + + def __init__(self): + self.settings = getDefaultSettings() + + +SettingsFactory = factory(Settings) diff --git a/collective/rcse/page/controller/configure.zcml b/collective/rcse/page/controller/configure.zcml index a89eec3f..cdddea45 100644 --- a/collective/rcse/page/controller/configure.zcml +++ b/collective/rcse/page/controller/configure.zcml @@ -80,6 +80,14 @@ permission="zope2.View" /> + + - - - - - Subscribe when favorited - You will automatically subscribed to contents you add to your favorites. - - True - - - - Watch when favorited - You will automatically watch groups you add to your favorites. - - True - - {"portal_type": {"query": "collective.rcse.group"},"path": {"query": "/"}} diff --git a/collective/rcse/settings.py b/collective/rcse/settings.py index a793fca8..768e6b4c 100644 --- a/collective/rcse/settings.py +++ b/collective/rcse/settings.py @@ -1,20 +1,17 @@ -from plone.registry.interfaces import IRegistry from Products.CMFCore.utils import getToolByName -from zope.component import getUtility +from zope import component from zope import interface from zope import schema from collective.rcse.i18n import _ -class IDocumentActionsIcons(interface.Interface): - """Interface for icon/actions mapping setting""" +class ISettings(interface.Interface): + """Marker interface to get utilities giving + interfaces with default settings.""" - mapping = schema.Dict( - title=_(u"Action to icon"), - key_type=schema.ASCIILine(), - value_type=schema.ASCIILine(), - ) + def getInterface(): + """Return an interface with default settings.""" class IPersonalPreferences(interface.Interface): @@ -24,27 +21,23 @@ class IPersonalPreferences(interface.Interface): title=_(u"Subscribe when favorited"), description=_(u"You will automatically subscribed to contents " u"you add to your favorites."), + default=True ) watch_when_favorited = schema.Bool( title=_(u"Watch when favorited"), description=_(u"You will automatically watch groups you add " u"to your favorites."), + default=True ) -def getUserSettings(context): - """Return a dict with the authenticated user settings.""" - registry = getUtility(IRegistry) - default_settings = registry.forInterface(IPersonalPreferences) +def getDefaultSettings(): settings = {} - for s in IPersonalPreferences.names(): - try: - settings[s] = default_settings.__getattr__(s) - except AttributeError: - settings[s] = None - mtool = getToolByName(context, 'portal_membership') - user = mtool.getAuthenticatedMember() - if user is None: - return settings - #@TODO Think about a good way to get user settings (From Member content ?) + for name, description in IPersonalPreferences.namesAndDescriptions(): + settings[name] = description.default + utilities = component.getUtilitiesFor(ISettings) + for name, utility in utilities: + interface = utility.getInterface() + for name, description in interface.namesAndDescriptions(): + settings[name] = description.default return settings