Merge branch 'master' into Kerl/dev_env

This commit is contained in:
Martin Pépin 2017-05-17 10:33:05 +01:00
commit 750f7937b0
34 changed files with 73 additions and 183 deletions

View file

@ -47,7 +47,7 @@ class EquipmentAttribution(models.Model):
equipment = models.ForeignKey(AbstractEquipment) equipment = models.ForeignKey(AbstractEquipment)
activity = models.ForeignKey(Activity) activity = models.ForeignKey(Activity)
amount = models.PositiveSmallIntegerField(_("Quantité attribuée")) amount = models.PositiveSmallIntegerField(_("Quantité attribuée"))
remarks = models.TextField("Remarques concernant l'attribution") remarks = models.TextField(_("Remarques concernant l'attribution"))
class Meta: class Meta:
verbose_name = _("attribution de matériel") verbose_name = _("attribution de matériel")
@ -60,7 +60,7 @@ class EquipmentAttribution(models.Model):
class EquipmentRemark(models.Model): class EquipmentRemark(models.Model):
remark = models.TextField("Remarque sur le matériel") remark = models.TextField(_("Remarque sur le matériel"))
equipment = models.ForeignKey( equipment = models.ForeignKey(
AbstractEquipment, AbstractEquipment,
related_name="remarks", related_name="remarks",

View file

@ -44,7 +44,7 @@ BASE_DIR = os.path.dirname(
INSTALLED_APPS = [ INSTALLED_APPS = [
'equipment.apps.EquipmentConfig', 'equipment.apps.EquipmentConfig',
'event.apps.EventConfig', 'event.apps.EventConfig',
'user.apps.UserConfig', 'users.apps.UsersConfig',
'shared.apps.SharedConfig', 'shared.apps.SharedConfig',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',

View file

@ -8,7 +8,7 @@ from django.contrib import admin
urlpatterns = [ urlpatterns = [
url(r'^admin/', admin.site.urls), url(r'^admin/', admin.site.urls),
url(r'^event/', include('event.urls')), url(r'^event/', include('event.urls')),
url(r'^user/', include('user.urls')), url(r'^user/', include('users.urls')),
url(r'^', include('shared.urls')), url(r'^', include('shared.urls')),
] ]

View file

@ -66,14 +66,14 @@ class ActivityTag(models.Model):
) )
color_regex = RegexValidator( color_regex = RegexValidator(
regex=r'^#(?:[0-9a-fA-F]{3}){1,2}$', regex=r'^#(?:[0-9a-fA-F]{3}){1,2}$',
message="La chaîne de caractère rentrée n'est pas" message=_("La chaîne de caractère rentrée n'est pas"
"une couleur en hexadécimal.", " une couleur en hexadécimal."),
) )
color = models.CharField( color = models.CharField(
_('Couleur'), _('Couleur'),
max_length=7, max_length=7,
validators=[color_regex], validators=[color_regex],
help_text="Rentrer une couleur en hexadécimal", help_text=_("Rentrer une couleur en hexadécimal"),
) )
class Meta: class Meta:

View file

@ -28,7 +28,7 @@ function fill_template {
# --- # ---
# System packages # System packages
apt-get update && apt-get upgrade apt-get update && apt-get upgrade -y
apt-get install -y python3-pip python3-dev python3-venv libpq-dev postgresql \ apt-get install -y python3-pip python3-dev python3-venv libpq-dev postgresql \
postgresql-contrib libjpeg-dev nginx redis-server postgresql-contrib libjpeg-dev nginx redis-server

View file

@ -1,5 +1,6 @@
{% extends "base_html.html" %} {% extends "base_html.html" %}
{% load staticfiles %} {% load staticfiles %}
{% load i18n %}
{% block title %}GestionÉvènementiel{% block sub_title %}{% endblock %}{% endblock %} {% block title %}GestionÉvènementiel{% block sub_title %}{% endblock %}{% endblock %}
@ -12,7 +13,7 @@
{% if user.is_authenticated %} {% if user.is_authenticated %}
<h5 class="centered username">{{ user.username }}</h5> <h5 class="centered username">{{ user.username }}</h5>
{% else %} {% else %}
<h5 class="centered username">non connecté&middot;e</h5> <h5 class="centered username">{% trans "non connecté&middot;e" %}</h5>
{% endif %} {% endif %}
<hr/> <hr/>
@ -20,35 +21,35 @@
{% block sidenav %} {% block sidenav %}
{% if not user.is_authenticated %} {% if not user.is_authenticated %}
<li> <li>
<a href="{% url "user:login" %}"> <a href="{% url "users:login" %}">
<i class="fa fa-sign-in"></i> <i class="fa fa-sign-in"></i>
<span>Se connecter</span> <span>{% trans "Se connecter" %}</span>
</a> </a>
</li> </li>
<li> <li>
<a href="{% url "user:create_user" %}"> <a href="{% url "users:create_user" %}">
<i class="fa fa-user"></i> <i class="fa fa-user"></i>
<span>Créer un compte</span> <span>{% trans "Créer un compte" %}</span>
</a> </a>
</li> </li>
<li> <li>
<a href="{% url "user:password_reset" %}"> <a href="{% url "users:password_reset" %}">
<i class="fa fa-question"></i> <i class="fa fa-question"></i>
<span>Mot de passe oublié</span> <span>{% trans "Mot de passe oublié" %}</span>
</a> </a>
</li> </li>
{% endif %} {% endif %}
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li> <li>
<a href="{% url "user:password_change" %}"> <a href="{% url "users:password_change" %}">
<i class="fa fa-unlock-alt"></i> <i class="fa fa-unlock-alt"></i>
<span>Changer de mot de passe</span> <span>{% trans "Changer de mot de passe" %}</span>
</a> </a>
</li> </li>
<li> <li>
<a href="{% url "user:logout"%}"> <a href="{% url "users:logout"%}">
<i class="fa fa-sign-out"></i> <i class="fa fa-sign-out"></i>
<span>Se déconnecter</span> <span>{% trans "Se déconnecter" %}</span>
</a> </a>
</li> </li>
{% endif %} {% endif %}
@ -66,4 +67,3 @@
</div> </div>
<!-- /.row --> <!-- /.row -->
{% endblock %} {% endblock %}

View file

@ -1,5 +1,3 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block page_title %}Erreur !{% endblock %} {% block page_title %}{% trans "Erreur&#8239;!" %}{% endblock %}

View file

@ -1,5 +1,8 @@
{% load i18n %}
<footer class="site-footer"> <footer class="site-footer">
<div class="text-center"> <div class="text-center">
{% blocktrans %}
en cas de problème : <tt>cof-geek@ens.fr</tt>. en cas de problème : <tt>cof-geek@ens.fr</tt>.
{% endblocktrans %}
</div> </div>
</footer> </footer>

View file

@ -1,3 +1,4 @@
{% load i18n %}
<ul class="nav navbar-top-links pull-right"> <ul class="nav navbar-top-links pull-right">
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li class="dropdown"> <li class="dropdown">
@ -67,12 +68,12 @@
<i class="fa fa-user fa-fw fa-lg"></i> <i class="fa fa-caret-down"></i> <i class="fa fa-user fa-fw fa-lg"></i> <i class="fa fa-caret-down"></i>
</a> </a>
<ul class="dropdown-menu dropdown-user"> <ul class="dropdown-menu dropdown-user">
<li><a href="#"><i class="fa fa-user fa-fw"></i>Mon profile</a> <li><a href="#"><i class="fa fa-user fa-fw"></i>{% trans "Mon profil" %}</a>
</li> </li>
<li><a href="{% url "user:password_change" %}"><i class="fa fa-unlock-alt fa-fw"></i>Changer de mot de passe</a> <li><a href="{% url "users:password_change" %}"><i class="fa fa-unlock-alt fa-fw"></i>{% trans "Changer de mot de passe" %}</a>
</li> </li>
<li class="divider"></li> <li class="divider"></li>
<li><a href="{% url "user:logout" %}"><i class="fa fa-sign-out fa-fw"></i>Se déconnecter</a> <li><a href="{% url "users:logout" %}"><i class="fa fa-sign-out fa-fw"></i>{% trans "Se déconnecter" %}</a>
</li> </li>
</ul> </ul>
<!-- /.dropdown-user --> <!-- /.dropdown-user -->
@ -80,7 +81,7 @@
<!-- /.dropdown --> <!-- /.dropdown -->
{% else %} {% else %}
<li> <li>
<a href="{% url "user:login" %}"> <a href="{% url "users:login" %}">
<i class="fa fa-sign-in fa-fw fa-lg"></i></a> <i class="fa fa-sign-in fa-fw fa-lg"></i></a>
</li> </li>
{% endif %} {% endif %}

View file

@ -1,6 +1,7 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load i18n %}
{% block page_title %}Acceuil{% endblock %} {% block page_title %}{% trans "Accueil" %}{% endblock %}
{% block content %} {% block content %}
<h2>Bonjours, je suis une maison</h2> <h2>Bonjours, je suis une maison</h2>

View file

@ -3,5 +3,5 @@ from .views import Home
app_name = 'shared' app_name = 'shared'
urlpatterns = [ urlpatterns = [
url(r'$', Home.as_view(), name='home'), url(r'^$', Home.as_view(), name='home'),
] ]

View file

@ -1,5 +0,0 @@
from django.apps import AppConfig
class UserConfig(AppConfig):
name = 'user'

View file

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-14 22:17
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Profil',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View file

@ -1,35 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-16 16:03
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('user', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='profil',
name='modif_pad',
field=models.BooleanField(default=False, verbose_name='Modifier tous les pads'),
),
migrations.AddField(
model_name='profil',
name='read_kholle',
field=models.BooleanField(default=False, verbose_name='Lecture de khôlles'),
),
migrations.AddField(
model_name='profil',
name='write_kholle',
field=models.BooleanField(default=False, verbose_name='Écriture de khôlles'),
),
migrations.AddField(
model_name='profil',
name='write_pad',
field=models.BooleanField(default=False, verbose_name='Écrire des pads'),
),
]

View file

@ -1,31 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-23 14:03
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('user', '0002_auto_20160616_1803'),
]
operations = [
migrations.RemoveField(
model_name='profil',
name='modif_pad',
),
migrations.RemoveField(
model_name='profil',
name='read_kholle',
),
migrations.RemoveField(
model_name='profil',
name='write_kholle',
),
migrations.RemoveField(
model_name='profil',
name='write_pad',
),
]

View file

@ -1,22 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-23 16:08
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('user', '0003_auto_20160623_1603'),
]
operations = [
migrations.RemoveField(
model_name='profil',
name='user',
),
migrations.DeleteModel(
name='Profil',
),
]

View file

@ -1,4 +0,0 @@
{% extends "user/user_form.html" %}
{% block action_name %}{% url 'user:password_change' %}{% endblock %}
{% block user_error %}Une erreur s'est produite, veuillez réessayer.{% endblock %}

View file

@ -1,4 +0,0 @@
{% extends "user/user_form.html" %}
{% block action_name %}{% url 'user:password_reset' %}{% endblock %}
{% block user_error %}L'identitfiant et le mot de passe ne correspondent pas !{% endblock %}

View file

@ -1 +0,0 @@
[Qwann.fr] Réinitialisation du mot de passe

5
users/apps.py Normal file
View file

@ -0,0 +1,5 @@
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'

View file

@ -0,0 +1,4 @@
{% extends "users/user_form.html" %}
{% block action_name %}{% url 'users:password_change' %}{% endblock %}
{% block user_error %}Une erreur s'est produite, veuillez réessayer.{% endblock %}

View file

@ -1,6 +1,6 @@
Bonjour, Bonjour,
Quelqu'un a demandé à réinitialiser le mot de passe pour le compte utilisateur de qwann.fr utilisant l'adresse mail : {{ email }}. Pour réinitialiser le mot de passe, veuillez suivre le lien suivant : Quelqu'un a demandé à réinitialiser le mot de passe pour le compte utilisateur de qwann.fr utilisant l'adresse mail : {{ email }}. Pour réinitialiser le mot de passe, veuillez suivre le lien suivant :
{{ protocol}}://qwann.fr{% url 'user:password_reset_confirm' uidb64=uid token=token %} {{ protocol}}://qwann.fr{% url 'users:password_reset_confirm' uidb64=uid token=token %}
Merci de ne pas répondre à ce mail. Merci de ne pas répondre à ce mail.

View file

@ -1,6 +1,6 @@
{% extends "user/user_form.html" %} {% extends "users/user_form.html" %}
{% block action_name %}{% url 'user:login' %}{% endblock %} {% block action_name %}{% url 'users:login' %}{% endblock %}
{% block user_error %}L'identitfiant et le mot de passe ne correspondent pas !{% endblock %} {% block user_error %}L'identitfiant et le mot de passe ne correspondent pas !{% endblock %}
{% block extra_form_input %} {% block extra_form_input %}

View file

@ -0,0 +1,4 @@
{% extends "users/user_form.html" %}
{% block action_name %}{% url 'users:password_reset' %}{% endblock %}
{% block user_error %}L'identitfiant et le mot de passe ne correspondent pas !{% endblock %}

View file

@ -0,0 +1 @@
[Évenementiel] Réinitialisation du mot de passe

View file

@ -1,55 +1,56 @@
from django.conf.urls import url from django.conf.urls import url
from django.contrib.auth import views as auth_views from django.contrib.auth import views as auth_views
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.utils.translation import ugettext_lazy as _
from shared.views import Home from shared.views import Home
from user.views import CreateUser from users.views import CreateUser
app_name = 'user' app_name = 'users'
urlpatterns = [ urlpatterns = [
# CREATE USER # CREATE USER
url('^create/$', CreateUser.as_view(), name='create_user'), url(r'^create/$', CreateUser.as_view(), name='create_user'),
# LOGIN # LOGIN
url('^login/$', url(r'^login/$',
auth_views.login, auth_views.login,
{'template_name': 'user/login.html', {'template_name': 'users/login.html',
'extra_context': { 'extra_context': {
'page_title': 'Connexion', 'page_title': _('Connexion'),
'button': 'Se connecter', 'button': _('Se connecter'),
}, },
}, },
name='login', name='login',
), ),
# LOGOUT # LOGOUT
url('^logout/$', url(r'^logout/$',
auth_views.logout, auth_views.logout,
name='logout',), name='logout',),
# PASSWORD_CHANGE # PASSWORD_CHANGE
url('^password_change/$', url(r'^password_change/$',
auth_views.password_change, auth_views.password_change,
{'template_name': 'user/change_pass.html', {'template_name': 'users/change_pass.html',
'post_change_redirect': reverse_lazy('shared:home'), 'post_change_redirect': reverse_lazy('shared:home'),
'extra_context': { 'extra_context': {
'page_title': 'Changement de mot de passe', 'page_title': _('Changement de mot de passe'),
'button': 'Modifier', 'button': _('Modifier'),
}, },
}, },
name='password_change'), name='password_change'),
# url('^password_change/done/$', name='password_change_done'), # url('^password_change/done/$', name='password_change_done'),
# RESET PASSWORD # RESET PASSWORD
url('^password_reset/$', url(r'^password_reset/$',
auth_views.password_reset, auth_views.password_reset,
{'template_name': 'user/password_reset.html', {'template_name': 'users/password_reset.html',
'email_template_name': 'email_password_reset.html', 'email_template_name': 'email_password_reset.html',
'subject_template_name': 'subject_password_reset.txt', 'subject_template_name': 'subject_password_reset.txt',
'post_reset_redirect': reverse_lazy('user:password_reset_done'), 'post_reset_redirect': reverse_lazy('users:password_reset_done'),
'extra_context': { 'extra_context': {
'page_title': 'Demander un nouveau mot de passe', 'page_title': _('Demander un nouveau mot de passe'),
'button': 'Envoyer' 'button': _('Envoyer')
}, },
}, },
name='password_reset'), name='password_reset'),
# PASS RESET DONE # PASS RESET DONE
url('^password_reset/done/$', url(r'^password_reset/done/$',
Home.as_view(), Home.as_view(),
name='password_reset_done'), name='password_reset_done'),
# PASS RESET CONFIRM # PASS RESET CONFIRM
@ -62,13 +63,13 @@ urlpatterns = [
'user:password_reset_complete' 'user:password_reset_complete'
), ),
'extra_context': { 'extra_context': {
'page_title': 'Changer de mot de passe', 'page_title': _('Changer de mot de passe'),
'button': 'Changer' 'button': _('Changer')
}, },
}, },
name='password_reset_confirm'), name='password_reset_confirm'),
# PASS RESET COMPLETE # PASS RESET COMPLETE
url('^reset/done/$', url(r'^reset/done/$',
Home.as_view(), Home.as_view(),
name='password_reset_complete'), name='password_reset_complete'),
] ]

View file

@ -1,11 +1,11 @@
from user.forms import CreateUserForm from .forms import CreateUserForm
from django.views.generic.edit import CreateView from django.views.generic.edit import CreateView
from django.contrib.messages.views import SuccessMessageMixin from django.contrib.messages.views import SuccessMessageMixin
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
class CreateUser(SuccessMessageMixin, CreateView): class CreateUser(SuccessMessageMixin, CreateView):
template_name = 'user/user_form.html' template_name = 'users/user_form.html'
form_class = CreateUserForm form_class = CreateUserForm
success_url = reverse_lazy('shared:home') success_url = reverse_lazy('shared:home')
success_message = "Votre compte utilisateur a été correctement créé !" success_message = "Votre compte utilisateur a été correctement créé !"