예제 #1
0
def avatar(user, size=settings.AVATAR_DEFAULT_SIZE, **kwargs):
    if not isinstance(user, get_user_model()):
        try:
            user = get_user(user)
            alt = six.text_type(user)
            url = avatar_url(user, size)
        except get_user_model().DoesNotExist:
            url = get_default_avatar_url()
            alt = _("Default Avatar")
    else:
        alt = six.text_type(user)
        url = avatar_url(user, size)

    try:
        alt = user.first_name[:1] + user.last_name[:1]
    except AttributeError:
        alt = ""

    context = {
        'user': user,
        'alt': alt,
        'size': size,
        'kwargs': kwargs,
    }
    template_name = 'avatar/avatar_tag.html'
    ext_context = None
    try:
        template_name, ext_context = url
    except ValueError:
        context['url'] = url
    if ext_context:
        context = dict(context, **ext_context)

    return render_to_string(template_name, context)
예제 #2
0
def get_user_avatar_url(user):
    avatar = get_primary_avatar(user, 80)
    if avatar:
        url = avatar.avatar_url(80)
        return {
            'url': url,
            'uploaded': True,
            'html': (
                '<img class="fw-avatar" src="' +
                url +
                '" alt="' + user.username + '">'
            )
        }
    else:
        cl = string_to_color(user.username)
        return {
            'url': get_default_avatar_url(),
            'uploaded': False,
            'html': (
                '<span class="fw-string-avatar" style="background-color: ' +
                cl +
                ';"><span>' +
                user.username[0] +
                '</span></span>'
            )
        }
예제 #3
0
def autocomplete_usernames(request):
    if 'q' not in request.GET:
        HttpResponse(simplejson.dumps([]))

    q = request.GET['q']

    # Replace non-breaking space with regular space
    q = q.replace(unichr(160), ' ')

    users = UserProfile.objects.filter(
        Q(user__username__icontains=q) |
        Q(real_name__icontains=q)
    ).distinct()[:10]

    results = []

    for user in users:
        avatar = get_primary_avatar(user, 40)
        if avatar is None:
            avatar_url = get_default_avatar_url()
        else:
            avatar_url = avatar.get_absolute_url()

        results.append({
            'id': str(user.id),
            'username': user.user.username,
            'realName': user.user.userprofile.real_name,
            'displayName': user.user.userprofile.real_name if user.user.userprofile.real_name else user.user.username,
            'avatar': avatar_url,
        })

    return HttpResponse(simplejson.dumps(results))
예제 #4
0
def get_user_avatar_url(user):
    the_avatar = get_primary_avatar(user, 80)
    if the_avatar:
        the_avatar = the_avatar.avatar_url(80)
    else:
        the_avatar = get_default_avatar_url()
    return the_avatar
예제 #5
0
def get_user_avatar_url(user):
    avatar = get_primary_avatar(user, 80)
    if avatar:
        return {
            'url': avatar.avatar_url(80),
            'uploaded': True
        }
    else:
        return {
            'url': get_default_avatar_url(),
            'uploaded': False
        }
예제 #6
0
def render_primary(request, user=None, size=settings.AVATAR_DEFAULT_SIZE):
    size = int(size)
    avatar = get_primary_avatar(user, size=size)
    if avatar:
        # FIXME: later, add an option to render the resized avatar dynamically
        # instead of redirecting to an already created static file. This could
        # be useful in certain situations, particulary if there is a CDN and
        # we want to minimize the storage usage on our static server, letting
        # the CDN store those files instead
        url = avatar.avatar_url(size)
    else:
        url = get_default_avatar_url()

    return redirect(url)
예제 #7
0
파일: views.py 프로젝트: phodal/xunta
def render_primary(request, user=None, size=settings.AVATAR_DEFAULT_SIZE):
    size = int(size)
    avatar = get_primary_avatar(user, size=size)
    if avatar:
        # FIXME: later, add an option to render the resized avatar dynamically
        # instead of redirecting to an already created static file. This could
        # be useful in certain situations, particulary if there is a CDN and
        # we want to minimize the storage usage on our static server, letting
        # the CDN store those files instead
        url = avatar.avatar_url(size)
    else:
        url = get_default_avatar_url()

    return redirect(url)
예제 #8
0
def get_accessrights(ars):
    ret = []
    for ar in ars:
        the_avatar = get_primary_avatar(ar.user, 80)
        if the_avatar:
            the_avatar = the_avatar.avatar_url(80)
        else:
            the_avatar = get_default_avatar_url()
        ret.append({
            'book_id': ar.book.id,
            'user_id': ar.user.id,
            'user_name': ar.user.readable_name,
            'rights': ar.rights,
            'avatar': the_avatar
        })
    return ret
예제 #9
0
def avatar(user, size=settings.AVATAR_DEFAULT_SIZE, **kwargs):
    if not isinstance(user, get_user_model()):
        try:
            user = get_user(user)
            alt = six.text_type(user)
            url = avatar_url(user, size)
        except get_user_model().DoesNotExist:
            url = get_default_avatar_url()
            alt = _("Default Avatar")
    else:
        alt = six.text_type(user)
        url = avatar_url(user, size)
    context = dict(kwargs, **{
        'user': user,
        'url': url,
        'alt': alt,
        'size': size,
    })
    return render_to_string('avatar/avatar_tag.html', context)
예제 #10
0
def avatar(user, size=settings.AVATAR_DEFAULT_SIZE, **kwargs):
    if not isinstance(user, get_user_model()):
        try:
            user = get_user(user)
            alt = six.text_type(user)
            url = avatar_url(user, size)
        except get_user_model().DoesNotExist:
            url = get_default_avatar_url()
            alt = _("Default Avatar")
    else:
        alt = six.text_type(user)
        url = avatar_url(user, size)
    context = dict(kwargs, **{
        'user': user,
        'url': url,
        'alt': alt,
        'size': size,
    })
    return render_to_string('avatar/avatar_tag.html', context)
예제 #11
0
def auto_avatar(username):
    hash = 0
    for ch in username:
        hash = ord(ch) + ((hash << 5) - hash)

    r = str((hash >> (0 * 8)) & 255)
    g = str((hash >> (1 * 8)) & 255)
    b = str((hash >> (2 * 8)) & 255)

    cl = f"rgb({r},{g},{b})"
    return {
        "url":
        get_default_avatar_url(),
        "uploaded":
        False,
        "html":
        (f'<span class="fw-string-avatar" style="background-color: {cl};">'
         f"<span>{username[0]}</span>"
         "</span>"),
    }
예제 #12
0
def avatar_url(user, size=settings.AVATAR_DEFAULT_SIZE):
    avatar = get_primary_avatar(user, size=size)
    if avatar:
        return avatar.avatar_url(size)

    if settings.AVATAR_GRAVATAR_BACKUP:
        params = {'s': str(size)}
        if settings.AVATAR_GRAVATAR_DEFAULT:
            params['d'] = settings.AVATAR_GRAVATAR_DEFAULT
        if settings.AVATAR_GRAVATAR_FORCEDEFAULT:
            params['f'] = 'y'
        path = "%s/?%s" % (hashlib.md5(force_bytes(getattr(user,
            settings.AVATAR_GRAVATAR_FIELD))).hexdigest(), urlencode(params))
        return urljoin(settings.AVATAR_GRAVATAR_BASE_URL, path)

    if settings.AVATAR_FACEBOOK_BACKUP:
        fb_id = get_facebook_id(user)
        if fb_id:
            return 'https://graph.facebook.com/{fb_id}/picture?type=square&width={size}&height={size}'.format(
                fb_id=fb_id, size=size
            )

    return get_default_avatar_url()
예제 #13
0
def get_user_avatar_url(user):
    size = 80
    # We use our own method to find the avatar to instead of
    # "get_primary_avatar" as this way we can minimize the reading from disk
    # and set a default thumbnail in case we could not create on.
    # See https://github.com/grantmcconnaughey/django-avatar/pull/187
    avatar = user.avatar_set.order_by("-primary", "-date_uploaded").first()
    if avatar:
        if not avatar.thumbnail_exists(size):
            avatar.create_thumbnail(size)
            # Now check if the thumbnail was actually created
            if not avatar.thumbnail_exists(size):
                # Thumbnail was not saved. There must be some PIL bug
                # with this image type. We store the original file instead.
                avatar.avatar.storage.save(
                    avatar.avatar_name(size),
                    File(avatar.avatar.storage.open(avatar.avatar.name, 'rb')))
        url = avatar.avatar_url(size)
        return {
            'url':
            url,
            'uploaded':
            True,
            'html': ('<img class="fw-avatar" src="' + url + '" alt="' +
                     user.username + '">')
        }
    else:
        cl = string_to_color(user.username)
        return {
            'url':
            get_default_avatar_url(),
            'uploaded':
            False,
            'html':
            ('<span class="fw-string-avatar" style="background-color: ' + cl +
             ';"><span>' + user.username[0] + '</span></span>')
        }
예제 #14
0
    def to_representation(self, obj):
        avatar = get_primary_avatar(obj, 40)
        if avatar is None:
            return get_default_avatar_url()

        return avatar.get_absolute_url()
예제 #15
0
 def get_user_avatar(self, obj):
     user = obj.user
     if isinstance(user, User):
         return avatar_tags.avatar_url(user=obj.user, size=80)
     return get_default_avatar_url()
예제 #16
0
    def to_representation(self, obj):
        avatar = get_primary_avatar(obj, 40)
        if avatar is None:
            return get_default_avatar_url()

        return avatar.get_absolute_url()
예제 #17
0
def get_user_avatar_url(user):
    avatar = get_primary_avatar(user, 80)
    if avatar:
        return {'url': avatar.avatar_url(80), 'uploaded': True}
    else:
        return {'url': get_default_avatar_url(), 'uploaded': False}
예제 #18
0
def autocomplete_usernames(request):
    if 'q' not in request.GET:
        return HttpResponse(simplejson.dumps([]))

    if request.user.is_anonymous:
        if 'token' not in request.GET:
            return HttpResponse(simplejson.dumps([]))

        try:
            Token.objects.get(key=request.GET.get('token'))
        except Token.DoesNotExist:
            return HttpResponse(simplejson.dumps([]))

    q = request.GET['q']
    referer_header = request.META.get('HTTP_REFERER', '')
    from_forums = '/forum' in referer_header
    from_comments = re.match(r'%s\/?([a-zA-Z0-9]{6})\/.*' % settings.BASE_URL, referer_header)
    users = []
    results = []
    limit = 10

    # Replace non-breaking space with regular space
    q = q.replace(chr(160), ' ')

    if from_forums:
        referer = request.META.get('HTTP_REFERER')

        if '?' in referer:
            slug = os.path.basename(os.path.normpath(referer.rsplit('/', 1)[0]))
        else:
            slug = os.path.basename(os.path.normpath(referer))

        users = list(UserProfile.objects.filter(
            Q(user__posts__topic__slug=slug) & (Q(user__username__icontains=q) | Q(real_name__icontains=q))
        ).distinct()[:limit])
    elif from_comments:
        image_id = from_comments.group(1)
        image = ImageService.get_object(image_id, Image.objects_including_wip.all())
        users = list(UserProfile.objects.filter(
            Q(
                Q(user__image=image) |
                Q(
                    Q(user__comments__object_id=image.id) & Q(user__comments__deleted=False)
                )
            ) &
            Q(
                Q(user__username__icontains=q) | Q(real_name__icontains=q)
            )
        ).distinct()[:limit])

    users = UtilsService.unique(users + list(UserProfile.objects.filter(
        Q(user__username__icontains=q) | Q(real_name__icontains=q)
    ).distinct()[:limit]))[:limit]

    for user in users:
        avatar = get_primary_avatar(user, 40)
        if avatar is None:
            avatar_url = get_default_avatar_url()
        else:
            avatar_url = avatar.get_absolute_url()

        results.append({
            'id': str(user.id),
            'username': user.user.username,
            'realName': user.user.userprofile.real_name,
            'displayName': user.user.userprofile.real_name if user.user.userprofile.real_name else user.user.username,
            'avatar': avatar_url,
        })

    return HttpResponse(simplejson.dumps(results))
예제 #19
0
 def get_avatar_url(self, user, size):
     return get_default_avatar_url()
예제 #20
0
 def get_avatar_url(self, user, size):
     return get_default_avatar_url()