Development #15663
Permettre de modifier l'URL (slug) d'une démarche
0%
Description
- lors de la création, on calcule une URL depuis le nom de la démarche
- par la suite, si le nom de la démarche est changé, l'URL n'est recalculée que si aucune demande n'est encore active
Cela permet que l'URL d'une demande reste toujours valable tant que la demande existe, même si la démarche a changé de nom.
Cependant, il serait utile de pouvoir choisir l'URL d'une démarche au moment de la mise en production, et cela arrive souvent après pas mal de travail, et parfois on veut conserver les demandes en cours.
On pourrait donc assouplir :- déjà, permettre le recalcul de l'URL si toutes les demandes sont anonymisées ou des brouillons
- avoir un réglage "modification de l'URL" qui permette de choisir l'URL indépendamment du nom de la démarche
- dans le cas d'une démarche vide de demandes (ou seulement anonymisées&brouillons) : l'URL est aussitôt modifiée
- sinon, ne permettre la modification que si toutes les demandes sont terminées, après affichage d'un message d'alerte explicatif
Fichiers
Révisions associées
admin: make form slugs editable by the admin (#15663)
Historique
Mis à jour par Frédéric Péters il y a presque 7 ans
Garder en plus un attribut caché "manuellement édité", qui serait posé lorsque cette boite de dialogue est utilisée, pour bloquer la mise à jour automatique.
Mis à jour par Thomas Noël il y a presque 7 ans
En fait à la reflexion mon problème actuel est un peu différent : j'ai des URL codées par ailleurs (dans combo, mais ça pourrait être un CMS externe). Je ne veux pas que des URLs changent quand je migre un formulaire vers une autre plateforme. Or, un risque existe.
Finalement, je voudrais que l'URL ne change jamais. Sauf si on le demande explicitement.
Mis à jour par Frédéric Péters il y a presque 7 ans
Finalement, je voudrais que l'URL ne change jamais. Sauf si on le demande explicitement.
Je propose alors une évolution de la boite de changement de titre d'un formulaire, qu'elle devienne :
Titre du formulaire : [ Demande d'acte de naissance ......... ] Identifiant du formulaire : [ demande-d-acte-de-naissance ......... ]
Si à l'ouverture de la boite de dialogue, le slug == slugify(titre), alors il serait mis à jour automatiquement selon ce que l'utilisateur met dans le titre. (c'est par exemple important pour qu'après avoir dupliqué un formulaire on ne se trouve pas avec "demande-d-acte-de-naissance-copie" comme slug de la demande d'acte de mariage).
Si des demandes existent, le champ slug serait en lecture seule, avec une note d'information + un bouton pour l'éditer quand même, genre :
(i) L'identifiant du formulaire ne peut pas être modifié car des demandes existent. [autoriser les modifications malgré tout]
Mis à jour par Frédéric Péters il y a presque 7 ans
(attention comme quoi urlname est aussi utilisé pour le stockage pickle)
Mis à jour par Frédéric Péters il y a presque 7 ans
- Assigné à changé de Thomas Noël à Frédéric Péters
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0002-admin-make-form-slugs-editable-by-the-admin-15663.patch 0002-admin-make-form-slugs-editable-by-the-admin-15663.patch ajouté
- Fichier 0001-formdef-add-internal-identifier-attribute-separated-.patch 0001-formdef-add-internal-identifier-attribute-separated-.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Voilà, 0001 pour le changement de fond; j'ai gardé url_name comme nom d'attribut principalement parce qu'il y a déjà un index sur celui-ci.
Et 0002 pour l'UI.
Mis à jour par Thomas Noël il y a presque 7 ans
0001 :
new_url_name = simplify(self.name, space='-')
: le space est '-' par défaut, pas utile de le rappeler.
Il manque un changed=True dans le migrate après self.internal_identifier = self.url_name
Au fait, ce migrate est bien fait aussi lors d'une lecture d'un objet pickle ? J'en suis pas si sûr à cause des ignore_migrations, et je me dis : si un gars veut renommer ou overrider un formdef existant, qui n'aurait donc pas encore de internal_identifier, ça pourrait poser des soucis ? (bien relou à tester). Je dis peut-être un peu n'imp.
Dans wcs/admin/forms.py lors de l'import je pense qu'il faut laisser « formdef.url_name = None # a new one will be set in .store()
» (ligne 1555) sinon on pourrait importer un formulaire qui a le même url_name
qu'un existant, et boum. (et sans doute ajouter un test pour vérifier ça)
0002:
Au niveau de :
disabled_url_name = bool(self.formdef.data_class().count())
je pense qu'en mode SQL au moins, on pourrait ne pas compter les anonymisés (ni même les brouillons peut-être)... mais ça peut être dans un autre ticket à venir.
(Voilà déjà fournée 1 ; j'ai pas super trop bien tout relu vraiment encore)
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0002-admin-make-form-slugs-editable-by-the-admin-15663.patch 0002-admin-make-form-slugs-editable-by-the-admin-15663.patch ajouté
- Fichier 0001-formdef-add-internal-identifier-attribute-separated-.patch 0001-formdef-add-internal-identifier-attribute-separated-.patch ajouté
new_url_name = simplify(self.name, space='-')
: le space est '-' par défaut, pas utile de le rappeler.
Yep.
Il manque un changed=True dans le migrate après
self.internal_identifier = self.url_name
Yep.
Au fait, ce migrate est bien fait aussi lors d'une lecture d'un objet pickle ? J'en suis pas si sûr à cause des ignore_migrations, et je me dis : si un gars veut renommer ou overrider un formdef existant, qui n'aurait donc pas encore de internal_identifier, ça pourrait poser des soucis ? (bien relou à tester). Je dis peut-être un peu n'imp.
Oui, cette infra migrate c'est pour les fichiers pickle avant tout (cf get_filename() dans wcs/qommon/storage.py).
Dans wcs/admin/forms.py lors de l'import je pense qu'il faut laisser «
formdef.url_name = None # a new one will be set in .store()
» (ligne 1555) sinon on pourrait importer un formulaire qui a le mêmeurl_name
qu'un existant, et boum. (et sans doute ajouter un test pour vérifier ça)
J'étais sur l'idée qu'on avait justement comme souhait de ne pas recalculer de url_name lors d'un import (pour pouvoir passer de recette à prod sans changement); pour éviter le clash il y a dans import_from_xml une vérification; là dans un premier temps j'interdisais l'importation si l'url_name existait déjà, mais j'ai au final plutôt opté pour générer un nouvel url_name si ça arrive.
Au niveau de :
disabled_url_name = bool(self.formdef.data_class().count())
je pense qu'en mode SQL au moins, on pourrait ne pas compter les anonymisés (ni même les brouillons peut-être)... mais ça peut être dans un autre ticket à venir.
Sans doute, j'ai quand même l'impression que ces situations seraient plutôt rares et comme je ne suis pas fan de taper des parties limitées à postgresql, je préfère laisser ça pour un autre moment.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0002-admin-make-form-slugs-editable-by-the-admin-15663.patch 0002-admin-make-form-slugs-editable-by-the-admin-15663.patch ajouté
- Fichier 0001-formdef-add-internal-identifier-attribute-separated-.patch 0001-formdef-add-internal-identifier-attribute-separated-.patch ajouté
Avec des tests pour le .migrate().
Mis à jour par Thomas Noël il y a plus de 6 ans
Nouvelle relecture, j'ai l'impression que tout est ok. Ca pourrait être poussé, joué sur la dev (y compris branche django), et w.c.s. tagué rapidement pour profiter de 10 jours de recette.
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Statut changé de En cours à Résolu (à déployer)
commit 78db869ae2abecd28c2c4f274609f0f6be41b35e Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Jul 19 23:34:01 2017 +0200 admin: make form slugs editable by the admin (#15663) commit c3be61b8d1bb1f90c4f84e10faa3dda9376aaa56 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Jul 19 20:42:33 2017 +0200 formdef: add internal identifier attribute, separated from url_name (#15663) This will allow changing url name behaviour without impacting on storage matters.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
formdef: add internal identifier attribute, separated from url_name (#15663)
This will allow changing url name behaviour without impacting on storage
matters.