From 0040f30809e347890e4cdf6d9e65b7c084436643 Mon Sep 17 00:00:00 2001 From: Laville Augustin Date: Fri, 17 Jun 2016 14:25:51 +0200 Subject: [PATCH] Fix #3609 : mise a jour de la page de contact (#3613) --- templates/pages/contact.html | 85 +++++++++++----------------- update.md | 39 +++++++++++++ zds/pages/admin.py | 6 ++ zds/pages/migrations/0001_initial.py | 32 +++++++++++ zds/pages/models.py | 24 +++++++- zds/pages/urls.py | 5 +- zds/pages/views.py | 24 ++++---- 7 files changed, 147 insertions(+), 68 deletions(-) create mode 100644 zds/pages/admin.py create mode 100644 zds/pages/migrations/0001_initial.py diff --git a/templates/pages/contact.html b/templates/pages/contact.html index 78fe9ecf92..75b08f515a 100644 --- a/templates/pages/contact.html +++ b/templates/pages/contact.html @@ -1,10 +1,12 @@ {% extends "pages/base.html" %} + + {% load email_obfuscator %} +{% load emarkdown %} {% load i18n %} {% load set %} - {% block title %} {% trans "Contact" %} {% endblock %} @@ -24,57 +26,38 @@

{% trans "Contact" %}

{% block content %} - {% set app.site.litteral_name as site_name %} -

{% trans "L'équipe de communication" %}

-

- {% blocktrans with email_contact=app.site.email_contact|obfuscate_mailto_top_subject:"Contact communication" %} - Vous pouvez à tout moment joindre l'équipe de communication de {{ site_name }} par courriel via {{ email_contact }}. - {% endblocktrans %} -

- {% if app.site.association %} -

{% trans "L'association" %}

+ {% for contact_group in groups %} +

{{ contact_group.name }}

+ {% if contact_group.description %} +

{{ contact_group.description|emarkdown }}

+ {% endif %} + {% if contact_group.email %} +

+ {% blocktrans with group_name=contact_group.name|lower group_email=contact_group.email|obfuscate_mailto_top_subject:"Contact" %} + Vous pouvez joindre {{ group_name }} par courriel via {{ group_email }}. + {% endblocktrans %} +

+ {% endif %} + {% if contact_group.person_in_charge %} +

{% trans "La personne responsable du groupe est" %} : {% include "misc/member_item.part.html" with avatar=True member=contact_group.person_in_charge %}.

+ {% endif %} + {% with users=contact_group.group.user_set.all %} + {% if users %} +

{% trans "Les membres sont les suivants" %} :

+
+ +
+ {% endif %} + {% endwith %} + {% empty %}

- {% blocktrans with email_association=app.site.association.email|obfuscate_mailto_top_subject:"Contact association" %} - Vous pouvez joindre l'association par courriel via {{ email_association }}. + {% blocktrans with email_contact=app.site.email_contact|obfuscate_mailto_top_subject:"Contact" %} + Vous pouvez nous joindre par courriel via {{ email_contact }}. {% endblocktrans %}

- {% endif %} - -

{% trans "Le staff" %}

-

- {% blocktrans %} - Le staff est constitué de certains membres du site dont le but est de contrôler le contenu publié sur {{ site_name }}. Ils sont en charge de la modération des messages sur les forums et commentaires, ainsi que de la validation et publication d'articles et/ou de tutoriels de {{ site_name }}. - Les membres faisant partie du Staff sont les suivants : - {% endblocktrans %} -

-
- -
- -

{% trans "L'équipe technique" %}

-

- {% blocktrans with repository=app.site.repository %} - L'équipe technique est constituée de certains membres du site dont le but est d'une part de s'assurer que le site reste toujours disponible en ligne, et d'autre part de corriger les bogues rencontrés sur le site ainsi que d'ajouter de nouvelles fonctionnalités. - Des administrateurs systèmes, jusqu'aux designeurs, en passant par les développeurs back-end et intégrateurs front-end, ils s'occupent aussi de la maintenance du dépôt officiel du projet. Les membres faisant partie de l'équipe technique sont les suivants : - {% endblocktrans %} -

-
- -
+ {% endfor %} {% endblock %} diff --git a/update.md b/update.md index 1080df8389..803b17655d 100644 --- a/update.md +++ b/update.md @@ -584,6 +584,45 @@ Lancez la commande `python manage.py delete_useless_notif` pour supprimer toutes Lancez la commande `python manage.py migrate_email_subscription` pour migrer tous les sujets suivis par e-mail vers les nouveaux modèles de souscriptions. +Actions à faire pour mettre en prod la version 19 +================================================= + +Page de contact +--------------- + +**À faire après la mise en production par une personne ayant les droits admin**. + +Il faut ajouter les différents groupes de la page de contact via l'administration Django. Les informations pour les créer sont ci dessous : : + +``` +L'équipe de communication + Email : communication@zestedesavoir.com + Description : + Responsable : ShigeruM + groupe : Communication + +L'association + Email : zestedesavoir@gmail.com + Description : + Responsable : Kje + groupe : bureau (à créer) ou CA (j'ai pas l'info au moment de la PR, voir avec Kje) + +Le staff + Email : + Description : Le staff est constitué de certains membres du site dont le but est de contrôler le contenu publié sur Zeste de Savoir. Ils sont en charge de la modération des messages sur les forums et commentaires, ainsi que de la validation et publication d'articles et/ou de tutoriels de Zeste de Savoir. + Responsable : Thunderseb + groupe : staffs + +L'équipe technique + Email : + Description : L'équipe technique est constituée de certains membres du site dont le but est d'une part de s'assurer que le site reste toujours disponible en ligne, et d'autre part de corriger les bogues rencontrés sur le site ainsi que d'ajouter de nouvelles fonctionnalités. Des administrateurs systèmes, jusqu'aux designeurs, en passant par les développeurs back-end et intégrateurs front-end, ils s'occupent aussi de la maintenance du dépôt officiel du projet. + Responsable : Andr0 + groupe : devs + +``` + +Ces descriptions peuvent être modifiées via l'administration Django après la mise en production. + --- **Notes auxquelles penser lors de l'édition de ce fichier (à laisser en bas) :** diff --git a/zds/pages/admin.py b/zds/pages/admin.py new file mode 100644 index 0000000000..6b987559c2 --- /dev/null +++ b/zds/pages/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin + +from zds.pages.models import GroupContact + + +admin.site.register(GroupContact) diff --git a/zds/pages/migrations/0001_initial.py b/zds/pages/migrations/0001_initial.py new file mode 100644 index 0000000000..cad8d45aa6 --- /dev/null +++ b/zds/pages/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + ('auth', '0006_require_contenttypes_0002'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='GroupContact', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(unique=True, max_length=32, verbose_name=b'Nom (ex: Le staff)')), + ('description', models.TextField(null=True, verbose_name=b'Description (en markdown)', blank=True)), + ('email', models.EmailField(max_length=254, null=True, verbose_name=b'Adresse mail du groupe', blank=True)), + ('position', models.PositiveSmallIntegerField(unique=True, verbose_name=b'Position dans la page')), + ('group', models.OneToOneField(verbose_name=b"Groupe d'utilisateur", to='auth.Group')), + ('person_in_charge', models.ForeignKey(verbose_name=b'Responsable', blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'verbose_name': 'Groupe de la page de contact', + 'verbose_name_plural': 'Groupes de la page de contact', + }, + ), + ] diff --git a/zds/pages/models.py b/zds/pages/models.py index 5a0a6b6b33..86bd35b58d 100644 --- a/zds/pages/models.py +++ b/zds/pages/models.py @@ -1,3 +1,25 @@ # coding: utf-8 -# This file is necessary for tests but is unused. +from django.contrib.auth.models import Group, User +from django.db import models +from django.utils.translation import ugettext_lazy as _ + + +class GroupContact(models.Model): + """ + Groups displayed in contact page and their informations. + """ + + class Meta: + verbose_name = _('Groupe de la page de contact') + verbose_name_plural = _('Groupes de la page de contact') + + group = models.OneToOneField(Group, verbose_name=_('Groupe d\'utilisateur')) + name = models.CharField(_('Nom (ex: Le staff)'), max_length=32, unique=True) + description = models.TextField(_('Description (en markdown)'), blank=True, null=True) + email = models.EmailField(_('Adresse mail du groupe'), blank=True, null=True) + person_in_charge = models.ForeignKey(User, verbose_name=_('Responsable'), blank=True, null=True) + position = models.PositiveSmallIntegerField(_('Position dans la page'), unique=True) + + def __unicode__(self): + return self.name diff --git a/zds/pages/urls.py b/zds/pages/urls.py index 953d107569..371384013b 100644 --- a/zds/pages/urls.py +++ b/zds/pages/urls.py @@ -2,14 +2,13 @@ from django.conf.urls import url -from zds.pages.views import about, association, contact, eula, alerts, cookies, index, AssocSubscribeView - +from zds.pages.views import about, association, eula, alerts, cookies, index, AssocSubscribeView, ContactView urlpatterns = [ # single pages url(r'^apropos/$', about, name='pages-about'), url(r'^association/$', association, name='pages-association'), - url(r'^contact/$', contact, name='pages-contact'), + url(r'^contact/$', ContactView.as_view(), name='pages-contact'), url(r'^cgu/$', eula, name='pages-eula'), url(r'^alertes/$', alerts, name='pages-alerts'), url(r'^cookies/$', cookies, name='pages-cookies'), diff --git a/zds/pages/views.py b/zds/pages/views.py index e4a7bec753..40aad215e2 100644 --- a/zds/pages/views.py +++ b/zds/pages/views.py @@ -5,19 +5,21 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required -from django.contrib.auth.models import Group, User +from django.contrib.auth.models import User from django.core.exceptions import PermissionDenied from django.core.urlresolvers import reverse from django.shortcuts import render, get_object_or_404 from django.template.loader import render_to_string from django.utils.decorators import method_decorator from django.utils.translation import ugettext_lazy as _ +from django.views.generic import ListView from django.views.generic.edit import FormView from zds.featured.models import FeaturedResource, FeaturedMessage from zds.forum.models import Forum, Topic from zds.member.decorator import can_write_and_read_now from zds.pages.forms import AssocSubscribeForm +from zds.pages.models import GroupContact from zds.settings import BASE_DIR, ZDS_APP from zds.tutorialv2.models.models_database import PublishableContent, PublishedContent from zds.utils.forums import create_topic @@ -110,18 +112,14 @@ def association(request): return render(request, 'pages/association.html') -def contact(request): - """Display contact page.""" - staffs = User.objects.filter( - groups__in=Group.objects.filter( - name__contains='staff')).all() - devs = User.objects.filter( - groups__in=Group.objects.filter( - name__contains='dev')).all() - return render(request, 'pages/contact.html', { - 'staffs': staffs, - 'devs': devs - }) +class ContactView(ListView): + """ + Display contact page. + """ + model = GroupContact + queryset = GroupContact.objects.order_by('position').prefetch_related('group') + template_name = 'pages/contact.html' + context_object_name = 'groups' def eula(request):