ALLINAPPLI / frenchpostcodes

Other
2 stars 0 forks source link

Expose autocompletion within civiCRM profile #1

Closed larnoult closed 1 week ago

larnoult commented 2 years ago

Thanks for this great add-on! Would be great to be able to expose this field within the profile, so users can autocomplete their adress while completing a form 🙏

wyde22 commented 2 weeks ago

Pour bien comprendre, vous voulez ajouter le champ de calcul de l'adresse dans un profil CiviCRM

Modifier-M-Peter-Parker-‹-dewy2-dev-inoede-symbiodev-xyz-—-WordPress

Champs-de-profil-CiviCRM-Vos-informations-d-inscription-‹-dewy2-dev-inoede-symbiodev-xyz-—-WordPress

allinappliadmin commented 2 weeks ago

oui tout à fait. la question qui se pose c'est si est-ce que ce champ spécial est en mesure ensuite de mettre à jour l'adresse du contact même si les 3 champs impliqués adresse, code postal et ville ne sont pas ajoutés au profil ?

allinappliadmin commented 2 weeks ago

jusqu'à présent nous utilisions du JS pour cacher le bloc adresse et afficher le nouveau champ mais le bloc adresse existait bien dans la page. Les profils fonctionnent différemment si tu vois ce que je veux dire. Les champs 'adresse', 'code postal' et 'ville' sont complètement indépendants, ils n'appartiennent pas à une entité type 'adresse complète'. mais peut-être que ta méthode est fonctionnelle

wyde22 commented 2 weeks ago

j'ai développé une première approche en proposant un champ personnalisé de type text. Ce champ pourra être ajouté dans un profil aisément. Ce champ personnalisé sera encapsulé dans l'extension via un managed

l'idée est de garder au maximum l'existant et essayer de faire fonctionner la recherche d'adresse. J'ai réussi à faire ça :

TEST-–-dewy2-dev-inoede-symbiodev-xyz

ensuite je dois gérer le submit du form via le hook_civicrm_postProcess en récupérant les valeurs du champ pour implémenter le champ rue, ville, pays subdivision, code postal. Voici ce que j'ai dans l'objet form à la soumission du formulaire :

[6]=>
    object(HTML_QuickForm_text)#2480 (9) {
      ["_attributes"]=>
      array(5) {
        ["data-crm-custom"]=>
        string(47) "Champ_codes_postaux_France:Saisie_adresse_input"
        ["maxlength"]=>
        int(255)
        ["name"]=>
        string(9) "custom_47"
        ["type"]=>
        string(4) "text"
        ["value"]=>
        string(96) "Bordeaux / 33000 / Place Marie Brizard / 33, Gironde, Nouvelle-Aquitaine / 416770.3 / 6423213.32"
      }

je vais parser le paramètre ["value"] de cet objet

je te tiens au courant

allinappliadmin commented 2 weeks ago

ah super, ça s'annonce bien ! le nouveau champ texte personnalisé 'auto-complétion d'adresse' sera créé par l'extension lors de l'activation ?

wyde22 commented 2 weeks ago

je fais comme ça dorénavant avec mes extensions civicrm. J'encapsule le maximum de choses dans des managed (SK, FB, profil, listes, champs personnalisés, etc ...)

a l'activation de l'extension et en vidant les caches le champ personnalisé sera à la disposition du projet

allinappliadmin commented 2 weeks ago

ok super, est-il possible lors de l'activation de l'extension de forcer le vidage du cache ? avec une commande de ce genre

$results = civicrm_api4('System', 'flush', [
  'checkPermissions' => TRUE,
]);
wyde22 commented 2 weeks ago

ok super, est-il possible lors de l'activation de l'extension de forcer le vidage du cache ? avec une commande de ce genre

je ne sais pas si c'est possible. Mais je pense qu'Ă  l'activation de l'extension, civicrm vide les caches. A tester

du coup je reviens vers toi pour te partager par écrit ce que j'ai fait. Le but du développement était d'utiliser au maximum l'existant et la logique actuelle de l'extension. j'ai ajouté un champ personnalisé texte dans un ensemble de champ perso. Cet ensemble et ce champ est mis dans un managed pour faciliter le déploiement de ce genre de fonctionnalités.

ensuite on a un champ perso qu'on peut utiliser dans un profil. ce champ possède un identifiant est une caractéristique précise qui se trouve dans le managed. Je dois récupérer les infos de ce champ personnalisé. J'utilise le name du champ perso pour récupérer les données. via du code javascript j'ajoute le bon identifiant sur le champ perso afin que la logique de calcul d'adresse se fasse correctement avec le code existant.

a la soumission du formulaire je récupère l'identifiant du contact en utilisant l'email inscrit dans le profil. Avec cet identifiant je fais une vérification sur les adresses présentes ou non pour le contact. Si il n'y a pas d'adresse j'en créé une de type principale. Si non j'ajoute une nouvelle adresse de type autre.

voici mes questions :

wyde22 commented 2 weeks ago

suite à notre entrevue cet après midi j'ai revu un peu le code.

allinappliadmin commented 1 week ago

peux-tu pousser sur GitHub pour que je puisse tester (si c'est fonctionnel bien sûr) ?

wyde22 commented 1 week ago

@allinappliadmin tout le code est poussé sur la branche suivante : travail-fieldapiban-profile. J'ai enlevé le code qui gérait le traitement au postProcess du formulaire.

donc il faut faire un checkout sur la branche et ensuite vider les caches civicrm afin que le profil puisse ĂŞtre pris en compte par ton CRM

N'hésites pas à revenir vers moi si besoin

allinappliadmin commented 1 week ago

j'ai une erreur à la console que je pense liée à l'extension. ça te parle :

In Utils.php line 23:

  Class "WP_Roles" not found  
allinappliadmin commented 1 week ago

cloné

image

allinappliadmin commented 1 week ago

ça fonctionne bien dans la synthèse du contact

image

allinappliadmin commented 1 week ago

en revanche, ça ne fonctionne pas dans un profil pour une adhésion (https://testwpcivi.appli.in/civicrm/contribute/transact/?reset=1&id=1)

image

wyde22 commented 1 week ago

j'ai une erreur à la console que je pense liée à l'extension. ça te parle :

In Utils.php line 23:

Class "WP_Roles" not found

bizarre je ne fais pas appel Ă  cette classe dans mon code Ă  la ligne 23. Cela doit provenir d'une autre extension ?

allinappliadmin commented 1 week ago

j'ai une erreur à la console que je pense liée à l'extension. ça te parle :

In Utils.php line 23:

Class "WP_Roles" not found

bizarre je ne fais pas appel Ă  cette classe dans mon code Ă  la ligne 23. Cela doit provenir d'une autre extension ?

probablement l'extension de synchronisation groupe/rĂ´le non ?

wyde22 commented 1 week ago

en revanche, ça ne fonctionne pas dans un profil pour une adhésion (https://testwpcivi.appli.in/civicrm/contribute/transact/?reset=1&id=1)

ok je comprends le script js n'est pas chargée sur les pages contribution. Je vais faire le nécessaire et revenir vers toi par la suite

allinappliadmin commented 1 week ago

d'accord. dans ce cas, il faut que le profil soit chargé là où il pourra l'être : event, adhésion, contribution

wyde22 commented 1 week ago

je viens d'apporter une correction pour faire fonctionner le script sur les formulaires de contribution. En fait dans le code il faut ajouter le script js via le hook_civicrm_buildForm et le template smarty via le hook_civicrm_alterContent

allinappliadmin commented 1 week ago

je peux mettre Ă  jour ?

allinappliadmin commented 1 week ago

je l'ai fait - sûrement trop vite. j'ai cette erreur Unable to load template 'file:CRM/postcode_profile.tpl'

allinappliadmin commented 1 week ago
In frenchcodepostaux.php line 143:

  Call to undefined function _frenchcodepostaux_civix_civicrm_themes()  
wyde22 commented 1 week ago

oui c'est bon j'ai revu un peu mon code pour simplifier les appels du script js et du template smarty sur la branche. tu peux refaire un pull stp ?

allinappliadmin commented 1 week ago

oui c'est bon j'ai revu un peu mon code pour simplifier les appels du script js et du template smarty sur la branche. tu peux refaire un pull stp ?

j'ai bien l'erreur spécifiée juste au-dessus

wyde22 commented 1 week ago

est ce que tu peux vider le cache civicrm stp ?

allinappliadmin commented 1 week ago

caches Civi et WP vidés et j'ai toujours l'erreur

wyde22 commented 1 week ago

est ce possible d'avoir les accès à ton site de test stp ?

wyde22 commented 1 week ago

caches Civi et WP vidés et j'ai toujours l'erreur

tu as cette erreur sur la page de contribution ? j'ai revu mon découpage dans le code. est ce que tu peux vérifier stp ?

allinappliadmin commented 1 week ago

c'est vraiment bizarre car j'ai tout nettoyé et supprimer dont le profil et quand je le réinstalle et que j'active l'extension je ne l'ai plus :-/

wyde22 commented 1 week ago

je crois savoir d'ou vient le problème. La version de smarty n'a pas l'air de reconnaître l'appel au template. Il faut je fasse un civix upgrade mais cela ne fonctionne pas. Je te créée un ticket pour ça

allinappliadmin commented 1 week ago

je viens de faire civix upgrade

allinappliadmin commented 1 week ago

ça marche nickel dans le résumé de contact, la page de profil wordpress et l'adhésion en ligne

wyde22 commented 1 week ago

je viens de faire civix upgrade

ça marche nickel dans le résumé de contact, la page de profil wordpress et l'adhésion en ligne

ok j'avais créer une branche spécifique pour cet upgrade. Je regarde les fichiers modifiés et je merge dans master. Je te tiens au courant

allinappliadmin commented 1 week ago

ok merci.

wyde22 commented 1 week ago

tout a été mis sur la branche master. cela à l'air de mieux fonctionner maintenant. J'ai un peu galéré avec la gestion des branches sur le serveur...je te poserais quelques questions à l'occasion afin de bien comprendre comment git fonctionne sur vos machines :)

allinappliadmin commented 1 week ago

c'est moi ou il ne fonctionne plus ? https://testwpcivi.appli.in/wp-admin/admin.php?page=CiviCRM&q=civicrm%2Fcontribute%2Ftransact&reset=1&id=1

image

wyde22 commented 1 week ago

ce formulaire est généré dans civicrm, du coup la structure HTML change un peu et le code js ne retrouve pas ces petits pour ajouter la valeur par défaut.

cependant, avec Guy, on fait autrement quand on veut exposer un formulaire civicrm dans WP. On utilise beaucoup les shortcodes. Le gros avantage de cette pratique est que les urls sont plus lisibles et user friendly. Voici ci dessous un exemple :

Edition-de-mon-profil-–-Base-test-ALL-IN-APPLI-09-26-2024_01_05_PM

les pages shortcodes fonctionnent correctement

je vais quand même voir plus en profondeur ce problème d'utilisation de cette fonctionnalité dans civicrm

allinappliadmin commented 1 week ago

je comprends cet intérêt pour les short codes néanmoins il y a actuellement une majorité de sites sous Drupal 7 et cela ne fonctionnerait pas. Il me semble important que l'extension soit agnostique du point de vue du CMS, surtout avec Standalone en perspective.

wyde22 commented 1 week ago

je comprends cet intérêt pour les short codes néanmoins il y a actuellement une majorité de sites sous Drupal 7 et cela ne fonctionnerait pas. Il me semble important que l'extension soit agnostique du point de vue du CMS, surtout avec Standalone en perspective.

ok je comprends.

dans mon code je souhaitais que l'API BAN fonctionne uniquement sur le front d'un CMS. J'ai enlevé cette condition et maintenant cela fonctionne dans les profils encapsulés dans un shortcode et également via un lien.

pour info je garde encore une condition : je recherche le champ personnalisé encapsulé dans cette extension. Si ce champ n'est pas trouvé l'API BAN ne se lance pas.

Sur la page d'accueil de ce site de test, j'ai mis Ă  ta disposition 3 liens : un lien vers un shortcode contribution, un lien vers un shortcode Ă©dition de profil et un lien vers un formulaire civicrm

A tester plus globalement avec un cms drupal et sur l'instance standalone

allinappliadmin commented 1 week ago

pour info je garde encore une condition : je recherche le champ personnalisé encapsulé dans cette extension. Si ce champ n'est pas trouvé l'API BAN ne se lance pas.

oui c'est tout Ă  fait normal

allinappliadmin commented 1 week ago

je viens de tester c'est sur la testwpcivi, c'est génial

allinappliadmin commented 1 week ago

peux-tu enlever le texte redondant 'entrer une ville ou un code postal'

image

wyde22 commented 1 week ago

ok je viens d'enlever la mention

allinappliadmin commented 1 week ago

merci

wyde22 commented 1 week ago

ma suppression de ma condition a été brutale. Il faut la garder, mais cette fois ci je cherche le champ personnalisé API BAN dans le bon profil. J'ai pu remarquer que le name du profil encapsulé dans l'extension est mis en tant que class css dans le HTML. Je fais une recherche en se basant dessus afin d'appliquer l'effet js API BAN sur les profils.

la modification dans la fiche de synthèse et dans le formulaire d'édition d'un contact fonctionne mieux maintenant

allinappliadmin commented 1 week ago

mes tests sont tous positifs