Projet

Général

Profil

Bug #13330

Il manque un équivalent à Attribute.user_visible comme A2_PROFILE_FIELDS est équivalent à Attribute.user_editable

Ajouté par Benjamin Dauvergne il y a plus de 7 ans. Mis à jour il y a plus de 7 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
27 septembre 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Actuellement il n'est pas possible d'ordonner les champs seulement visible du profil. Deux choses:
  • si Attribute.user_visible est à True on affiche le champ dans le profil quelque soit la valeurs des variables A2_*_FIELDS
  • si A2_VISIBLE_FIELDS est disponible, il définit la disposition des champs du profil en lieu et place de A2_PROFILE_FIELDS qui ne sert plus qu'au formulaire d'édition

Fichiers

Révisions associées

Révision fa9a9b22 (diff)
Ajouté par Thomas Noël il y a plus de 7 ans

remove non-editables fields from EditProfile view (#13330)

Historique

#2

Mis à jour par Thomas Noël il y a plus de 7 ans

Dans le code actuel, A2_PROFILE_FIELDS donne la liste à afficher et à modifier, et ça surpasse tout ce qui peut être raconté via user_editable ou user_visible, qui ne sont pas pris en compte pour définir l'affichage ou le formulaire.

Je proposerai bien de ne pas changer ce principe des "settings qui décident", mais de rajouter deux settings : A2_USER_VISIBLE_PROFILE_FIELDS et A2_USER_EDITABLE_PROFILE_FIELDS qui surpasseraient A2_PROFILE_FIELDS. Et si rien n'existe, on se base sur les user_visible/user_editable (c-a-d qu'on laisse en place le principe actuel).

C'est peut-être un peu plus lourd, mais ça me semble moins magique et ça casserait rien ?

(restera alors dans les settings_loader de hobo à gérer ces deux nouveaux settings)

genre :

diff --git a/src/authentic2/app_settings.py b/src/authentic2/app_settings.py
index 38e62e1..908563e 100644
--- a/src/authentic2/app_settings.py
+++ b/src/authentic2/app_settings.py
@@ -120,6 +120,8 @@ default_settings = dict(
     A2_PROFILE_FIELDS=Setting(default=(), definition='Fields to show to the user in the profile page'),
+    A2_VISIBLE_PROFILE_FIELDS=Setting(default=(), definition='Fields to show to the user in the profile page'),
+    A2_EDITABLE_PROFILE_FIELDS=Setting(default=(), definition='Fields to show to the user in the profile edit page'),
     A2_REGISTRATION_FIELDS=Setting(default=(), definition='Fields from the user model that must appear on the registration form'),
diff --git a/src/authentic2/views.py b/src/authentic2/views.py
index 08dc8f6..a9169f8 100644
--- a/src/authentic2/views.py
+++ b/src/authentic2/views.py
@@ -80,7 +80,7 @@ class EditProfile(cbv.TemplateNamesMixin, UpdateView):
     def get_fields(cls):
         default_fields = list(models.Attribute.objects.filter(user_editable=True).values_list('name', flat=True))
         return utils.get_fields_and_labels(
-            app_settings.A2_PROFILE_FIELDS,
+            app_settings.A2_EDITABLE_PROFILE_FIELDS or app_settings.A2_PROFILE_FIELDS,
             default_fields)
@@ -356,7 +356,7 @@ class ProfileView(cbv.TemplateNamesMixin, TemplateView):
         # User attributes management
         profile = []
-        field_names = app_settings.A2_PROFILE_FIELDS
+        field_names = app_settings.A2_VISIBLE_PROFILE_FIELDS or app_settings.A2_PROFILE_FIELDS
         if not field_names:
#3

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

En fait j'aime pas trop l'idée des settings qui cache ce qu'il y a dans les modèles, initialement la seule raison de tous ces A2_*_FIELDS c'est que le modèle Attribute ne permet pas deux choses:
  • changer l'ordre des champs en fonction du contexte
  • changer le label du champ en fonction du contexte

Pour moi un champ doit être utilisé si le flag Attribute.flag du champ en question est vrai, c'est tout. Les A2_*_FIELDS ne doivent servir qu'à en changer l'ordre ou le label.

#4

Mis à jour par Thomas Noël il y a plus de 7 ans

« Les A2_*_FIELDS ne doivent servir qu'à en changer l'ordre ou le label. »

Ca me va bien ; et dans ce cas, on peut rester sur le simple A2_PROFILE_FIELDS mais :
  • dans EditProfile, retirer les attributs qui n'ont pas user_editable
  • dans ProfileView, retirer ceux qui n'ont pas user_visible
#5

Mis à jour par Thomas Noël il y a plus de 7 ans

#6

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Ack.

#7

Mis à jour par Thomas Noël il y a plus de 7 ans

  • Statut changé de En cours à Résolu (à déployer)
commit fa9a9b22c1f90012b03b9e8998e5c7fead1135db
Author: Thomas NOEL <tnoel@entrouvert.com>
Date:   Tue Sep 27 14:07:42 2016 +0200

    remove non-editables fields from EditProfile view (#13330)

#8

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

  • Assigné à mis à Thomas Noël
#9

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF