def AvatarAdd(request, extra_context=None, next_override=None, upload_form=UploadAvatarForm, *args, **kwargs): if extra_context is None: extra_context = {} avatar, avatars = _get_avatars(request.user) upload_avatar_form = upload_form(request.POST or None, request.FILES or None, user=request.user) if request.method == 'POST' and 'avatar' in request.FILES: if upload_avatar_form.is_valid(): avatar = Avatar(user=request.user, primary=True) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() invalidate_cache(request.user) messages.success(request, _("Successfully uploaded a new avatar.")) avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) return render(request, 'auth/avatar_change.html') context = { 'avatar': avatar, 'avatars': avatars, 'upload_avatar_form': upload_avatar_form, 'next': next_override, } context.update(extra_context) template_name = 'auth/avatar_add.html' return render(request, template_name, context)
def add(request, extra_context=None, next_override=None, upload_form=UploadAvatarForm, *args, **kwargs): if extra_context is None: extra_context = {} avatar, avatars = _get_avatars(request.user) upload_avatar_form = upload_form(request.POST or None, request.FILES or None, user=request.user) if request.method == "POST" and 'avatar' in request.FILES: if upload_avatar_form.is_valid(): avatar = Avatar( user = request.user, primary = True, ) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() messages.success(request, _("Successfully uploaded a new avatar.")) avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) return HttpResponseRedirect(next_override or _get_next(request)) return render_to_response( 'avatar/add.html', extra_context, context_instance = RequestContext( request, { 'avatar': avatar, 'avatars': avatars, 'upload_avatar_form': upload_avatar_form, 'next': next_override or _get_next(request), } ) )
def user_signed_up_(request, user, sociallogin=None, **kwargs): ''' When a social account is created successfully and this signal is received, django-allauth passes in the sociallogin param, giving access to metadata on the remote account, e.g.: sociallogin.account.provider # e.g. 'twitter' sociallogin.account.get_avatar_url() sociallogin.account.get_profile_url() sociallogin.account.extra_data['screen_name'] See the socialaccount_socialaccount table for more in the 'extra_data' field. ''' if sociallogin: # Extract first / last names from social nets and store on Profile record if sociallogin.account.provider == 'facebook': user.profile.first_name = sociallogin.account.extra_data[ 'first_name'] user.profile.last_name = sociallogin.account.extra_data[ 'last_name'] if sociallogin.account.provider == 'google': user.profile.first_name = sociallogin.account.extra_data[ 'given_name'] user.profile.last_name = sociallogin.account.extra_data[ 'family_name'] user.profile.save() mage_avatar = user.profile.download_avatar( sociallogin.account.get_avatar_url()) avatar = Avatar(user=user, primary=True, avatar=image_avatar) avatar.save()
def upload_avatar_js(request): ''' Upload avatar image ''' response = {} status = 405 if request.is_ajax() and request.method == 'POST': from avatar.models import Avatar from avatar import views as avatarviews from avatar.forms import UploadAvatarForm from avatar.signals import avatar_updated avatar, avatars = avatarviews._get_avatars(request.user) upload_avatar_form = UploadAvatarForm(None, request.FILES, user=request.user) if upload_avatar_form.is_valid(): avatar = Avatar( user=request.user, primary=True, ) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) response['avatar'] = accountutil.get_user_avatar_url(request.user) status = 200 return HttpResponse(simplejson.dumps(response), content_type='application/json; charset=utf8', status=status)
def change_avatar(request, target_obj, target_type, from_name, extra_context={}, next_override=None, current_app='plus_groups', namespace='groups', **kwargs): # XXX some of this should probably be refactored into the model layer target = target_obj.get_ref() avatars = Avatar.objects.filter(target=target).order_by('-primary') if avatars.count() > 0: avatar = avatars[0] kwargs = {'initial': {'choice': avatar.id}} else: avatar = None kwargs = {} primary_avatar_form = PrimaryAvatarForm(request.POST or None, target=target, **kwargs) if request.method == "POST": if 'avatar' in request.FILES: path = avatar_file_path(target=target, filename=request.FILES['avatar'].name) avatar = Avatar( target=target, primary=True, avatar=path, ) new_file = avatar.avatar.storage.save(path, request.FILES['avatar']) avatar.save() request.user.message_set.create( message=_("Successfully uploaded a new avatar.")) if 'choice' in request.POST and primary_avatar_form.is_valid(): avatar = Avatar.objects.get( id=primary_avatar_form.cleaned_data['choice']) avatar.primary = True avatar.save() request.user.message_set.create( message=_("Successfully updated your avatar.")) return HttpResponseRedirect(next_override or _get_next(request)) return render_to_response( 'avatar/change.html', extra_context, context_instance=RequestContext( request, { 'avatar': avatar, 'avatars': avatars, 'primary_avatar_form': primary_avatar_form, 'next': next_override or _get_next(request), 'target': target_obj, 'target_type': target_type, 'from_name': from_name, }))
def generate_default_avatar(self): from cStringIO import StringIO from django.core.files.uploadedfile import SimpleUploadedFile from PIL import Image, ImageFont, ImageDraw from avatar.models import Avatar tmpname = '%s.png' % self.get_uhash() code = self.get_color_code() mode = "RGB" W, H = settings.SIMPLEAVATAR_SIZE font = ImageFont.truetype(settings.SIMPLEAVATAR_FONT, 256) text = self.user.username[:1].upper() im = Image.new(mode, (W, H), code) draw = ImageDraw.Draw(im) text_x, text_y = font.getsize(text) x = (W - text_x) / 2.0 y = ((H - text_y) / 2.0) - (text_y / 2.0) draw.text((x, y), text, font=font, fill=(255, 255, 255, 100)) # Write new avatar to memory. tmphandle = StringIO() im.save(tmphandle, 'png') tmphandle.seek(0) suf = SimpleUploadedFile(tmpname, tmphandle.read(), content_type='image/png') av = Avatar(user=self.user, primary=True) av.avatar.save(tmpname, suf, save=False) av.save()
def add(request, extra_context=None, next_override=None, upload_form=UploadAvatarForm, *args, **kwargs): if extra_context is None: extra_context = {} avatar, avatars = _get_avatars(request.user) upload_avatar_form = upload_form(request.POST or None, request.FILES or None, user=request.user) if request.method == "POST": if upload_avatar_form.is_valid(): avatar = Avatar(user=request.user, primary=True) image_file = upload_avatar_form.cleaned_data['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() messages.success(request, _("Successfully uploaded a new avatar.")) avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) return redirect(next_override or _get_next(request)) context = { 'avatar': avatar, 'avatars': avatars, 'upload_avatar_form': upload_avatar_form, 'next': next_override or _get_next(request), } context.update(extra_context) template_name = settings.AVATAR_ADD_TEMPLATE or 'avatar/add.html' return render(request, template_name, context)
def save_facebook_picture(user, fb_id, token="", check_avatar=True): if check_avatar and Avatar.objects.filter(user=user).count(): return args = {"width": "420", "access_token": token} url = "https://graph.facebook.com/" + fb_id + "/picture?" + urllib.urlencode(args) file = urllib.urlopen(url) file_contents = file.read() file_type = imghdr.what('', file_contents) if not is_correct_image_file_type(file_type): return avatar_path = avatar_file_path(user, file_type, fb_id) full_path = os.path.join(settings.MEDIA_ROOT, avatar_path) head = os.path.split(full_path)[0] try: if not os.path.exists(head): os.makedirs(head) local_file = open(full_path, "wb") local_file.write(file_contents) local_file.close() avatar = Avatar( user=user, primary=True, avatar=avatar_path, ) avatar.save() except Exception: pass finally: file.close()
def upload_avatar(request): ''' Upload avatar image ''' response = {} status = 405 if request.is_ajax() and request.method == 'POST': avatar, avatars = avatarviews._get_avatars(request.user) upload_avatar_form = UploadAvatarForm(None, request.FILES, user=request.user) if upload_avatar_form.is_valid(): avatar = Avatar( user=request.user, primary=True, ) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) response['avatar'] = userutil.get_user_avatar_url( request.user)['url'] status = 200 return JsonResponse(response, status=status)
def update_users(): print('Updating users...') # Fake N users if User.objects.all().count() < NB_USERS: papers = Paper.objects.all() new_user = NB_USERS - User.objects.all().count() fake_names = [(names.get_first_name(), names.get_last_name()) for _ in range(new_user)] for fn in fake_names: user = User.objects.create_user(email='{0}.{1}@fake.com'.format( fn[0], fn[1]), first_name=fn[0], last_name=fn[1]) # add papers nb_papers = random.randint(5, 50) for i in range(nb_papers): ulp, _ = UserLibPaper.objects.get_or_create( userlib=user.lib, paper=papers[random.randrange(0, papers.count())]) ulp.date_created = random_date(date(2000, 1, 1), date.today()) ulp.save() # add avatar ag = AvatarGenerator() filename = ag.generate(128, user.email, 'png') f = open(filename, 'rb') avatar = Avatar(user=user, primary=True) avatar.avatar.save(filename, File(f)) # Update oauth user users = User.objects.filter(type=USER_INDIVIDUAL).exclude( email__endswith='fake.com') for user in users: update_oauth_user(user.email)
def add(request, extra_context=None, next_override=None, upload_form=UploadAvatarForm, *args, **kwargs): if extra_context is None: extra_context = {} avatar, avatars = _get_avatars(request.user) upload_avatar_form = upload_form(request.POST or None, request.FILES or None, user=request.user) if request.method == "POST" and 'avatar' in request.FILES: if upload_avatar_form.is_valid(): avatar = Avatar( user = request.user, primary = True, ) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() request.user.message_set.create( message=_("Successfully uploaded a new avatar.")) if notification: _notification_updated(request, avatar) return HttpResponseRedirect(next_override or _get_next(request)) data = { 'avatar': avatar, 'avatars': avatars, 'upload_avatar_form': upload_avatar_form, 'next': next_override or _get_next(request), 'view_user': request.user, 'page_class': 'avatar-page', } if extra_context: data.update(extra_context) return render(request, 'avatar/add.html', data)
def upload(request, user_id=None): user = get_object_or_404(User, pk=user_id) if request.method == 'POST': if 'avatar' in request.FILES: form = UploadAvatarForm(request.POST, request.FILES, user=user) if form.is_valid(): avatar = Avatar(user=user, primary=True) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() sizes = avatar_settings.AVATAR_AUTO_GENERATE_SIZES for size in sizes: avatar.create_thumbnail(size) avatar_updated.send(sender=Avatar, user=user, avatar=avatar) user.avatar_type = 'a' user.clear_avatar_urls() user.save() message = _('Avatar uploaded and set as primary') else: errors = get_error_list(form) message = u', '.join(map(lambda v: force_unicode(v), errors)) else: message = _('Please choose file to upload') request.session['askbot_avatar_status_message'] = message return redirect_to_show_list(user_id)
def create_details(strategy, details, *args, user=None, **kwargs): # link affiliation affiliation_kwargs = details.get('tmp_affiliation') if affiliation_kwargs: try: affiliation = Affiliation.objects.get(**affiliation_kwargs) user.affiliation = affiliation except Affiliation.DoesNotExist: form = UserAffiliationForm(affiliation_kwargs) if form.is_valid: affiliation = form.save() user.affiliation = affiliation # link avatar if user and not user.avatar_set.exists(): photo_url = details.get('photo') if not photo_url: photo_url = settings.AVATAR_DEFAULT_URL url_parsed = urlparse(photo_url) photo_filename = os.path.basename(url_parsed.path) local_filename, headers = urllib.request.urlretrieve(photo_url) avatar = Avatar(user=user, primary=True) with open(local_filename, 'rb') as f: avatar.avatar.save(photo_filename, File(f)) avatar.save() # link title user.title = details.get('title', '') # link position user.position = details.get('position', '') user.save() return {}
def add(request, extra_context=None, next_override=None, upload_form=UploadAvatarForm, *args, **kwargs): if extra_context is None: extra_context = {} avatar, avatars = _get_avatars(request.user) upload_avatar_form = upload_form(request.POST or None, request.FILES or None, user=request.user) if request.method == "POST" and 'avatar' in request.FILES: if upload_avatar_form.is_valid(): avatar = Avatar(user=request.user, primary=True) image_file = request.FILES['avatar'] filename_parts = os.path.splitext(image_file.name) extension = filename_parts[1] filename = '%s%s' % (uuid.uuid4(), extension) avatar.avatar.save(filename, image_file) avatar.save() messages.success(request, _("Successfully uploaded a new avatar.")) avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) return redirect(next_override or _get_next(request)) context = { 'avatar': avatar, 'avatars': avatars, 'upload_avatar_form': upload_avatar_form, 'next': next_override or _get_next(request), } context.update(extra_context) return render(request, 'avatar/add.html', context)
def avatar_crop(request, id=None): """ Avatar management, creates a new avatar and makes it default """ if id: avatar = get_object_or_404(Avatar, id=id, user=request.user) else: avatar = get_object_or_404(Avatar, user=request.user, primary=True) if (avatar.avatar.width<=avatar.avatar.height): result = "width" else: result = "height" if not request.method == "POST": form = AvatarCropForm() else: try: orig = avatar.avatar.storage.open(avatar.avatar.name, 'rb').read() image = Image.open(StringIO(orig)) except IOError: return form = AvatarCropForm(image, request.POST) if form.is_valid(): top = int(form.cleaned_data.get('top')) left = int(form.cleaned_data.get('left')) right = int(form.cleaned_data.get('right')) bottom = int(form.cleaned_data.get('bottom')) box = [ left, top, right, bottom ] (w, h) = image.size if result=="width": box = map(lambda x: x*h/AVATAR_CROP_MAX_SIZE, box) else: box = map(lambda x: x*w/AVATAR_CROP_MAX_SIZE, box) image = image.crop(box) if image.mode != 'RGB': image = image.convert('RGB') thumb = StringIO() image.save(thumb, AVATAR_THUMB_FORMAT, quality=AVATAR_THUMB_QUALITY) thumb_file = ContentFile(thumb.getvalue()) base_name, ext = os.path.splitext(avatar.avatar.name) thumb = avatar.avatar.storage.save("%s_cropped%s" % (base_name, ext), thumb_file) Avatar.objects.filter(id=avatar.id).update(primary=False) new_avatar = Avatar(user=request.user, primary=True, avatar=thumb) new_avatar.save() request.user.message_set.create( message=ugettext("Your new avatar has been saved successfully.")) return HttpResponseRedirect(reverse("avatar_change")) return render_to_response("avatar_crop/crop.html", { 'AVATAR_CROP_MAX_SIZE': AVATAR_CROP_MAX_SIZE, 'dim': result, 'avatar': avatar, 'form': form }, context_instance=RequestContext(request))
def change(request, extra_context={}, next_override=None): avatars = Avatar.objects.filter(user=request.user).order_by('-primary') if avatars.count() > 0: avatar = avatars[0] kwargs = {'initial': {'choice': avatar.id}} else: avatar = None kwargs = {} primary_avatar_form = PrimaryAvatarForm(request.POST or None, user=request.user, **kwargs) if request.method == "POST": updated = False if 'avatar' in request.FILES: path = avatar_file_path(user=request.user, filename=request.FILES['avatar'].name) avatar = Avatar( user=request.user, primary=True, avatar=path, ) new_file = avatar.avatar.storage.save(path, request.FILES['avatar']) avatar.save() updated = True request.user.message_set.create( message=_("Successfully uploaded a new avatar.")) if 'choice' in request.POST and primary_avatar_form.is_valid(): avatar = Avatar.objects.get( id=primary_avatar_form.cleaned_data['choice']) avatar.primary = True avatar.save() updated = True request.user.message_set.create( message=_("Successfully updated your avatar.")) if updated and notification: notification.send([request.user], "avatar_updated", { "user": request.user, "avatar": avatar }) if friends: notification.send( (x['friend'] for x in Friendship.objects.friends_for_user(request.user) ), "avatar_friend_updated", { "user": request.user, "avatar": avatar }) return HttpResponseRedirect(next_override or _get_next(request)) return render_to_response( 'avatar/change.html', extra_context, context_instance=RequestContext( request, { 'avatar': avatar, 'avatars': avatars, 'primary_avatar_form': primary_avatar_form, 'next': next_override or _get_next(request), }))
def handle(self, *args, **options): user_num = args[0] if len(args) > 0 else 1 response = urllib2.urlopen( "http://api.randomuser.me/?results=%s" % user_num) data = json.load(response) for u in data['results']: # Create user newUser = User() newUser.first_name = u['user']['name']['first'] newUser.last_name = u['user']['name']['last'] newUser.username = u['user']['username'] newUser.email = '%[email protected] ' % u['user']['username'] newUser.set_password(u['user']['username']) newUser.save() # Validate email address EmailAddress.objects.create(user=newUser, email=newUser.email, primary=True, verified=True) # Add avatar to user image_url = u['user']['picture']['large'] import requests import tempfile from django.core import files # Steam the image from the url request = requests.get(image_url, stream=True) # Create a temporary file lf = tempfile.NamedTemporaryFile( suffix='.' + request.url.split('/')[-1].split('.')[-1], prefix=newUser.username) # import ipdb # ipdb.set_trace() # Read the streamed image in sections for block in request.iter_content(1024 * 8): # If no more file then stop if not block: break # Write image block to temporary file lf.write(block) newAvatar = Avatar() newAvatar.avatar = files.File(lf) newAvatar.primary = True newAvatar.user = newUser newAvatar.save() self.stdout.write('New user created: %s.' % newUser) self.stdout.write('Successfully created %s new users.' % user_num)
def save(self, *args, **kwargs): request = self.context.get('request') user = request.user if 'avatar' in request.FILES: avatar = Avatar(user=user, primary=True) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() avatar_updated.send(sender=Avatar, user=user, avatar=avatar) return user
def post(self, *args, **kwargs): avatar, avatars = _get_avatars(self.request.user) if 'add' in self.request.POST and 'avatar' in self.request.FILES: upload_avatar_form = UploadAvatarForm(self.request.POST, self.request.FILES, user=self.request.user) if upload_avatar_form.is_valid(): avatar = Avatar(user=self.request.user, primary=True) image_file = self.request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() messages.success(self.request, 'Successfully uploaded a new avatar.') avatar_updated.send(sender=Avatar, user=self.request.user, avatar=avatar) return HttpResponseRedirect(reverse('avatar_change')) elif 'change' in self.request.POST: primary_avatar_form = PrimaryAvatarForm(self.request.POST, user=self.request.user, avatars=avatars) if 'choice' in self.request.POST and primary_avatar_form.is_valid( ): avatar = Avatar.objects.get( id=primary_avatar_form.cleaned_data['choice']) avatar.primary = True avatar.save() avatar_updated.send(sender=Avatar, user=self.request.user, avatar=avatar) messages.success(self.request, 'Successfully updated your avatar.') return HttpResponseRedirect(reverse('avatar_change')) elif 'delete' in self.request.POST: delete_avatar_form = PrimaryAvatarForm(self.request.POST, user=self.request.user, avatars=avatars) if delete_avatar_form.is_valid(): ids = delete_avatar_form.cleaned_data['choice'] if six.text_type( avatar.id) in ids and avatars.count() > len(ids): for a in avatars: if six.text_type(a.id) not in ids: a.primary = True a.save() avatar_updated.send(sender=Avatar, user=self.request.user, avatar=avatar) break Avatar.objects.filter(id__in=ids).delete() messages.success(self.request, 'Selected avatar successfully deleted.') return HttpResponseRedirect(reverse('avatar_change')) return HttpResponseRedirect(reverse('avatar_change'))
def change(request, extra_context=None, next_override=None, upload_form=UploadAvatarForm, primary_form=PrimaryAvatarForm, *args, **kwargs): if extra_context is None: extra_context = {} avatar, avatars = _get_avatars(request.user) result = "width" kwargs = {} if avatar: try: if avatar.avatar.width <= avatar.avatar.height: result = "height" else: result = "width" kwargs = {'initial': {'choice': avatar.id}} except IOError: avatar.delete() avatar = None upload_avatar_form = upload_form(request.POST or None, request.FILES or None, user=request.user) if request.method == "POST" and 'avatar' in request.FILES: if upload_avatar_form.is_valid(): avatar = Avatar( user = request.user, primary = True, ) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name.encode('utf8'), image_file) avatar.save() if avatar.avatar.width <= avatar.avatar.height: result = "height" else: result = "width" messages.success(request, _("Successfully uploaded a new avatar.")) avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) return HttpResponse(json.dumps({'avatar_url': avatar.avatar.url, 'dim':result }), mimetype='text/html', content_type="text/plain") return render_to_response( 'avatar/change.html', extra_context, context_instance = RequestContext( request, { 'avatar': avatar, 'avatars': avatars, 'dim': result, 'AVATAR_CROP_MAX_SIZE': AVATAR_CROP_MAX_SIZE, #'upload_avatar_form': upload_avatar_form, 'crop_form':AvatarCropForm, 'next': next_override or _get_next(request), } ) )
def webcam_upload(request, id): # TODO: add proper security by attaching session to flash request user = get_object_or_404(User, pk=id) if request.method == "POST": avatar = Avatar(user=user, primary=True) avatar.avatar.save("%s_webcam_%s.jpg" % (user.pk, Avatar.objects.filter(user=user).count()), ContentFile(request.raw_post_data)) avatar.save() messages.success(request, _("Successfully uploaded a new avatar.")) return HttpResponse(status=200, content="ok")
def copy_avatar(request, user, account): url = account.get_avatar_url() if url: ava = Avatar(user=user) ava.primary = Avatar.objects.filter(user=user).count() == 0 try: content = urllib2.urlopen(url).read() name = name_from_url(url) ava.avatar.save(name, ContentFile(content)) except IOError: # Let's nog make a big deal out of this... pass
def test_ambassadors_list(db, client): test_country_name = "Austria" test_country_code = "AT" test_username = '******' test_email = '*****@*****.**' test_first_name = 'Testko' test_last_name = 'Test' test_full_name = test_first_name + " " + test_last_name test_ambassador = User.objects.create(username=test_username, email=test_email, first_name=test_first_name, last_name=test_last_name) test_ambassador_profile = UserProfile.objects.create( user=test_ambassador, country=test_country_code) group = Group.objects.get(name="ambassadors") group.user_set.add(test_ambassador) with open(local(__file__).dirname + '/../../static/img/team/alja.jpg') as fp: io = StringIO.StringIO() io.write(fp.read()) uploaded_picture = InMemoryUploadedFile( io, None, "alja17.jpg", "jpeg", io.len, None) uploaded_picture.seek(0) avatar = Avatar(user=test_ambassador, primary=True) avatar.avatar.save(uploaded_picture.name, uploaded_picture) avatar.save() new_avatar = get_primary_avatar(test_ambassador, size=80) test_amb_avatar = new_avatar.avatar_url(80) response = client.get(reverse('web.ambassadors')) # We're expecting to the Ambassador under the right country, # with the right avatar and the right email contact expected_result = ''' <h2 class="clearfix">%s</h2> <div class="ambassador clearfix"> <img src="%s" alt="%s" width="80" height="80" class="img-circle" /> <h4>%s <span> <a alt="Send me an email" href="mailto:%s"><i class="fa fa-envelope"></i></a> ''' % (test_country_name, test_amb_avatar, test_username, test_full_name, test_email) expected_result = expected_result.replace('\t', '').replace('\n', '') ambassadors_content = response.content.replace('\t', '').replace('\n', '') # Check this test and modify it to integrating the Ambassadors page changes # assert expected_result in ambassadors_content test_ambassador.delete() avatar.delete()
def make(request, img_url=None, extra_context={}, next_override=None, upload_form=UploadAvatarForm, make_primary=True): upload_avatar_form = upload_form({'url': img_url}, request.FILES or None, user=request.user) if img_url and upload_avatar_form.is_valid(): img = urlopen(img_url) img_name = img_url.split('/')[-1] img_name = img_name.split('?')[0] keepcharacters = ('.', '_') file_name = "".join(c for c in img_name if c.isalnum() or c in keepcharacters).rstrip() temp_img = NamedTemporaryFile() temp_img.write(img.read()) temp_img.flush() image = Image.open(temp_img.name) if image.mode != "RGB": image = image.convert("RGB") size = image.size prop = 200.0 / float(image.size[0]) size = (int(prop * float(image.size[0])), int(prop * float(image.size[1]))) image.thumbnail(size, Image.ANTIALIAS) image.save(temp_img.name, 'JPEG') avatar = Avatar(user=request.user, primary=make_primary) avatar.avatar.save(''.join([file_name, '.jpg']), File(temp_img)) avatar.save() if request.is_ajax(): return HttpResponse('ok') if make_primary: messages.success(request, _(AVATAR_UPDATED_MSG)) else: messages.success(request, _(AVATAR_UPLOADED_MSG)) return HttpResponseRedirect(next_override or _get_next(request)) else: if request.is_ajax(): return HttpResponse(upload_avatar_form.non_field_errors()) if request.method == "GET": for error in upload_avatar_form.non_field_errors(): messages.error(request, _(error)) next = request.META.get('HTTP_REFERER', None) #return change(request, img_url, next_override=next_override) #if 'next' in request.REQUEST: return HttpResponseRedirect(next_override or '%s?url=%s&next=%s' % (reverse('avatar_change'), img_url, next))
def _copy_avatar(request, user, account): import urllib2 from django.core.files.base import ContentFile from avatar.models import Avatar url = account.get_avatar_url() if url: ava = Avatar(user=user) ava.primary = Avatar.objects.filter(user=user).count() == 0 try: content = urllib2.urlopen(url).read() name = _name_from_url(url) ava.avatar.save(name, ContentFile(content)) except IOError: # Let's nog make a big deal out of this... pass
def change_avatar(request): '''Customised version of the default add avatar view from the django-avatar app. Changed to allow the form to be embedded on the main DWAD profile page.''' upload_avatar_form = UploadAvatarForm(request.POST or None, request.FILES or None, user=request.user) if 'avatar' in request.FILES and upload_avatar_form.is_valid(): avatar = Avatar(user=request.user, primary=True) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) return redirect(reverse('profile')) context = {'upload_avatar_form': upload_avatar_form} return profile(request, extra_context=context)
def update(self, instance, validated_data): request = self.context.get('request') profile = validated_data.get('profile', None) instance.username = validated_data.get('username', instance.username) instance.first_name = validated_data.get('first_name', instance.first_name) if profile: bio = profile.get("bio") location = profile.get("location") birth_date = profile.get("birth_date") first_name = profile.get("first_name") last_name = profile.get("last_name") if bio and bio != instance.profile.bio: instance.profile.bio = bio if location and location != instance.profile.location: instance.profile.location = location if birth_date and birth_date != instance.profile.birth_date: instance.profile.birth_date = birth_date if first_name and first_name != instance.profile.first_name: instance.profile.first_name = first_name if last_name and last_name != instance.profile.last_name: instance.profile.last_name = last_name email = validated_data.get('email', None) if email and email != instance.email: adapter = get_adapter() adapter.send_mail('account/email/email_change', instance.email, {}) email_address = EmailAddress.objects.get(user=instance, verified=True) email_address.change(request, email, True) instance.email = email if 'avatar' in request.FILES: avatar = Avatar(user=instance, primary=True) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() avatar_updated.send(sender=Avatar, user=instance, avatar=avatar) instance.save() # sync_sso(instance) return instance
def after_signup(self, user, **kwargs): super(SignupFormFirstLastName, self).after_signup(user, **kwargs) # first name / last name user.first_name = self.cleaned_data['first_name'] user.last_name = self.cleaned_data['last_name'] user.save() # FIXME add user device user group device_user_group = Group.objects.get(id=5) user.groups.add(device_user_group) # avatar avatar_file = self.files.get('avatar') if avatar_file: is_primary_avatar = not Avatar.objects.filter(user=user).exists() Avatar(user=user, avatar=avatar_file, primary=is_primary_avatar).save()
def add(request, extra_context=None, next_override=None, upload_form=UploadAvatarForm, *args, **kwargs): if extra_context is None: extra_context = {} avatar, avatars = _get_avatars(request.user) upload_avatar_form = upload_form(request.POST or None, request.FILES or None, user=request.user) if request.method == "POST" and 'avatar' in request.FILES: if upload_avatar_form.is_valid(): avatar = Avatar(user=request.user, primary=True) image_file = request.FILES['avatar'] avatar.avatar.save(image_file.name, image_file) avatar.save() messages.success(request, _("Successfully uploaded a new avatar.")) avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) files_dict = { "files": [{ "name": image_file.name, "size": len(image_file), "url": avatar.avatar.url, "thumbnailUrl": avatar.avatar.url, "deleteUrl": "", "deleteType": "DELETE" }] } return HttpResponse(json.dumps(files_dict), content_type='application/json') context = { 'avatar': avatar, 'avatars': avatars, 'upload_avatar_form': upload_avatar_form, 'next': next_override or _get_next(request), } context.update(extra_context) return render(request, 'avatar/add.html', context)
def update(self, instance, validated_data): profile_validated_data = validated_data.pop('profile', {}) avatar_image = validated_data.get('avatar', None) instance = super(UserSerializer, self).update(instance, validated_data) try: profile = instance.profile except: profile = Profile.objects.create(user=instance) profile_serializer = ProfileSerializer(instance=profile, data=profile_validated_data) if profile_serializer.is_valid(raise_exception=False): profile_serializer.save() if avatar_image: avatar = Avatar(user=instance, primary=True) avatar.avatar.save(avatar_image.name, avatar_image) avatar.save() return instance