diff --git a/ivatar/ivataraccount/templates/assign_photo_openid.html b/ivatar/ivataraccount/templates/assign_photo_openid.html new file mode 100644 index 0000000..cce8ee2 --- /dev/null +++ b/ivatar/ivataraccount/templates/assign_photo_openid.html @@ -0,0 +1,44 @@ +{% extends 'base.html' %} +{% load i18n %} + +{% block title %}{% blocktrans with openid.openid as openid_address %}Choose a photo for {{ openid_address }}{% endblocktrans %} - ivatar{% endblock title %} + +{% block content %} + +

{% blocktrans with openid.openid as openid_address %}Choose a photo for {{ openid_address }}{% endblocktrans %}

+ +{% if not user.photo_set.count %} + +{% url 'upload_photo' as upload_url %} +

{% blocktrans %}You need to upload some photos first!{% endblocktrans %}

+ +

{% trans 'Back to your profile' %}

+ +{% else %} + +

{% trans 'Here are the pictures you have uploaded, click on the one you wish to associate with this openid address:' %}

+ + +

{% blocktrans %}upload a new one{% endblocktrans %}

+ +{% endif %} + +{% endblock content %} diff --git a/ivatar/ivataraccount/urls.py b/ivatar/ivataraccount/urls.py index 5b69ce5..78e92ea 100644 --- a/ivatar/ivataraccount/urls.py +++ b/ivatar/ivataraccount/urls.py @@ -6,7 +6,8 @@ from . views import CreateView, PasswordSetView, AddEmailView from . views import RemoveUnconfirmedEmailView, ConfirmEmailView from . views import RemoveConfirmedEmailView, AssignPhotoEmailView from . views import RemoveUnconfirmedOpenIDView, RemoveConfirmedOpenIDView -from . views import ImportPhotoView, RawImageView, DeletePhotoView, UploadPhotoView +from . views import ImportPhotoView, RawImageView, DeletePhotoView +from . views import UploadPhotoView, AssignPhotoOpenIDView from . views import AddOpenIDView, RedirectOpenIDView, ConfirmOpenIDView from django.contrib.auth.views import login, logout, password_change, password_change_done from django.urls import reverse_lazy @@ -41,7 +42,7 @@ urlpatterns = [ url('remove_unconfirmed_email/(?P\d+)', RemoveUnconfirmedEmailView.as_view(), name='remove_unconfirmed_email'), url('remove_confirmed_email/(?P\d+)', RemoveConfirmedEmailView.as_view(), name='remove_confirmed_email'), url('assign_photo_email/(?P\d+)', AssignPhotoEmailView.as_view(), name='assign_photo_email'), - url('assign_photo_openid/(?P\d+)', TemplateView.as_view(template_name='fixme.html'), name='assign_photo_openid'), + url('assign_photo_openid/(?P\d+)', AssignPhotoOpenIDView.as_view(), name='assign_photo_openid'), url('import_photo/(?P\d+)', ImportPhotoView.as_view(), name='import_photo'), url('delete_photo/(?P\d+)', DeletePhotoView.as_view(), name='delete_photo'), url('raw_image/(?P\d+)', RawImageView.as_view(), name='raw_image'), diff --git a/ivatar/ivataraccount/views.py b/ivatar/ivataraccount/views.py index 2ffc293..b1a7045 100644 --- a/ivatar/ivataraccount/views.py +++ b/ivatar/ivataraccount/views.py @@ -210,6 +210,47 @@ class AssignPhotoEmailView(SuccessMessageMixin, TemplateView): return data +@method_decorator(login_required, name='dispatch') +class AssignPhotoOpenIDView(SuccessMessageMixin, TemplateView): + ''' + View class for assigning a photo to an openid address + ''' + model = Photo + template_name = 'assign_photo_openid.html' + + def post(self, *args, **kwargs): + photo = None + if 'photo_id' not in self.request.POST: + messages.error(self.request, + _('Invalid request [photo_id] missing')) + return HttpResponseRedirect(reverse_lazy('profile')) + + try: + photo = self.model.objects.get( + id=self.request.POST['photo_id'], user=self.request.user) + except self.model.DoesNotExist: + messages.error(self.request, _('Photo does not exist')) + return HttpResponseRedirect(reverse_lazy('profile')) + + try: + openid = ConfirmedOpenId.objects.get( + user=self.request.user, id=kwargs['openid_id']) + except ConfirmedOpenId.DoesNotExist: + messages.error(self.request, _('Invalid request')) + return HttpResponseRedirect(reverse_lazy('profile')) + + openid.photo = photo + openid.save() + + messages.success(self.request, _('Successfully changed photo')) + return HttpResponseRedirect(reverse_lazy('profile')) + + def get_context_data(self, **kwargs): + data = super().get_context_data(**kwargs) + data['openid'] = ConfirmedOpenId.objects.get(pk=kwargs['openid_id']) + return data + + @method_decorator(login_required, name='dispatch') class ImportPhotoView(SuccessMessageMixin, View): '''