Skip to content
Extraits de code Groupes Projets

Passage de serialize à JSON pour le stockage en base

Fermé Maïeul requested to merge gh-fdf4c590/111/unknown/refs/pull/111/head into master

Ping @rastapopoulos proposition de résolution pour #99 (closed).

Les choix effectués :

  • on utilise désormais json_encode pour tout tableau stocké en base, à savoir :
  • saisies d'un form
  • traitements d'un form
  • valeur de réponse pour un champ multivalué (type case à cocher)
  • on ne procède pas à une conversion retrospective lors de la maj du plugin, pour éviter une mise à jour trop longue
  • à place on convertit "à la volée", lorsqu'on modifie la valeur de l'un des elements listés ci-dessus
  • on utilise le filtre tenter_unserialize, amélioré, pour tenter tantot un json_decode(), tantot un unserialize()

Autre point : je me suis apercu que les 2 traitemnts livrés par défaut deserializé eux même les saisies. J'ai décidé de passer du coup systématiquement de manière deserializé comme arguements au traitements, de même que les réglages des traitements eux-même.

A faire : faire un grep sur la zone dans tous les plugins "formidable" sur serialize, et voir s'il y a des choses à adapter.

Avec cela on peut très facilement utilisé des emojis.

En complément, on peut adopter https://git.spip.net/spip-contrib-extensions/saisies/pulls/184 (qui permet, si on modifie une réponse qui contient un emoji, d'avoir l'emoji bien affiché, et pas l'entité numérique HTML).

Rapports de requête de fusion

Loading
Loading

Activité

Filtrer l'activité
  • Approbations
  • Assignés et relecteurs
  • Commentaires (des bots)
  • Commentaires (des utilisateurs)
  • Branches et validations
  • Modifications
  • Labels
  • État de verrouillage
  • Mentions
  • État de la demande de fusion
  • Suivi
  • @maieul a ajouté 4 révisions : 918c4a4608512da24fbcef94ee013d4e25b91409 3b24112b3f802c01a32d15979474cce37b2c7399 7bb74572bf76412dbbd450c15e5ff6d266b6d8e3 9a2021ffdd2131f85dafb1a0acbcef4335d947c9

  • @rastapopoulos a évalué le commit 7bb74572bf76412dbbd450c15e5ff6d266b6d8e3 :

    diff --git a/formulaires/formidable.html b/formulaires/formidable.html
    --- a/formulaires/formidable.html
    +++ b/formulaires/formidable.html
    @@ -36,3 +22,1 @@
    -					<label for="mechantrobot-#ENV{id}"><:antispam_champ_vide:></label>
    -					<input type="text" id="mechantrobot-#ENV{id}" name="mechantrobot" value="#ENV{mechantrobot}" />
    -				</[(#VAL{li}|saisie_balise_structure_formulaire)]>
    +			#SET{saisies, #ENV{_saisies}}

    Je ne vois pas pourquoi il y a ces décalages vers la gauche en plusieurs endroits du diff, mettant tout à plat au même niveau, sans plus aucune lisibilité du code.

  • @rastapopoulos a rejeté cette PR (9a2021ffdd2131f85dafb1a0acbcef4335d947c9)

    Je me pose la question aussi du serialize càd du json_encode, si on devrait pas aussi avoir une fonction abstraite intermédiaire, pour ne pas imposer telle méthode d'encodage partout dans le code, mais dans une unique fonction mutualisée (mais en vrai ça devrait être un sujet globale à SPIP).

  • @rastapopoulos a évalué le commit ac9b3737 :

    diff --git a/inc/formidable.php b/inc/formidable.php
    --- a/inc/formidable.php
    +++ b/inc/formidable.php
    @@ -406,10 +409,18 @@ function analyser_saisie($saisie) {
      *	 Tableau, texte désérializé ou texte
     **/
     function filtre_tenter_unserialize_dist($texte) {

    C'est totalement normal que charger_fonction peut merder parfois, puisque ce filtre n'est PAS dans les deux manières de pouvoir trouver magiquement cette fonction : càd soit dans filtre/tenter_unserialize.php, soit dans le options.php donc toujours chargé. Là elle est dans inc/formidable (alors que pas du tout propre à formidable), donc faut forcément que ce fichier soit préchargé pour que charger_fonction la trouve, et si c'est pas le cas bah ça plante. Il faudrait donc la déplacer ailleurs, et remettre bien des charger_fonction partout, ou mieux avec filtrer() (qui gère aussi sans préfixe).

  • @rastapopoulos a évalué le commit 7bb74572bf76412dbbd450c15e5ff6d266b6d8e3 :

    diff --git a/modeles/formulaire_analyse.html b/modeles/formulaire_analyse.html
    --- a/modeles/formulaire_analyse.html
    +++ b/modeles/formulaire_analyse.html
    @@ -1,5 +1,5 @@
     <BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
    -#SET{exclure_champs,#TRAITEMENTS|unserialize|table_valeur{enregistrement}|table_valeur{analyse_exclure_champs}|explode{|}}
    +#SET{exclure_champs,#TRAITEMENTS|tenter_unserialize|table_valeur{enregistrement}|table_valeur{analyse_exclure_champs}|explode{|}}

    Encore plus donc si utilisé réellement en filtre dans les squelettes, là on a pas de possibilité de s'assurer de faire des include php avant, donc ce filtre DOIT vraiment être placé soit dans options soit dans filtre/tenter_unserialize.php.

  • Auteur Maintainer
    1. Pour le encode, oui pourquoi pas, on pourrait appeler cela formidable_serialize vs formidable_unserialize (plutot que tenter_unserialize), et le jour où la question sera tranché côté SPIP, on branche sur la fonction de SPIP
    2. Sur le charger fonction : ah bah oui, il est défini dans inc/formidable, lequel est appelé par formidable_fonctions.php, ce qui explique qu'il marche en squelette, mais pas dans les fichiers PHP liés au processus de crayonnage.
    3. Sur les décalages vers la gauche : chelou, je vais regarder à corriger cela.
  • @maieul a force-pushed 2 révisions : 9a2021ffdd2131f85dafb1a0acbcef4335d947c9 5b8e61fc3620da8945dbe6bfd979dabf33edc7cc

  • @maieul a fait référence à cette PR depuis un commentaire de !98 Pouvoir utiliser des emojis dans les saisies/traitements

  • @maieul a fait référence à cette PR depuis un commentaire de #112 serialize sur saisie corrompu => perte de toutes les saisies

  • @maieul a force-pushed 2 révisions : 5b8e61fc3620da8945dbe6bfd979dabf33edc7cc 0a9022441ad7729672cdd79c8e9966fb3a61596f

  • Auteur Maintainer

    Et donc @rastapopoulos nouvelle version de la PR avec des fonctions classés dans filtre/.

    J'ai mis aussi la fonction filtre_formidable_serialize bien que ce ne soit pas vraiment un filtre, mais c'est par symétrie.

    Sinon on met dans formidable, sans le prefixe filtre. A toi de voir.

  • @maieul a force-pushed 2 révisions : 0a9022441ad7729672cdd79c8e9966fb3a61596f 62612879e581b8da095930c0ba31cf5fbda514aa

  • @maieul a force-pushed 2 révisions : 62612879e581b8da095930c0ba31cf5fbda514aa 81fcf5695a004622400307be14ef2ab4a3c08d44

  • @maieul a force-pushed 2 révisions : 81fcf5695a004622400307be14ef2ab4a3c08d44 1d16f94650d2d062fa0369c3706d583ad83e2928

  • @maieul a force-pushed 2 révisions : 1d16f94650d2d062fa0369c3706d583ad83e2928 8834d5a1ea602a44cefc6c1148a1f0d78152156e

  • @maieul a force-pushed 2 révisions : 8834d5a1ea602a44cefc6c1148a1f0d78152156e 1486680a4217b240a1cd97b6123886f0463854e4

  • @maieul a force-pushed 2 révisions : 1486680a4217b240a1cd97b6123886f0463854e4 731fa1dd

  • @maieul a référencé cette PR depuis une révision Merge branch 'issue_99_jserialize2json'

  • @maieul a fermé cette PR

Veuillez vous inscrire ou vous connecter pour répondre
Chargement en cours