De mon coté, j’ai creusé un peu afin d’y voir plus clair. Je constate que la fonction getValue dans mapfield semble gérer la rétrocompatibilité. Soit elle trouve un champ geolocation, soit elle cherche un champ carte_google, soit les champs bf_latitude, bf_longitude. Ce qui sort de cette fonction est un tableau standardisé contenant bf_latitude et bf_longitude.
Dans ma démarche pour rajouter la gestion des droits d’accès aux champs de geolocalisation, je souhaite supprimer la duplication des champs enregistrés dans la base : je supprime bf_latitude et bf_longitude de l’entrée pour ne garder que sa version dans le champ geolocation. En effet, la spécification des droits d’accès porte sur geolocation et non les champs séparé.
J’arrive à le faire en modifiant la methode MapField::formatValuesBeforeSaveIfEditable dont je trouve l’algorithme actuel assez bizarre. De manière général j’ai du mal à comprendre l’utilisation de cette fonction sachant que pour la classe mère BazarField elle ne fait rien et renvoie formatValuesBeforeSave. Quel est le propos de cette fonction formatValuesBeforeSaveIfEditable ? Dans mon esprit cette fonction devrait être instanciée dans la classe mère BazarField avec le test CanEdit.
Dans les commentaires on trouve : // this method is defined to check $this->canEdit with $isCreation
// without changing signature of formatValuesBeforeSave()
En quoi est il gênant de changer la signature ?