From dd1470358dc350dbbb8b626e8cf4705f9769e3e6 Mon Sep 17 00:00:00 2001 From: Jesse Stippel Date: Thu, 31 Jan 2019 17:24:05 +0100 Subject: [PATCH 1/5] improved profile handling --- src/collective/sidebar/__init__.py | 12 +++++ src/collective/sidebar/browser/sidebar.py | 44 +++++++++++++++++-- .../sidebar/browser/templates/sidebar.pt | 4 +- src/collective/sidebar/directives.py | 32 ++++++++++++++ src/collective/sidebar/utils.py | 21 +++++++++ 5 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 src/collective/sidebar/directives.py diff --git a/src/collective/sidebar/__init__.py b/src/collective/sidebar/__init__.py index 546c892..9b79e0c 100644 --- a/src/collective/sidebar/__init__.py +++ b/src/collective/sidebar/__init__.py @@ -3,6 +3,18 @@ from collective.sidebar.patches import apply_portrait_patch from zope.i18nmessageid import MessageFactory +import zope.deferredimport + +# Patch Profile-Scale apply_portrait_patch() + +# Translation Domain _ = MessageFactory('collective.sidebar') + +# Deferred Imports +zope.deferredimport.defineFrom( + 'collective.sidebar.directives', + 'user_avatar', + 'AVATAR_KEY', +) diff --git a/src/collective/sidebar/browser/sidebar.py b/src/collective/sidebar/browser/sidebar.py index eb74606..58659f4 100644 --- a/src/collective/sidebar/browser/sidebar.py +++ b/src/collective/sidebar/browser/sidebar.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from collective.sidebar import _ +from collective.sidebar.directives import AVATAR_KEY from collective.sidebar.utils import crop from collective.sidebar.utils import get_translated from collective.sidebar.utils import get_user @@ -17,6 +18,7 @@ from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile from zope.component import getMultiAdapter from zope.component import queryMultiAdapter +from zope.dottedname.resolve import resolve import pkg_resources @@ -56,15 +58,51 @@ def get_static_links(self): return sidebar_links def get_user_data(self): + # Set Defaults user = get_user() + portal_url = self.get_portal_url() mtool = api.portal.get_tool('portal_membership') + dxtool = api.portal.get_tool('portal_types') + # Get Default Portrait portrait = mtool.getPersonalPortrait(id=user[1]) + # Set Default User-Variables user_info = mtool.getMemberInfo(user[1]) - portal_url = self.get_portal_url() + user_avatar = portrait.absolute_url() + user_url = portal_url + '/@@personal-information' + # When Custom Member-Creation is Active + if mtool.memberareaCreationFlag: + # Get Avatar-Field + user_dx = dxtool.get(mtool.memberarea_type) + custom_schema = user_dx.schema + if custom_schema: + user_dx_iface = resolve(custom_schema) + avatar_fields = user_dx_iface.queryTaggedValue(AVATAR_KEY) + if avatar_fields: + for iface, field, active in avatar_fields: + if active: + images_view = api.content.get_view( + 'images', + self.context, + self.request, + ) + scale = images_view.scale( + user_dx_iface.get(field), + width=256, + height=256, + direction='down', + ) + user_avatar = scale.url + # Set User-Profile URL + user_url = '{0}/{1}/{2}'.format( + portal_url, + mtool.membersfolder_id, + user_info.get('username', ''), + ) + # Concatenate the Data Together data = { 'user_info': user_info, - 'portrait': portrait.absolute_url(), - 'user_url': portal_url + '/@@personal-information', + 'user_avatar': user_avatar, + 'user_url': user_url, } return data diff --git a/src/collective/sidebar/browser/templates/sidebar.pt b/src/collective/sidebar/browser/templates/sidebar.pt index d65aa79..4783c08 100644 --- a/src/collective/sidebar/browser/templates/sidebar.pt +++ b/src/collective/sidebar/browser/templates/sidebar.pt @@ -20,12 +20,12 @@