Fix project members photo

remotes/origin/issue/4795/notification_even_they_are_disabled
Jesús Espino 2016-07-07 11:05:39 +02:00
parent df2f504125
commit 8896d65136
7 changed files with 52 additions and 22 deletions

View File

@ -1235,3 +1235,15 @@ class LightSerializer(serpy.Serializer):
super().__init__(*args, **kwargs)
self.context = context
self.view = view
class LightDictSerializer(serpy.DictSerializer):
def __init__(self, *args, **kwargs):
kwargs.pop("read_only", None)
kwargs.pop("partial", None)
kwargs.pop("files", None)
context = kwargs.pop("context", {})
view = kwargs.pop("view", {})
super().__init__(*args, **kwargs)
self.context = context
self.view = view

View File

@ -19,7 +19,7 @@
from taiga.base.api import serializers
from taiga.base.fields import I18NJsonField, Field, MethodField
from taiga.users.services import get_photo_or_gravatar_url
from taiga.users.services import get_user_photo_or_gravatar_url
HISTORY_ENTRY_I18N_FIELDS = ("points", "status", "severity", "priority", "type")
@ -46,7 +46,7 @@ class HistoryEntrySerializer(serializers.LightSerializer):
def get_user(self, entry):
user = {"pk": None, "username": None, "name": None, "photo": None, "is_active": False}
user.update(entry.user)
user["photo"] = get_photo_or_gravatar_url(entry.owner)
user["photo"] = get_user_photo_or_gravatar_url(entry.owner)
if entry.owner:
user["is_active"] = entry.owner.is_active

View File

@ -22,7 +22,7 @@ from taiga.base.api import serializers
from taiga.base.fields import Field, MethodField, I18NField
from taiga.permissions import services as permissions_services
from taiga.users.services import get_photo_or_gravatar_url
from taiga.users.services import get_user_photo_or_gravatar_url, get_photo_or_gravatar_url
from taiga.users.serializers import UserBasicInfoSerializer
from taiga.permissions.services import calculate_permissions
@ -97,6 +97,23 @@ class IssueTypeSerializer(serializers.LightSerializer):
# Members
######################################################
class MembershipDictSerializer(serializers.LightDictSerializer):
role_name = Field()
full_name = Field()
full_name_display = MethodField()
is_active = Field()
id = Field()
color = Field()
username = Field()
photo = MethodField()
def get_full_name_display(self, obj):
return obj["full_name"] or obj["username"] or obj["email"]
def get_photo(self, obj):
return get_photo_or_gravatar_url(obj['photo'], obj['email'])
class MembershipSerializer(serializers.LightSerializer):
id = Field()
user = Field(attr="user_id")
@ -130,7 +147,7 @@ class MembershipSerializer(serializers.LightSerializer):
return obj.user.color if obj.user else None
def get_photo(self, obj):
return get_photo_or_gravatar_url(obj.user)
return get_user_photo_or_gravatar_url(obj.user)
def get_project_name(self, obj):
return obj.project.name if obj and obj.project else ""
@ -369,15 +386,7 @@ class ProjectDetailSerializer(ProjectSerializer):
if obj.members_attr is None:
return []
ret = []
for m in obj.members_attr:
m["full_name_display"] = m["full_name"] or m["username"] or m["email"]
del(m["email"])
del(m["complete_user_name"])
if not m["id"] is None:
ret.append(m)
return ret
return MembershipDictSerializer([m for m in obj.members_attr if m['id'] is not None], many=True).data
def get_total_memberships(self, obj):
if obj.members_attr is None:

View File

@ -20,7 +20,7 @@ from django.contrib.auth import get_user_model
from taiga.base.api import serializers
from taiga.base.fields import Field, MethodField
from taiga.users.services import get_photo_or_gravatar_url, get_big_photo_or_gravatar_url
from taiga.users.services import get_user_photo_or_gravatar_url, get_big_photo_or_gravatar_url
from . import models
@ -56,7 +56,7 @@ class TimelineSerializer(serializers.LightSerializer):
obj.data["user"] = {
"id": user.pk,
"name": user.get_full_name(),
"photo": get_photo_or_gravatar_url(user),
"photo": get_user_photo_or_gravatar_url(user),
"big_photo": get_big_photo_or_gravatar_url(user),
"username": user.username,
"is_profile_visible": user.is_active and not user.is_system,

View File

@ -24,7 +24,7 @@ from taiga.base.fields import PgArrayField, Field, MethodField, I18NField
from taiga.base.utils.thumbnails import get_thumbnail_url
from taiga.projects.models import Project
from .services import get_photo_or_gravatar_url, get_big_photo_or_gravatar_url
from .services import get_user_photo_or_gravatar_url, get_big_photo_or_gravatar_url
from .gravatar import get_gravatar_url
from collections import namedtuple
@ -61,7 +61,7 @@ class UserSerializer(serializers.LightSerializer):
return obj.get_full_name() if obj else ""
def get_photo(self, user):
return get_photo_or_gravatar_url(user)
return get_user_photo_or_gravatar_url(user)
def get_big_photo(self, user):
return get_big_photo_or_gravatar_url(user)
@ -115,7 +115,7 @@ class UserBasicInfoSerializer(serializers.LightSerializer):
return obj.get_full_name()
def get_photo(self, obj):
return get_photo_or_gravatar_url(obj)
return get_user_photo_or_gravatar_url(obj)
def get_big_photo(self, obj):
return get_big_photo_or_gravatar_url(obj)
@ -237,7 +237,7 @@ class HighLightedContentSerializer(serializers.LightSerializer):
UserData = namedtuple("UserData", ["photo", "email"])
user_data = UserData(photo=obj.assigned_to_photo, email=obj.assigned_to_email or "")
return get_photo_or_gravatar_url(user_data)
return get_user_photo_or_gravatar_url(user_data)
def get_tags_colors(self, obj):
tags = getattr(obj, "tags", [])

View File

@ -82,7 +82,16 @@ def get_photo_url(photo):
return None
def get_photo_or_gravatar_url(user):
def get_photo_or_gravatar_url(photo=None, email=None):
"""Get the user's photo/gravatar url."""
if photo:
return get_photo_url(photo)
if email:
return get_gravatar_url(email)
return settings.GRAVATAR_DEFAULT_AVATAR
def get_user_photo_or_gravatar_url(user):
"""Get the user's photo/gravatar url."""
if user:
return get_photo_url(user.photo) if user.photo else get_gravatar_url(user.email)

View File

@ -25,7 +25,7 @@ from taiga.front.templatetags.functions import resolve as resolve_front_url
from taiga.projects.services import get_logo_big_thumbnail_url
from taiga.users.gravatar import get_gravatar_url
from taiga.users.services import get_photo_or_gravatar_url
from taiga.users.services import get_user_photo_or_gravatar_url
########################################################################
@ -82,7 +82,7 @@ class UserSerializer(serializers.LightSerializer):
return obj.get_full_name()
def get_photo(self, obj):
return get_photo_or_gravatar_url(obj)
return get_user_photo_or_gravatar_url(obj)
def to_value(self, instance):
if instance is None: