Feat: ajout du téléphone dans les coordonnées demandées (configurable). Par ailleurs le truc d'un mail par langue est une embuscade si on veut pouvoir utiliser des mails ne correspondant pas à des auteurs du site (ce qu'autorise la conf de Gamucontact ou si on utilise le mail par défaut du site) ...alors comme en plus ça ne change quasi rien pour le destinataire : KISS = on supprime

This commit is contained in:
cy_altern 2023-06-10 14:25:21 +02:00
parent 3c9534e4cf
commit 6ff3231416
8 changed files with 98 additions and 89 deletions

View file

@ -37,7 +37,7 @@ function gamucontact_declarer_tables_objets_sql($tables) {
'nom' => "varchar(255) NOT NULL",
'telephone' => "varchar(55) NOT NULL",
'email_contact' => "varchar(255) NOT NULL",
'type' => "varchar(6) NOT NULL DEFAULT ''",
'type' => "varchar(25) NOT NULL DEFAULT ''",
'date_heure' => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
'date_fin' => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
'rv' => "varchar(3) NOT NULL DEFAULT ''",

View file

@ -10,20 +10,31 @@
#ACTION_FORMULAIRE
<input type='submit' class='btn submit' value='<:bouton_enregistrer:>' style="display:none;"/>
<div class="fieldset">
<fieldset id="destinataires">
<legend>Destinataires</legend>
<legend><:gamucontacts:destinataires:></legend>
<div class="editer_groupe">
#SAISIE{input, liste_id_auteur, label=Destinaires auteurs SPIP, explication=une liste d'id_auteur séparés par des ;}
#SAISIE{textarea, liste_emails, label=Destinaires sans compte auteur, explication=une liste d'emails séparés par des ;, rows=3}
</div>
</fieldset>
<fieldset id="telephone">
<legend><:gamucontacts:telephone:></legend>
<div class="editer_groupe">
#SAISIE{radio, telephone_contact, label=Afficher le champ Numéro de téléphone, data=#ARRAY{oui,Oui, '',Non}}
#SAISIE{radio, telephone_obligatoire, label=Obligatoire ?, data=#ARRAY{oui,Oui, '',Non} }
</div>
</fieldset>
<fieldset id="anti-spam">
<legend>Anti Spams</legend>
<legend><:gamucontacts:antispam:></legend>
<div class="editer_groupe">
#SAISIE{input, nb_lien, defaut=0, label=Nombre maximum de liens autorisés dans un message}
#SAISIE{radio, verif_ip, defaut=oui, data=#ARRAY{oui,Oui,non,Non}, label=Utilisation de l'IP stocké pour détecter un robot spammeur }
#SAISIE{input, temps_verif_ip, defaut=300, label=Durée maximale entre 2 messages provenant de la meme IP}
#SAISIE{input, temps_hash_ip, defaut=24, label=Durée avant hashage de l'IP dans la bdd }
</fieldset>
</div>
</fieldset>
</fieldset>
<input type="hidden" name="_meta_casier" value="gamucontact" />
<p class="boutons">

View file

@ -66,6 +66,7 @@ function formulaires_gamucontact_verifier_dist($id_auteur = 0, $redirect = '') {
$f = charger_fonction('gamucontact', 'inc');
$saisies = $f();
//champs obligatoire
foreach ($saisies as $s) {
if ($s['options']['obligatoire'] === 'oui') {
@ -79,12 +80,13 @@ function formulaires_gamucontact_verifier_dist($id_auteur = 0, $redirect = '') {
function formulaires_gamucontact_traiter_dist($id_auteur = 0, $redirect = '') {
$retour = [];
$set = [];
include_spip('classes/facteur');
$f = charger_fonction('gamucontact', 'inc');
$saisies = $f();
$retour = [];
$set = [];
if (!empty($saisies)) {
foreach ($saisies as $saisie) {
$champ = $saisie['options']['nom'];
@ -109,14 +111,14 @@ function formulaires_gamucontact_traiter_dist($id_auteur = 0, $redirect = '') {
if (count($set) > 0) {
$set = pipeline(
'pre_edition',
array(
'args' => array(
'action' => 'gamucontact_pre_contact',
[
'args' => [
'table' => 'spip_messages',
'id_objet' => 0
),
'id_objet' => 0,
'action' => 'gamucontact_pre_contact',
],
'data' => $set
)
]
);
$id_message = sql_insertq('spip_messages', $set);
}
@ -149,56 +151,34 @@ function formulaires_gamucontact_traiter_dist($id_auteur = 0, $redirect = '') {
}
}
}
$test_mail = true;
$GLOBALS['forcer_lang'] = false;
$langue_defaut = lire_config('langue_site');
include_spip('classes/facteur');
// récupérer les infos de langue des destinataires
$dest_langues = sql_allfetsel('id_auteur, lang, email', 'spip_auteurs', sql_in('email', $destinataires), 'email');
// array avec les langues des destinataires
if (is_array($dest_langues) and count($dest_langues)) {
$langues = array_filter(array_unique(array_column($dest_langues, 'lang')));
}
if(empty($langues)) {
$langues[] = lire_config('langue_site');
}
// trier les destinataires par langue et envoyer un mail par langue
foreach ($langues as $langue) {
$Tdest_langue = [];
foreach ($dest_langues as $dest) {
if ($dest['lang'] == '') {
$dest['lang'] = $langue_defaut;
}
if ($dest['lang'] == $langue) {
$Tdest_langue[] = $dest['email'];
}
}
// pour la langue du site, si pas de destinataire prendre le mail du webmestre
if ($langue === $langue_defaut and !count($dest_langues)) {
if (!count($destinataires)) {
$email_webmaster = lire_config('email_webmaster');
if (strlen($email_webmaster)) {
$Tdest_langue[] = $email_webmaster;
}
} else {
$Tdest_langue = $destinataires;
$destinataires[] = $email_webmaster;
}
}
// envoi du mail dans cette langue
$html = recuperer_fond('modeles/gamucontact_message', ['id_message' => $id_message, 'lang' => $langue]);
$test_mail = true;
if (count($destinataires)) {
$langue_defaut = lire_config('langue_site');
$GLOBALS['forcer_lang'] = false;
include_spip('facteur_fonctions');
// envoi du mail dans la langue par défaut du site
$html = recuperer_fond('modeles/gamucontact_message', ['id_message' => $id_message, 'lang' => $langue_defaut]);
$texte = facteur_mail_html2text($html);
$corps = array(
$corps = [
'html' => $html,
'texte' => $texte,
);
];
$sujet = _request('objet');
// pour ne pas avoir de warning de la fonction envoyer_mail() on doit lui passer un paramètre $from et un $header
$from = '';
$header = 'X-Originating-IP: '.$GLOBALS['ip'];
$envoyer_mail = charger_fonction('envoyer_mail', 'inc');
$test_mail = $envoyer_mail($Tdest_langue, _request('objet'), $corps, '', 'X-Originating-IP: '.$GLOBALS['ip']);
}
$test_mail = $envoyer_mail($destinataires, $sujet, $corps, $from, $header);
}
if (intval($id_message) and $test_mail) {
$retour['message_ok'] = _T('gamucontact:formulaire_bien_envoye');
}

View file

@ -27,6 +27,7 @@ function gamucontact_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(array('maj_tables', array('spip_messages')));
$maj['1.0.5'] = array(array('maj_tables', array('spip_messages')));
$maj['1.0.6'] = array(array('maj_tables', array('spip_messages')));
include_spip('base/upgrade');
@ -43,6 +44,5 @@ function gamucontact_upgrade($nom_meta_base_version, $version_cible) {
**/
function gamucontact_vider_tables($nom_meta_base_version) {
effacer_meta($nom_meta_base_version);
}

View file

@ -4,8 +4,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
function inc_gamucontact_dist(){
return [
$saisies = [
[
'saisie' => 'input',
'options' => array(
@ -25,26 +24,42 @@ function inc_gamucontact_dist(){
'obligatoire' => 'oui',
)
],
[
];
// intégrer ou pas le téléphone selon la config
$telephone_contact = lire_config('gamucontact/telephone_contact');
if ($telephone_contact === 'oui') {
$saisies[] = [
'saisie' => 'input',
'options' => array(
'options' => [
'nom' => 'telephone',
'label' => '<:gamucontact:votre_telephone:>',
'obligatoire' => lire_config('gamucontact/telephone_obligatoire') === 'oui' ? 'oui' : 'non',
]
];
}
$saisies[] = [
'saisie' => 'input',
'options' => [
'nom' => 'objet',
'label' => '<:gamucontact:objet:>',
'obligatoire' => 'oui',
'class' => 'w100'
//'fonction' => 'ma_super_fonction'
)
],
[
]
];
$saisies[] = [
'saisie' => 'textarea',
'options' => array(
'options' => [
'nom' => 'texte',
'label' => '<:gamucontact:message:>',
'obligatoire' => 'oui',
'class' => 'w100',
'rows' => 4
//'fonction' => 'ma_super_fonction'
)
],
]
];
return $saisies;
}

View file

@ -35,6 +35,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
// V
'votre_nom' => 'Your name',
'votre_email' => 'Your email',
'votre_telephone' => 'Your telephone number',
// T
'titre_page_configurer_gamucontact' => 'GamuContact',

View file

@ -35,6 +35,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
// V
'votre_nom' => 'Votre nom',
'votre_email' => 'Votre email',
'votre_telephone' => 'Votre numéro de téléphone',
// T
'titre_page_configurer_gamucontact' => 'GamuContact',

View file

@ -3,7 +3,7 @@
categorie="communication"
version="1.0.6"
etat="test"
compatibilite="[3.2.10;4.1.*]"
compatibilite="[3.2.10;4.2.*]"
logo="./gamucontact-xx.svg"
documentation=""
schema="1.0.6"