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)
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>' ) }
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))
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
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 }
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)
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
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)
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>"), }
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()
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>') }
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()
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()
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}
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))
def get_avatar_url(self, user, size): return get_default_avatar_url()