This commit is contained in:
Élie Bouttier 2016-07-23 17:20:57 +02:00
parent 7d48fbf588
commit cfa0220da7
16 changed files with 180 additions and 26 deletions

1
.gitignore vendored
View File

@ -5,4 +5,5 @@
*.pyc *.pyc
*.swp *.swp
*.sqlite3 *.sqlite3
/media/avatars/
ponyconf/*_settings.py ponyconf/*_settings.py

View File

@ -1,11 +1,18 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load i18n %}
{% block speakertab %} class="active"{% endblock %} {% block speakertab %} class="active"{% endblock %}
{% block content %} {% block content %}
<h1>{{ profile }}</h1> <div class="panel panel-default">
<div class="panel-heading">
{% include "_form.html" %} <h3>{% blocktrans %}{{ profile }}'s profile{% endblocktrans %}</h3>
</div>
<div class="panel-body">
{% include "_form.html" %}
</div>
</div>
{% endblock %} {% endblock %}

View File

@ -1,6 +1,6 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load bootstrap3 i18n %} {% load bootstrap3 i18n avatar_tags %}
{% block profiletab %} class="active"{% endblock %} {% block profiletab %} class="active"{% endblock %}
@ -12,14 +12,29 @@
<h3>{% trans "Profile" %}</h3> <h3>{% trans "Profile" %}</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
{% include "_form.html" %} <form action="" method="post" class="form-horizontal">
{% csrf_token %}
<div class="form-group">
<label class="col-md-3 control-label" for="id_first_name">Avatar</label>
{% avatar request.user %}
<a href="{% url 'avatar_change' %}" class="btn btn-default">{% trans "Change avatar" %}</a>
</div>
{% for form in forms %}
{% bootstrap_form form layout="horizontal" %}
{% endfor %}
{% buttons layout="horizontal" %}
<button type="submit" class="btn btn-primary">{% trans "Submit" %}</button>
{% for url, class, text in buttons %}
<a href="{% url url %}" class="btn btn-{{ class }}">{{ text }}</a>
{% endfor %}
<a href="{% if request.META.HTTP_REFERER %}{{ request.META.HTTP_REFERER }}{% else %}{% url 'home' %}{% endif %}" class="btn btn-default">{% trans "Cancel" %}</a>
{% endbuttons %}
</form>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}
<a href="{% url 'password_change' %}" class="btn btn-warning">Change password</a>
{% block css %} {% block css %}
{{ block.super }} {{ block.super }}
{{ form.media.css }} {{ form.media.css }}

View File

@ -0,0 +1,14 @@
{% extends "avatar/base.html" %}
{% load i18n avatar_tags %}
{% block avatarcontent %}
<p>{% trans "Your current avatar: " %}</p>
{% avatar user %}
{% if not avatars %}
<p>{% trans "You haven't uploaded an avatar yet. Please upload one now." %}</p>
{% endif %}
<form enctype="multipart/form-data" method="POST" action="{% url 'avatar_add' %}">
{{ upload_avatar_form.as_p }}
<p>{% csrf_token %}<input type="submit" value="{% trans "Upload New Image" %}" /></p>
</form>
{% endblock %}

View File

@ -0,0 +1 @@
<img src="{{ url }}" alt="{{ alt }}" width="{{ size }}" height="{{ size }}" />

View File

@ -0,0 +1,20 @@
{% extends 'base.html' %}
{% load i18n %}
{% block profiletab %} class="active"{% endblock %}
{% block content %}
<div class="panel panel-default">
<div class="panel-heading">
<h3>{% trans "Avatar" %}
<a href="{% url 'profile' %}" class="btn btn-primary pull-right"><span class="glyphicon glyphicon-arrow-left"> {% trans "Back to profile" %}</a>
</h3>
</div>
<div class="panel-body">
{% block avatarcontent %}{% endblock %}
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,21 @@
{% extends "avatar/base.html" %}
{% load i18n avatar_tags %}
{% block avatarcontent %}
<p>{% trans "Your current avatar: " %}</p>
{% avatar user %}
{% if not avatars %}
<p>{% trans "You haven't uploaded an avatar yet. Please upload one now." %}</p>
{% else %}
<form method="POST" action="{% url 'avatar_change' %}">
<ul>
{{ primary_avatar_form.as_ul }}
</ul>
<p>{% csrf_token %}<input type="submit" value="{% trans "Choose new Default" %}" /></p>
</form>
{% endif %}
<form enctype="multipart/form-data" method="POST" action="{% url 'avatar_add' %}">
{{ upload_avatar_form.as_p }}
<p>{% csrf_token %}<input type="submit" value="{% trans "Upload New Image" %}" /></p>
</form>
{% endblock %}

View File

@ -0,0 +1,17 @@
{% extends "avatar/base.html" %}
{% load i18n %}
{% block avatarcontent %}
<p>{% trans "Please select the avatars that you would like to delete." %}</p>
{% if not avatars %}
{% url 'avatar_change' as avatar_change_url %}
<p>{% blocktrans %}You have no avatars to delete. Please <a href="{{ avatar_change_url }}">upload one</a> now.{% endblocktrans %}</p>
{% else %}
<form method="POST" action="{% url 'avatar_delete' %}">
<ul>
{{ delete_avatar_form.as_ul }}
</ul>
<p>{% csrf_token %}<input type="submit" value="{% trans "Delete These" %}" /></p>
</form>
{% endif %}
{% endblock %}

View File

@ -10,6 +10,7 @@ urlpatterns = [
url(r'^logout/$', auth_views.logout, {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout'), 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/participants/$', views.participation_list, name='list-participant'),
url(r'^admin/participant/(?P<username>[\w.@+-]+)$', views.edit, name='edit-participant'), url(r'^admin/participant/(?P<username>[\w.@+-]+)$', views.edit, name='edit-participant'),
url(r'^avatar/', include('avatar.urls')),
url(r'', include('django.contrib.auth.urls')), url(r'', include('django.contrib.auth.urls')),
url(r'', include('registration.backends.default.urls')), url(r'', include('registration.backends.default.urls')),
] ]

View File

@ -14,6 +14,7 @@ from .utils import can_edit_profile, is_orga
RESET_PASSWORD_BUTTON = ('password_reset', 'warning', _('Reset your password')) RESET_PASSWORD_BUTTON = ('password_reset', 'warning', _('Reset your password'))
CHANGE_PASSWORD_BUTTON = ('password_change', 'warning', _('Change password')) CHANGE_PASSWORD_BUTTON = ('password_change', 'warning', _('Change password'))
CHANGE_AVATAR_BUTTON = ('avatar_change', 'default', _('Change avatar'))
@login_required @login_required

Binary file not shown.

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\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" msgid "Biography"
msgstr "Biographie" msgstr "Biographie"
@ -42,7 +42,7 @@ msgstr "Jaccepte dêtre enregistré en vidéo"
msgid "Video licence" msgid "Video licence"
msgstr "Licence vidéo" 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" msgid "Notes"
msgstr "Notes" msgstr "Notes"
@ -54,6 +54,11 @@ msgstr "Bienvenue !"
msgid "Goodbye!" msgid "Goodbye!"
msgstr "Au revoir !" 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 #: accounts/templates/accounts/participation_list.html:32
msgid "View conversation" msgid "View conversation"
msgstr "Afficher la discussion" msgstr "Afficher la discussion"
@ -72,6 +77,57 @@ msgstr "Sabonner à la discussion"
msgid "Profile" msgid "Profile"
msgstr "Profile" msgstr "Profile"
#: accounts/templates/accounts/profile.html:20 accounts/views.py:17
msgid "Change avatar"
msgstr "Changer davatar"
#: 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 <a href=\"%(avatar_change_url)s"
"\">upload one</a> now."
msgstr ""
#: accounts/templates/avatar/confirm_delete.html:14
msgid "Delete These"
msgstr ""
#: accounts/templates/registration/login.html:11 #: accounts/templates/registration/login.html:11
#: ponyconf/templates/base.html:76 #: ponyconf/templates/base.html:76
msgid "Login" msgid "Login"
@ -108,7 +164,7 @@ msgstr "Réinitialiser son mot de passe"
#: accounts/views.py:16 #: accounts/views.py:16
msgid "Change password" msgid "Change password"
msgstr "Changer son mot de passe" msgstr "Changer de mot de passe"
#: conversations/templates/conversations/_message_form.html:4 #: conversations/templates/conversations/_message_form.html:4
msgid "Send a message" msgid "Send a message"
@ -139,28 +195,20 @@ msgid "You can use this page to communicate with the staff."
msgstr "" msgstr ""
"Vous pouvez utiliser cette page pour communiquer avec léquipe organisatrice." "Vous pouvez utiliser cette page pour communiquer avec léquipe organisatrice."
#: ponyconf/settings.py:135 #: ponyconf/settings.py:136
msgid "English" msgid "English"
msgstr "Anglais" msgstr "Anglais"
#: ponyconf/settings.py:136 #: ponyconf/settings.py:137
msgid "French" msgid "French"
msgstr "Français" 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 #: ponyconf/templates/base.html:45
msgid "Home" msgid "Home"
msgstr "Accueil" msgstr "Accueil"
#: ponyconf/templates/base.html:47 #: ponyconf/templates/base.html:47
#: proposals/templates/proposals/user_details.html:13 #: proposals/templates/proposals/user_details.html:15
msgid "Talks" msgid "Talks"
msgstr "Exposés" msgstr "Exposés"
@ -281,7 +329,7 @@ msgstr "Aucun thèmes."
msgid "Add a topic" msgid "Add a topic"
msgstr "Ajouter un thème" msgstr "Ajouter un thème"
#: proposals/templates/proposals/user_details.html:19 #: proposals/templates/proposals/user_details.html:21
msgid "Edit" msgid "Edit"
msgstr "Éditer" msgstr "Éditer"

View File

@ -44,6 +44,7 @@ INSTALLED_APPS = [
'bootstrap3', 'bootstrap3',
'registration', 'registration',
'django_select2', 'django_select2',
'avatar',
# build-in apps # build-in apps
'django.contrib.admin', '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) # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/ # https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_URL = '/static/' STATIC_URL = '/static/'
STATICFILES_FINDERS = [ STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder',

View File

@ -1,6 +1,7 @@
{% load bootstrap3 i18n %} {% load bootstrap3 i18n %}
<form action="" method="post" class="form-horizontal"> <form action="" method="post" class="form-horizontal">
{% csrf_token %} {% csrf_token %}
{% block beforeform %}{% endblock %}
{% if form %} {% if form %}
{% bootstrap_form form layout="horizontal" %} {% bootstrap_form form layout="horizontal" %}
{% endif %} {% endif %}

View File

@ -15,6 +15,8 @@ Including another URLconf
""" """
from django.conf.urls import include, url from django.conf.urls import include, url
from django.contrib import admin from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [ urlpatterns = [
url(r'^admin/', admin.site.urls), url(r'^admin/', admin.site.urls),
@ -22,4 +24,4 @@ urlpatterns = [
url(r'', include('proposals.urls')), url(r'', include('proposals.urls')),
url(r'^conversations/', include('conversations.urls')), url(r'^conversations/', include('conversations.urls')),
url(r'^select2/', include('django_select2.urls')), url(r'^select2/', include('django_select2.urls')),
] ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@ -1,5 +1,5 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load accounts_tags i18n %} {% load accounts_tags i18n avatar_tags %}
{% block speakertab %} class="active"{% endblock %} {% block speakertab %} class="active"{% endblock %}
@ -7,6 +7,8 @@
<h1>{{ profile }}</h1> <h1>{{ profile }}</h1>
<img class="pull-right" src="{% avatar_url request.user 160 %}" />
<h2>{% trans "Biography" %}</h2> <h2>{% trans "Biography" %}</h2>
<p>{{ profile.biography }}</p> <p>{{ profile.biography }}</p>