gamuContact/formulaires/gamucontact.php

207 lines
5.6 KiB
PHP

<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_gamucontact_saisies_dist($id_auteur = 0, $redirect = '') {
$f = charger_fonction('gamucontact', 'inc');
$saisies = $f();
return $saisies;
}
function formulaires_gamucontact_charger_dist($id_auteur = 0, $redirect = '') {
$valeurs = [];
$valeurs['_nospam_encrypt'] = true;
return $valeurs;
}
function formulaires_gamucontact_verifier_dist($id_auteur = 0, $redirect = '') {
$erreurs = array();
if (_request('nobot')) {
$erreurs['nobot'] = _T('contact:message_erreur_robot');
}
include_spip('inc/texte');
// si nospam est present on traite les spams
if (include_spip('inc/nospam')) {
$texte = _request('texte');
$caracteres = nospam_compter_caracteres_utiles($texte);
// moins de 10 caracteres sans les liens = spam !
if ($caracteres < 10){
$erreurs['texte'] = _T('forum_attention_dix_caracteres');
}
// on analyse le sujet
$sujet = _request('objet');
$infos_sujet = nospam_analyser_spams($sujet);
// si un lien dans le sujet = spam !
if ($infos_sujet['nombre_liens'] > 0)
$erreurs['objet'] = _T('nospam:erreur_spam');
// on analyse le texte
$infos_texte = nospam_analyser_spams($texte);
if ($infos_texte['nombre_liens'] > 0) {
// si un lien a un titre de moins de 3 caracteres = spam !
if ($infos_texte['caracteres_texte_lien_min'] < 3) {
$erreurs['texte'] = _T('nospam:erreur_spam');
}
// si le texte contient plus de trois lien = spam !
$nb_lien = lire_config('gamucontact/nb_lien');
$nb_lien = intval($nb_lien);
if ($infos_texte['nombre_liens'] > $nb_lien) {
$erreurs['texte'] = _T('nospam:erreur_spam');
}
}
}
if (count($erreurs)) {
return $erreurs;
}
$f = charger_fonction('gamucontact', 'inc');
$saisies = $f();
//champs obligatoire
foreach ($saisies as $s) {
if ($s['options']['obligatoire'] === 'oui') {
$name = $s['options']['nom'];
if (!_request($name)) $erreurs[$name] = 'Ce champs est obligatoire';
}
}
return $erreurs;
}
function formulaires_gamucontact_traiter_dist($id_auteur = 0, $redirect = '') {
include_spip('classes/facteur');
$f = charger_fonction('gamucontact', 'inc');
$saisies = $f();
$retour = [];
$set = [];
if (!empty($saisies)) {
foreach ($saisies as $saisie) {
$champ = $saisie['options']['nom'];
if (
isset($saisies['options']['fonction'])
and $f = $saisies['options']['fonction']
) {
$f($id_auteur, $champ, _request($champ));
} elseif (
isset($saisies['options']['modifier'])
and $m = $saisies['options']['modifier']
) {
$set[$champ] = $m($champ, _request($champ));
} else {
$set[$champ] = _request($champ);
}
}
$set['date_heure'] = date("Y-m-d H:i:s");
$set['statut'] = 'publie';
$set['titre'] = _T('gamucontact:formulaire_contact');
if (count($set) > 0) {
$set = pipeline(
'pre_edition',
array(
'args' => array(
'action' => 'gamucontact_pre_contact',
'table' => 'spip_messages',
'id_objet' => 0
),
'data' => $set
)
);
$id_message = sql_insertq('spip_messages', $set);
}
}
$destinataires = [];
if (intval($id_auteur)) {
$email = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($id_auteur));
if ($email) {
$destinataires[] = $email;
}
}
$liste_emails = lire_config('gamucontact/liste_emails');
if (strlen($liste_emails)) {
$Tliste_emails = explode(';', $liste_emails);
if (is_array($Tliste_emails) and count($Tliste_emails)) {
$destinataires = array_merge($Tliste_emails, $destinataires);
}
}
$liste_id_auteur = lire_config('gamucontact/liste_id_auteur');
if (strlen($liste_id_auteur)) {
$Tliste_id_auteur = explode(';', $liste_id_auteur);
if (is_array($Tliste_id_auteur) and count($Tliste_id_auteur)) {
$t = sql_allfetsel('email', 'spip_auteurs', sql_in('id_auteur', $Tliste_id_auteur));
if(!empty($t)) {
$t = array_column($t, 'email');
$destinataires = array_merge($t, $destinataires);
}
}
}
if (!count($destinataires)) {
$email_webmaster = lire_config('email_webmaster');
if (strlen($email_webmaster)) {
$destinataires[] = $email_webmaster;
}
}
$test_mail = true;
if (count($destinataires)) {
$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')));
} else {
$langues[] = lire_config('langue_site');
}
if (!empty($langues)) {
// 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'];
}
// envoi du mail dans cette langue
$html = recuperer_fond('modeles/gamucontact_message', ['id_message' => $id_message, 'lang' => $langue]);
$texte = facteur_mail_html2text($html);
$corps = array(
'html' => $html,
'texte' => $texte,
);
$envoyer_mail = charger_fonction('envoyer_mail', 'inc');
$test_mail = $envoyer_mail($Tdest_langue, _request('objet'), $corps, '', 'X-Originating-IP: '.$GLOBALS['ip']);
}
}
}
if (intval($id_message) and $test_mail) {
$retour['message_ok'] = _T('gamucontact:formulaire_bien_envoye');
}
if ($redirect) {
$retour['redirect'] = $redirect;
}
return $retour;
}