Email : variable de substitution contacts

Salut tout le monde,

depuis quelques jours il y a ds posts autour des variables de substituions dans les modèles d’email.

En m’y intéressant un peu, j’ai regardé le code, et j’ai une question quant aux variables de substitution concernant le contact lié à une facture par exemple: (en V9.0.3)

dans d’anciennes versions de dolibarr, il y avait CONTACTCIVNAME qui ramenait titre + nom+prénom.
Mais cette variable a été supprimée car elle est codée pour retourner une valeur vide :

dolibarr-9.0.3\htdocs\core\tpl\card_presend.tpl.php line 204

$substitutionarray['__CONTACTCIVNAME__'] = '';

Ça semble être remplacé par un autre traitement, dont je ne comprends pas le fonctionnement.

dolibarr-9.0.3\htdocs\core\tpl\card_presend.tpl.php line 210

[code]
// Find the good contact adress
$custcontact = ‹  ›;
$contactarr = array();
$contactarr = $object->liste_contact(- 1, ‹ external ›);

if (is_array($contactarr) && count($contactarr) > 0) {
	require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
    $contactstatic = new Contact($db);

	foreach ($contactarr as $contact) {
        $contactstatic->fetch($contact['id']);
        $substitutionarray[' _NAME_'.$contact['code'].'__'] = $contactstatic->getFullName($langs, 1);
	}
}[/code]

quelqu’un peut éclairer mes lanternes ?

Bonjour :happy:
Il s’agit d’une liste de contact il me semble
du type :

 _NAME_xxx__

qui renverra le nom complet

ok, mais tu mets quoi à la place des XXX ?

Bah ca :laugh: :laugh:
effectivement a lire la fonction fetch () code n’est pas défini :unsure: :unsure:

c’est dans liste_contact
code du contact

$sql = "SELECT ec.rowid, ec.statut as statuslink, ec.fk_socpeople as id, ec.fk_c_type_contact";    // This field contains id of llx_socpeople or id of llx_user
     if ($source == 'internal') $sql.=", '-1' as socid, t.statut as statuscontact, t.login, t.photo";
     if ($source == 'external' || $source == 'thirdparty') $sql.=", t.fk_soc as socid, t.statut as statuscontact";
     $sql.= ", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
     $sql.= ", tc.source, tc.element, tc.code, tc.libelle";
     $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact tc";
     $sql.= ", ".MAIN_DB_PREFIX."element_contact ec";
     if ($source == 'internal') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."user t on ec.fk_socpeople = t.rowid";
     if ($source == 'external'|| $source == 'thirdparty') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."socpeople t on ec.fk_socpeople = t.rowid";
     $sql.= " WHERE ec.element_id =".$this->id;
     $sql.= " AND ec.fk_c_type_contact=tc.rowid";
     $sql.= " AND tc.element='".$this->db->escape($this->element)."'";
     if ($code) $sql.= " AND tc.code = '".$this->db->escape($code)."'";
     if ($source == 'internal') $sql.= " AND tc.source = 'internal'";
     if ($source == 'external' || $source == 'thirdparty') $sql.= " AND tc.source = 'external'";
     $sql.= " AND tc.active=1";
     if ($statut >= 0) $sql.= " AND ec.statut = '".$statut."'";
     $sql.=" ORDER BY t.lastname ASC";

xxx= BILLING ou SERVICE etc

ACTOR
AUTHOR
BILLING
CUSTOMER
FACTORYRESP
GUEST
INTERREPFOLL
INTERVENING
PROJECTCONTRIBUTOR
PROJECTLEADER
SALESREPFOLL
SALESREPSIGN
SERVICE
SHIPPING
TASKCONTRIBUTOR
TASKEXECUTIVE
THIRDINCHARGE
USERINCHARGE
WAREHOUSERESP

ok, c’est bien ce que j’avais compris aussi.
Maintenant on est au même point lol

mais j’ai essayé toutes les combinaisons et ça ne donne rien (la variable reste en clair lors de l’émission de l’email, sans être remplacée ni par une valeur existante ni par une valeur vide)

Ce qui me chagrine aussi c’est l’unique underscore avant _NAME … c’est pas logique par rapport au reste.

Ce sont les valeurs définies dans llx_c_type_contact que l’on retrouve depuis la page admin/dict.php?id=11

Exact c’est bizarre la syntaxe :dry:

CONTACT_NAME_xxx

1 « J'aime »

Bingo, merci !
Je mets à jour le wiki.

1 « J'aime »

:sunglasses:
Mais je me demande si il n’y a pas des disparités entre odt, emails etc :evil:
Je l’ai trouvé dans htdocs/core/tpl/card_presend.tpl.php