source: spip-zone/_plugins_/facteur/trunk/formulaires/configurer_facteur.php

Last change on this file was 118875, checked in by Cerdic, 15 months ago

Gestion de la config : separer le calcul de l'envoyeur par defaut, mieux gerer la surcharge, et assurer la compat des autres plugins en emulant une meta facteur_smtp (mailshot)

File size: 5.4 KB
Line 
1<?php
2/**
3 * Plugin Facteur 4
4 * (c) 2009-2019 Collectif SPIP
5 * Distribue sous licence GPL
6 *
7 * @package SPIP\Facteur\Formulaires\Configurer_facteur
8 */
9
10if (!defined('_ECRIRE_INC_VERSION')) {
11        return;
12}
13
14function formulaires_configurer_facteur_cles_password_masques() {
15        return array(
16                'smtp_password',
17                'mailjet_secret_key',
18        );
19}
20
21function formulaires_configurer_facteur_charger_dist() {
22
23        include_spip('inc/cvt_configurer');
24
25        $valeurs = cvtconf_formulaires_configurer_recense('configurer_facteur');
26        $valeurs['editable'] = true;
27
28        foreach(formulaires_configurer_facteur_cles_password_masques() as $_key){
29                $valeurs['_'.$_key] = $valeurs[$_key];
30                $valeurs[$_key] = '';
31        }
32
33        // recuperer le from par defaut actuel pour l'indiquer dans le formulaire
34        include_spip('inc/facteur');
35        $from_defaut = facteur_config_envoyeur_par_defaut();
36        $valeurs['_from_defaut'] = $from_defaut['adresse_envoi_email'];
37        $valeurs['_from_defaut_nom'] = '';
38        $valeurs['_from_defaut_email'] = $from_defaut['adresse_envoi_email'];
39        if (!empty($from_defaut['adresse_envoi_nom'])) {
40                $valeurs['_from_defaut'] = $from_defaut['adresse_envoi_nom'] . ' &lt;'.$valeurs['_from_defaut'].'&gt;';
41                $valeurs['_from_defaut_nom'] = $from_defaut['adresse_envoi_nom'];
42        }
43
44        if (defined('_TEST_EMAIL_DEST')) {
45                if (_TEST_EMAIL_DEST) {
46                        $valeurs['_message_warning'] = _T('facteur:info_envois_forces_vers_email', array('email' => _TEST_EMAIL_DEST));
47                }
48                else {
49                        $valeurs['_message_warning'] = _T('facteur:info_envois_bloques_constante');
50                }
51        }
52
53        return $valeurs;
54}
55
56function formulaires_configurer_facteur_verifier_dist() {
57        $erreurs = array();
58        include_spip('inc/config');
59        if ($email = _request('adresse_envoi_email')
60                and !email_valide($email)) {
61                $erreurs['adresse_envoi_email'] = _T('form_email_non_valide');
62                set_request('adresse_envoi', 'oui');
63        }
64        $mailer = _request('mailer');
65        if (function_exists($verifier_mailer = 'formulaires_configurer_facteur_verifier_' . $mailer)) {
66                $verifier_mailer($erreurs);
67        }
68        if ($emailcc = _request('cc')
69                and !email_valide($emailcc)) {
70                $erreurs['cc'] = _T('form_email_non_valide');
71        }
72        if ($emailbcc = _request('bcc')
73                and !email_valide($emailbcc)) {
74                $erreurs['bcc'] = _T('form_email_non_valide');
75        }
76
77        if (count($erreurs) > 0) {
78                $erreurs['message_erreur'] = _T('facteur:erreur_generale');
79        }
80        return $erreurs;
81}
82
83/**
84 * Verifier la configuration du smtp si besoin
85 * @param $erreurs
86 */
87function formulaires_configurer_facteur_verifier_smtp(&$erreurs){
88        if (!($h = _request('smtp_host'))) {
89                $erreurs['smtp_host'] = _T('info_obligatoire');
90        } else {
91                $h = trim($h);
92                $regexp_ip_valide = '#^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$#';
93                // Source : http://www.d-sites.com/2008/10/09/regex-ipv4-et-ipv6/
94                if (!preg_match($regexp_ip_valide, $h)) { // ce n'est pas une IP
95                        if (!preg_match(';^([^.\s/?:]+[.])*[^.\s/?:]+$;', $h)
96                                or gethostbyname($h) == $h) {
97                                $erreurs['smtp_host'] = _T('facteur:erreur_invalid_host');
98                        }
99                } else {
100                        if (gethostbyaddr($h) == $h) {
101                                $erreurs['smtp_host'] = _T('facteur:erreur_invalid_host');
102                        }
103                }
104                set_request('smtp_host', $h);
105        }
106        if (!($p=_request('smtp_port'))) {
107                $erreurs['smtp_port'] = _T('info_obligatoire');
108        } elseif (!preg_match(';^[0-9]+$;', $p) or !intval($p)) {
109                $erreurs['smtp_port'] = _T('facteur:erreur_invalid_port');
110        }
111
112        if (!_request('smtp_auth')) {
113                $erreurs['smtp_auth'] = _T('info_obligatoire');
114        }
115
116        if (_request('smtp_auth')=='oui') {
117                if (!_request('smtp_username')) {
118                        $erreurs['smtp_username'] = _T('info_obligatoire');
119                }
120                if (!_request('smtp_password') and !lire_config('facteur/smtp_password')) {
121                        $erreurs['smtp_password'] = _T('info_obligatoire');
122                }
123        }
124}
125
126function formulaires_configurer_facteur_traiter_dist() {
127        include_spip('inc/config');
128
129        // reinjecter les password pas saisis si besoin
130        $restore_after_save = array();
131        foreach(formulaires_configurer_facteur_cles_password_masques() as $_key){
132                if (!_request($_key)){
133                        $restore_after_save[$_key] = '';
134                        set_request($_key,lire_config('facteur/'.$_key));
135                }
136        }
137
138        include_spip('inc/cvt_configurer');
139        $trace = cvtconf_formulaires_configurer_enregistre('configurer_facteur', array());
140        $res = array(
141                'editable' => true
142        );
143        include_spip('inc/facteur');
144        try {
145                $facteur = facteur_factory(array('exceptions' => true));
146                $facteur->configure();
147                $res['message_ok'] = _T('facteur:config_info_enregistree') . $trace;
148        }
149        catch (Exception $e) {
150                $res['message_erreur'] = $e->getMessage();
151        }
152
153        foreach($restore_after_save as $k=>$v){
154                set_request($k,$v);
155        }
156
157        return $res;
158}
Note: See TracBrowser for help on using the repository browser.