From cfa0220da79bdf565ef162107a4e5bc4fb22e025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89lie=20Bouttier?= Date: Sat, 23 Jul 2016 17:20:57 +0200 Subject: [PATCH] avatar --- .gitignore | 1 + accounts/templates/accounts/edit_profile.html | 13 ++- accounts/templates/accounts/profile.html | 23 ++++- accounts/templates/avatar/add.html | 14 +++ accounts/templates/avatar/avatar_tag.html | 1 + accounts/templates/avatar/base.html | 20 +++++ accounts/templates/avatar/change.html | 21 +++++ accounts/templates/avatar/confirm_delete.html | 17 ++++ accounts/urls.py | 1 + accounts/views.py | 1 + locale/fr/LC_MESSAGES/django.mo | Bin 4212 -> 4374 bytes locale/fr/LC_MESSAGES/django.po | 80 ++++++++++++++---- ponyconf/settings.py | 5 +- ponyconf/templates/_form.html | 1 + ponyconf/urls.py | 4 +- .../templates/proposals/user_details.html | 4 +- 16 files changed, 180 insertions(+), 26 deletions(-) create mode 100644 accounts/templates/avatar/add.html create mode 100644 accounts/templates/avatar/avatar_tag.html create mode 100644 accounts/templates/avatar/base.html create mode 100644 accounts/templates/avatar/change.html create mode 100644 accounts/templates/avatar/confirm_delete.html diff --git a/.gitignore b/.gitignore index 500f282..2140f05 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ *.pyc *.swp *.sqlite3 +/media/avatars/ ponyconf/*_settings.py diff --git a/accounts/templates/accounts/edit_profile.html b/accounts/templates/accounts/edit_profile.html index 99d4a23..40cd88f 100644 --- a/accounts/templates/accounts/edit_profile.html +++ b/accounts/templates/accounts/edit_profile.html @@ -1,11 +1,18 @@ {% extends 'base.html' %} +{% load i18n %} + {% block speakertab %} class="active"{% endblock %} {% block content %} -

{{ profile }}

- -{% include "_form.html" %} +
+
+

{% blocktrans %}{{ profile }}'s profile{% endblocktrans %}

+
+
+ {% include "_form.html" %} +
+
{% endblock %} diff --git a/accounts/templates/accounts/profile.html b/accounts/templates/accounts/profile.html index 6c070f9..4515fba 100644 --- a/accounts/templates/accounts/profile.html +++ b/accounts/templates/accounts/profile.html @@ -1,6 +1,6 @@ {% extends 'base.html' %} -{% load bootstrap3 i18n %} +{% load bootstrap3 i18n avatar_tags %} {% block profiletab %} class="active"{% endblock %} @@ -12,14 +12,29 @@

{% trans "Profile" %}

- {% include "_form.html" %} +
+ {% csrf_token %} +
+ + {% avatar request.user %} + {% trans "Change avatar" %} +
+ {% for form in forms %} + {% bootstrap_form form layout="horizontal" %} + {% endfor %} + {% buttons layout="horizontal" %} + + {% for url, class, text in buttons %} + {{ text }} + {% endfor %} + {% trans "Cancel" %} + {% endbuttons %} +
{% endblock %} -Change password - {% block css %} {{ block.super }} {{ form.media.css }} diff --git a/accounts/templates/avatar/add.html b/accounts/templates/avatar/add.html new file mode 100644 index 0000000..ad0bcd3 --- /dev/null +++ b/accounts/templates/avatar/add.html @@ -0,0 +1,14 @@ +{% extends "avatar/base.html" %} +{% load i18n avatar_tags %} + +{% block avatarcontent %} +

{% trans "Your current avatar: " %}

+ {% avatar user %} + {% if not avatars %} +

{% trans "You haven't uploaded an avatar yet. Please upload one now." %}

+ {% endif %} +
+ {{ upload_avatar_form.as_p }} +

{% csrf_token %}

+
+{% endblock %} diff --git a/accounts/templates/avatar/avatar_tag.html b/accounts/templates/avatar/avatar_tag.html new file mode 100644 index 0000000..79f3e61 --- /dev/null +++ b/accounts/templates/avatar/avatar_tag.html @@ -0,0 +1 @@ +{{ alt }} \ No newline at end of file diff --git a/accounts/templates/avatar/base.html b/accounts/templates/avatar/base.html new file mode 100644 index 0000000..efe9906 --- /dev/null +++ b/accounts/templates/avatar/base.html @@ -0,0 +1,20 @@ +{% extends 'base.html' %} + +{% load i18n %} + +{% block profiletab %} class="active"{% endblock %} + +{% block content %} + +
+
+

{% trans "Avatar" %} + {% trans "Back to profile" %} +

+
+
+ {% block avatarcontent %}{% endblock %} +
+
+ +{% endblock %} diff --git a/accounts/templates/avatar/change.html b/accounts/templates/avatar/change.html new file mode 100644 index 0000000..13755f2 --- /dev/null +++ b/accounts/templates/avatar/change.html @@ -0,0 +1,21 @@ +{% extends "avatar/base.html" %} +{% load i18n avatar_tags %} + +{% block avatarcontent %} +

{% trans "Your current avatar: " %}

+ {% avatar user %} + {% if not avatars %} +

{% trans "You haven't uploaded an avatar yet. Please upload one now." %}

+ {% else %} +
+ +

{% csrf_token %}

+
+ {% endif %} +
+ {{ upload_avatar_form.as_p }} +

{% csrf_token %}

+
+{% endblock %} diff --git a/accounts/templates/avatar/confirm_delete.html b/accounts/templates/avatar/confirm_delete.html new file mode 100644 index 0000000..8f9ad4d --- /dev/null +++ b/accounts/templates/avatar/confirm_delete.html @@ -0,0 +1,17 @@ +{% extends "avatar/base.html" %} +{% load i18n %} + +{% block avatarcontent %} +

{% trans "Please select the avatars that you would like to delete." %}

+ {% if not avatars %} + {% url 'avatar_change' as avatar_change_url %} +

{% blocktrans %}You have no avatars to delete. Please upload one now.{% endblocktrans %}

+ {% else %} +
+ +

{% csrf_token %}

+
+ {% endif %} +{% endblock %} diff --git a/accounts/urls.py b/accounts/urls.py index bfbbe28..a62c6fb 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -10,6 +10,7 @@ urlpatterns = [ url(r'^logout/$', auth_views.logout, {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout'), url(r'^admin/participants/$', views.participation_list, name='list-participant'), url(r'^admin/participant/(?P[\w.@+-]+)$', views.edit, name='edit-participant'), + url(r'^avatar/', include('avatar.urls')), url(r'', include('django.contrib.auth.urls')), url(r'', include('registration.backends.default.urls')), ] diff --git a/accounts/views.py b/accounts/views.py index 13f3537..8e53f87 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -14,6 +14,7 @@ from .utils import can_edit_profile, is_orga RESET_PASSWORD_BUTTON = ('password_reset', 'warning', _('Reset your password')) CHANGE_PASSWORD_BUTTON = ('password_change', 'warning', _('Change password')) +CHANGE_AVATAR_BUTTON = ('avatar_change', 'default', _('Change avatar')) @login_required diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index 8fcd0618759a8f11a0b1497133e40d44e863bdd8..98e4e89e8e1e5e70af1830e48ed77ff0edd86e48 100644 GIT binary patch delta 1774 zcmYk+duWYu9LMpW?YQlZ&3*O^v(0tGu$jv_bIZa>36Xm2JZ!U_Gsig-{~S?Die@Nn zk#burt>#Zj2}LRLhlG%nkX(|Icz?Fvbbg)h^ZGr%=lA^X&-vk;ot$_z(s#y?)({hk z?J35%*y-a!a)uaFi-nkn&6tiyFdI+eaJ+#0Oc$3->_I)hg<1Fr_1;U&zz;|l3GO@i=N=ZPpG<6so~a)Jj~!aoCM|@h(ol2iEtffu`_sE)K(T%tw`Pux>)Nw++?)PE4qw zMlzb=Q5=D%Q5{~f-bOX_9O=uv##Q(M=VKYmkcuAac>`*oQEVKm0d-6rYGh#?iLE#WkD-?QBI*$Jpay&sRsVtY32KJVk+GRKSb`r>@8$B6 z>N}|SOEOu14PXIxGq4sl^Zm#>rVTZ)^VTj@LpQJhZ=+`Z8a2RosQ13xdlhQsvQab6 z!|_;*g&0VXp{@y`MixaKmV>B$vFs9jFO;Sgr4WFPR_(*OC7o^A}Yih4oTLS;!gc+ZGLEF`=Y$p)`lk3hF;VD=~%8 zmaZi9ei2bl=)le+bTAhZTK@6+{+E(b8rzRqhFSq_Lm5#)B&WW8Oe&a6UZA!DZX5j3BQe0y5EJoip1ki8G7T|OupU{#fCvBn5jaIOR z(AMY^*H&nIRuDR{N|i*Z4$DAt$W#$*rCCG_q^V?z+dmHu28&8sqLEz;*LXz$h`xjtV- zRr#Xcy=lQg)xrMOosj1wb!GgGk$B9DI`Oa*tG{!t*)toxSR@_|Q|88PU+s_6^YcP) T51s38+IAGBt=_NcM|}SP1K6=m delta 1605 zcmYk+OGs2v9LMovjx(vF`6x?En_erxiZ1L&4s&x_ z%iN`s$Bjog7e`PHMo|eq+I~U3H;I{;NjAo03Q+?pv8}=+u6?)wx1sVKMCCh*>L-Fp z#xmwC6(zceDR>z*qXE>69-fj{O#+<>;*oSLz1miJ|<wKpi|sZkczefsElI z97nClzhu^*x=CgIG_oAji$%6&sF_qFeVYa>!T_pW7wY|9RQn64mAQt+cpo*fQRFb+ zIcY$DY+Wg=zY=B8dMW0iW>}9Jp&!+-)xO@3TA>cq47)K0`*0cFLJsqSlLqz{wI@EH z@_a+}_Z!t;f<-TSP=IPsff-nXTH@`f5%09GgQ)jHsGn<>eSHO$u;2DEs{MP^ihafk zOk`(k0=1}>wft0+Fo0U(R#c)rNE>q+v+$Dr{5Ga>{Q#BV8EQtuSc`A41>L;FUy0d= zdVT=aPdl0%y+kRoi6|rVxwJX;-%w9%Bvka< zSJ9vf2>LZ8gjQjuSktpyICE!e_WEWUX5DL|uGuUnRuLT^zd2#F} z*4TAEyIDgt*w_01F_lCip^c=U)9j+XpwFUj*+}S{>nEh8*RuKu?H`r(gqAo~a;a1i zeqvqhCTgSR>)N|39L;wIl6`G$o}ecZK5_g|bkLbS^wQ~eI4Ww&D~CptTH?}tp>R*+ baF?g2(-S#1e6J%Kbmzu*hdYO&?(>fSb=iBT diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 4410905..c10888d 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-23 12:13+0000\n" +"POT-Creation-Date: 2016-07-23 15:18+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: accounts/models.py:17 proposals/templates/proposals/user_details.html:10 +#: accounts/models.py:17 proposals/templates/proposals/user_details.html:12 msgid "Biography" msgstr "Biographie" @@ -42,7 +42,7 @@ msgstr "J’accepte d’être enregistré en vidéo" msgid "Video licence" msgstr "Licence vidéo" -#: accounts/models.py:60 proposals/templates/proposals/user_details.html:17 +#: accounts/models.py:60 proposals/templates/proposals/user_details.html:19 msgid "Notes" msgstr "Notes" @@ -54,6 +54,11 @@ msgstr "Bienvenue !" msgid "Goodbye!" msgstr "Au revoir !" +#: accounts/templates/accounts/edit_profile.html:11 +#, python-format +msgid "%(profile)s's profile" +msgstr "Profile de %(profile)s" + #: accounts/templates/accounts/participation_list.html:32 msgid "View conversation" msgstr "Afficher la discussion" @@ -72,6 +77,57 @@ msgstr "S’abonner à la discussion" msgid "Profile" msgstr "Profile" +#: accounts/templates/accounts/profile.html:20 accounts/views.py:17 +msgid "Change avatar" +msgstr "Changer d’avatar" + +#: accounts/templates/accounts/profile.html:26 ponyconf/templates/_form.html:12 +msgid "Submit" +msgstr "Envoyer" + +#: accounts/templates/accounts/profile.html:30 ponyconf/templates/_form.html:16 +msgid "Cancel" +msgstr "Annuler" + +#: accounts/templates/avatar/add.html:5 accounts/templates/avatar/change.html:5 +msgid "Your current avatar: " +msgstr "" + +#: accounts/templates/avatar/add.html:8 accounts/templates/avatar/change.html:8 +msgid "You haven't uploaded an avatar yet. Please upload one now." +msgstr "" + +#: accounts/templates/avatar/add.html:12 +#: accounts/templates/avatar/change.html:19 +msgid "Upload New Image" +msgstr "" + +#: accounts/templates/avatar/base.html:11 +msgid "Avatar" +msgstr "" + +#: accounts/templates/avatar/base.html:12 +msgid "Back to profile" +msgstr "Retourner au profile" + +#: accounts/templates/avatar/change.html:14 +msgid "Choose new Default" +msgstr "" + +#: accounts/templates/avatar/confirm_delete.html:5 +msgid "Please select the avatars that you would like to delete." +msgstr "" + +#: accounts/templates/avatar/confirm_delete.html:8 +msgid "" +"You have no avatars to delete. Please upload one now." +msgstr "" + +#: accounts/templates/avatar/confirm_delete.html:14 +msgid "Delete These" +msgstr "" + #: accounts/templates/registration/login.html:11 #: ponyconf/templates/base.html:76 msgid "Login" @@ -108,7 +164,7 @@ msgstr "Réinitialiser son mot de passe" #: accounts/views.py:16 msgid "Change password" -msgstr "Changer son mot de passe" +msgstr "Changer de mot de passe" #: conversations/templates/conversations/_message_form.html:4 msgid "Send a message" @@ -139,28 +195,20 @@ msgid "You can use this page to communicate with the staff." msgstr "" "Vous pouvez utiliser cette page pour communiquer avec l’équipe organisatrice." -#: ponyconf/settings.py:135 +#: ponyconf/settings.py:136 msgid "English" msgstr "Anglais" -#: ponyconf/settings.py:136 +#: ponyconf/settings.py:137 msgid "French" msgstr "Français" -#: ponyconf/templates/_form.html:11 -msgid "Submit" -msgstr "Envoyer" - -#: ponyconf/templates/_form.html:15 -msgid "Cancel" -msgstr "Annuler" - #: ponyconf/templates/base.html:45 msgid "Home" msgstr "Accueil" #: ponyconf/templates/base.html:47 -#: proposals/templates/proposals/user_details.html:13 +#: proposals/templates/proposals/user_details.html:15 msgid "Talks" msgstr "Exposés" @@ -281,7 +329,7 @@ msgstr "Aucun thèmes." msgid "Add a topic" msgstr "Ajouter un thème" -#: proposals/templates/proposals/user_details.html:19 +#: proposals/templates/proposals/user_details.html:21 msgid "Edit" msgstr "Éditer" diff --git a/ponyconf/settings.py b/ponyconf/settings.py index a0aa7d0..1436477 100644 --- a/ponyconf/settings.py +++ b/ponyconf/settings.py @@ -44,6 +44,7 @@ INSTALLED_APPS = [ 'bootstrap3', 'registration', 'django_select2', + 'avatar', # build-in apps 'django.contrib.admin', @@ -143,11 +144,13 @@ LOCALE_PATHS = [ ] +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') + # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.9/howto/static-files/ STATIC_URL = '/static/' - STATICFILES_FINDERS = [ 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', diff --git a/ponyconf/templates/_form.html b/ponyconf/templates/_form.html index a4abb9b..49f09e9 100644 --- a/ponyconf/templates/_form.html +++ b/ponyconf/templates/_form.html @@ -1,6 +1,7 @@ {% load bootstrap3 i18n %}
{% csrf_token %} + {% block beforeform %}{% endblock %} {% if form %} {% bootstrap_form form layout="horizontal" %} {% endif %} diff --git a/ponyconf/urls.py b/ponyconf/urls.py index 19d08aa..4fe823b 100644 --- a/ponyconf/urls.py +++ b/ponyconf/urls.py @@ -15,6 +15,8 @@ Including another URLconf """ from django.conf.urls import include, url from django.contrib import admin +from django.conf.urls.static import static +from django.conf import settings urlpatterns = [ url(r'^admin/', admin.site.urls), @@ -22,4 +24,4 @@ urlpatterns = [ url(r'', include('proposals.urls')), url(r'^conversations/', include('conversations.urls')), url(r'^select2/', include('django_select2.urls')), -] +] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/proposals/templates/proposals/user_details.html b/proposals/templates/proposals/user_details.html index 886eae2..ad5ff6e 100644 --- a/proposals/templates/proposals/user_details.html +++ b/proposals/templates/proposals/user_details.html @@ -1,5 +1,5 @@ {% extends 'base.html' %} -{% load accounts_tags i18n %} +{% load accounts_tags i18n avatar_tags %} {% block speakertab %} class="active"{% endblock %} @@ -7,6 +7,8 @@

{{ profile }}

+ +

{% trans "Biography" %}

{{ profile.biography }}