[spip-dev] crayons distraits

Hello
SPIP permet d'utiliser les tables non déclarées pour BOUCLEr,
et les crayons marchaient jusqu'à peu pour leur édition en ligne.

Il semble que ça ait régressé puisque désormais,
les modifications faites avec les crayons ne sont pas enregistrées lors de leur validation.
L'édition se fait bien, tout à l'air bien, mais l'enregistrement ne se fait pas.

Je ne sais pas si la régression vient d'une évolution de SPIP
(ici SPIP 3.3.0-dev [24422] donc 3.3 mais pas tout jeune)
ou des crayons.
Quelqu'un a t il aussi constaté cela ou a une idée de l'origine de cette impossibilité ?

JLuc

Le code des crayons documente bien cette possibilité : à partir de
https://git.spip.net/spip-contrib-extensions/crayons/src/branch/master/action/crayons_store.php#L254

Pour les objets non déclarés on passe par là :
« // si on a pas reussi on passe par crayons_update() qui fera un update sql brutal »

Sauf que la fonction crayons_update été modifiée il y a 4 mois par
https://git.spip.net/spip-contrib-extensions/crayons/commit/17bb15b9b95fd0b02efea266af6d299da4931a14
(de cerdic) qui impose désormais un appel à objet_modifier_champs ...
et ça casse le traitement des tables non déclarées
ou de certaines tables non déclarées en tout cas.

Heureusement il y a une alternative: les fonctions revision_typobjet et typobjet_revision
https://git.spip.net/spip-contrib-extensions/crayons/src/commit/6533c1af7b87c00f70e0f171787f05c53c64b70b/action/crayons_store.php#L257 et suivantes
C'est étonnant qu'à la fois les fonctions revision_typobjet et typobjet_revision soient gérées (ya un motif ?)
C'est facile à installer pour qui code en php, mais avant c'était 0-code-php pour tous.
On peut en rester là ou vouloir restaurer un accès 0-code aux crayons sur les objets non déclarés...

C'est l'état du truc selon ma compréhension.

JL

Ah sorry, j’ai pas eu du tout l’intention de casser quoi que ce soit.
Si je lis le code, je pense que le bug vient de la modif de la ligne 480
if (is_scalar($id) and count($where)>1)

qui devrait être
if (is_scalar($id) and count($where)>=1)

J’ai ajouté la condition sur count($where) par sécurité, mais du coup j’ai ajouté un bug à cet endroit

Je te laisse vérifier que ça corrige bien ton bug et commit le cas échéant !

Si je lis le code, je pense que le bug vient de la modif de la ligne 480
if (is_scalar($id) and count($where)>1)
qui devrait être
if (is_scalar($id) and count($where)>=1)

Oui ça restaure les crayons 0-code sur (certains) objets non déclarés.
Merci pour ta réactivité !
Je vais commit le fix.
JLuc

Voilà.
J'ai aussi un peu complété https://contrib.spip.net/Crayons-controleurs-et-vues-doc-complementaire
JL