224 lines
6 KiB
PHP
224 lines
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';
|
|
}
|
|
}
|
|
|
|
// pas de mail bidon
|
|
if (!email_valide(_request('email_contact'))) {
|
|
//$erreurs['texte'] = _T('gamucontact:erreur_mail_invalide');
|
|
$erreurs['email_contact'] = _T('gamucontact:erreur_mail_invalide');
|
|
}
|
|
|
|
return $erreurs;
|
|
}
|
|
|
|
function formulaires_gamucontact_traiter_dist($id_auteur = 0, $redirect = '') {
|
|
|
|
$retour = [];
|
|
$set = [];
|
|
|
|
include_spip('classes/facteur');
|
|
$f = charger_fonction('gamucontact', 'inc');
|
|
$saisies = $f();
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
// Enregistrement de l'expéditaur si demandé par la config
|
|
if (lire_config('gamucontact/sauvegarder_contacts')) {
|
|
// Il s'agit d'un visiteur : on va donc l'enregistrer dans la table auteur pour garder son mail.
|
|
// Sauf s'il existe déjà.
|
|
$id_aut = sql_getfetsel(
|
|
'id_auteur',
|
|
'spip_auteurs',
|
|
'email = '.sql_quote($set['email_contact'])
|
|
);
|
|
if (!$id_aut) {
|
|
$nom_auteur = trim($set['nom']);
|
|
if (!$nom_auteur) {
|
|
$nom_auteur = $set['email_contact'];
|
|
}
|
|
$id_aut = sql_insertq(
|
|
'spip_auteurs',
|
|
array(
|
|
'nom' => $nom_auteur,
|
|
'email' => $set['email_contact'],
|
|
'statut' => 'contact'
|
|
)
|
|
);
|
|
}
|
|
$set['id_auteur'] = $id_aut;
|
|
}
|
|
|
|
$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',
|
|
[
|
|
'args' => [
|
|
'table' => 'spip_messages',
|
|
'id_objet' => 0,
|
|
'action' => 'gamucontact_pre_contact',
|
|
],
|
|
'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)) {
|
|
$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 = [
|
|
'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($destinataires, $sujet, $corps, $from, $header);
|
|
|
|
}
|
|
if (intval($id_message) and $test_mail) {
|
|
$retour['message_ok'] = _T('gamucontact:formulaire_bien_envoye');
|
|
}
|
|
|
|
if ($redirect) {
|
|
$retour['redirect'] = $redirect;
|
|
}
|
|
|
|
return $retour;
|
|
}
|