SugarCRM - Synolab

SugarCRM – Comment empêcher une Url d’être préfixé par « http:// » ?

Par Yann B. le 12 octobre 2016

Les champs Url sont généralement voués à faire référence à des sites Web mais il peut arriver aussi que l’on ait à les utiliser dans un but différent : référence à un document partagé sur un réseau, \\partage\répertoire\fichier.pdf accès à un FTP, etc …

Un problème lié au préfixe de l’Url par un protocole

En fonction de notre contexte, un champ de type Url ne présente donc pas forcement une ressource accessible au travers de l’HTTP. De manière standard, Sugar propose de concaténer votre « site Web » avec le protocole HTTP si aucun protocole n’a été renseigné. Afin d’illustrer, il se peut que des utilisateurs soient confrontés à ce genre de situations :

– On renseigne des informations sur un site lambda
Donnée : monsite.com
résultat : http://monsite.com

– On renseigne l’adresse d’un site accessible par HTTPS
Donnée : https://monsite.com
résultat : https://monsite.com

– On renseigne un emplacement réseau accessible par d’autres utilisateurs
Donnée : \\monpartage\répertoire
résultat : http://\\monpartage\répertoire

Aïe ! Il suffit de regarder comment fonctionne le contrôleur du champ pour comprendre ce qui ne va pas dans le cas de figure numéro 3 : clients/base/fields/url/url.js

Ma référence au partage réseau « \\… » ne remplit pas les critères de la regexp contrairement au lien sécurisé qui contient « https://…« . Ma valeur est donc concaténée pour faire référence à de l’HTTP.

Détourner sans casser !

La solution qui a permis de résoudre notre problème c’est de mettre en place un moyen de passer outre la fonction « format » standard lorsqu’on le souhaite.
Première étape, on prépare un paramètre skip_format dans les vardefs de nos champs de type Url qui pourra être interprété par la suite dans notre code :

Nous pouvons maintenant ré-écrire le comportement du format en nous appuyant sur cette valeur afin de « débrayer » cette concaténation seulement quand on en a besoin (quand cela est indiqué par le vardef du champ) : custom/clients/base/fields/url/url.js

C’est aussi simple que cela, de même que cette logique est applicable dans plusieurs situations. Il s’agit là principalement de savoir comment faire un « override » d’un contrôleur JS et d’avoir déjà manipulé des vardefs.

LinkedIn Google+ Email
Yann B.

Développeur backend dans l'âme, je m’intéresse à ce qui touche au PHP, les technologies JS et les frameworks du moment qui façonnent le Web.

GIF