Browse Source

Refactor pour centraliser en un point le listing des methodes mailer disponibles et rendre cela plus facilement extensible

pull/12/head
Cerdic 8 months ago
parent
commit
cbad944edb
  1. 7
      formulaires/configurer_facteur.html
  2. 37
      formulaires/configurer_facteur.php
  3. 53
      inc/facteur.php

7
formulaires/configurer_facteur.html

@ -65,10 +65,11 @@
<div class="editer-groupe">
<div class="editer pleine_largeur editer_mailer [ (#ENV**{erreurs}|table_valeur{mailer}|oui)erreur]">
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{mailer})</span>]
<INCLURE{fond=formulaires/inc-config-facteur-mailer-mail,env} />
<INCLURE{fond=formulaires/inc-config-facteur-mailer-smtp,env} />
<INCLURE{fond=formulaires/inc-config-facteur-mailer-mailjet,env} />
<BOUCLE_mailers(DATA){source table,#REM|formulaires_configurer_facteur_lister_methodes_mailer}>
<INCLURE{fond=formulaires/inc-config-facteur-mailer-#VALEUR,env} />
</BOUCLE_mailers>
</div>
<div class="editer editer_smtp_sender [ (#ENV**{erreurs}|table_valeur{smtp_sender}|oui)erreur]">
<label for="smtp_sender"><:facteur:facteur_smtp_sender:></label>[
<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{smtp_sender})</span>]

37
formulaires/configurer_facteur.php

@ -11,11 +11,34 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_configurer_facteur_cles_password_masques() {
return array(
'smtp_password',
'mailjet_secret_key',
);
/**
* Lister les champs password dont il faut masquer le contenu (le proteger de la lecture via acces au html)
* @return array
*/
function formulaires_configurer_facteur_lister_champs_password_masques() {
$password = [];
include_spip('inc/facteur');
$methodes = facteur_lister_methodes_mailer();
foreach ($methodes as $methode) {
if (!empty($methode['password'])) {
$password = array_merge($password, $methode['password']);
}
}
return $password;
}
/**
* Lister les methodes de mail disponibles
* @param $dummy
* @return int[]|string[]
*/
function formulaires_configurer_facteur_lister_methodes_mailer($dummy=null) {
include_spip('inc/facteur');
$methodes = facteur_lister_methodes_mailer();
return array_keys($methodes);
}
function formulaires_configurer_facteur_charger_dist() {
@ -25,7 +48,7 @@ function formulaires_configurer_facteur_charger_dist() {
$valeurs = cvtconf_formulaires_configurer_recense('configurer_facteur');
$valeurs['editable'] = true;
foreach(formulaires_configurer_facteur_cles_password_masques() as $_key){
foreach(formulaires_configurer_facteur_lister_champs_password_masques() as $_key){
$valeurs['_'.$_key] = $valeurs[$_key];
$valeurs[$_key] = '';
}
@ -128,7 +151,7 @@ function formulaires_configurer_facteur_traiter_dist() {
// reinjecter les password pas saisis si besoin
$restore_after_save = array();
foreach(formulaires_configurer_facteur_cles_password_masques() as $_key){
foreach(formulaires_configurer_facteur_lister_champs_password_masques() as $_key){
if (!_request($_key)){
$restore_after_save[$_key] = '';
set_request($_key,lire_config('facteur/'.$_key));

53
inc/facteur.php

@ -8,6 +8,32 @@
*/
/**
* Lister les methodes mailer disponibles et le nom de la classe a instancier
* @return array[]
*/
function facteur_lister_methodes_mailer() {
$methodes = array(
'mail' => array(
'class' => 'FacteurMail',
'password' => array(),
),
'smtp' => array(
'class' => 'FacteurSMTP',
'password' => array('smtp_password'),
),
'mailjet' => array(
'class' => 'FacteurMailjet',
'password' => array('mailjet_secret_key'),
)
);
// TODO : pipeline extension
return $methodes;
}
/**
* Recuperer la config de Facteur, avec eventuelle surcharge
@ -70,7 +96,6 @@ function facteur_config_envoyeur_par_defaut() {
return $config;
}
/**
* Generer le FacteurXXX selon la config par defaut/passee en options
* @param array $options
@ -85,20 +110,18 @@ function facteur_factory($options = array()) {
$options = facteur_config($options);
$config_mailer = $options['mailer'];
switch ($config_mailer) {
case 'smtp':
include_spip('inc/Facteur/FacteurSMTP');
return new SPIP\Facteur\FacteurSMTP($options);
case 'mailjet':
include_spip('inc/Facteur/FacteurMailjet');
return new SPIP\Facteur\FacteurMailjet($options);
case 'mail':
default:
include_spip('inc/Facteur/FacteurMail');
return new SPIP\Facteur\FacteurMail($options);
$methodes = facteur_lister_methodes_mailer();
if (!empty($methodes[$config_mailer]['class'])
and $FacteurClass = $methodes[$config_mailer]['class']
and include_spip("inc/Facteur/$FacteurClass")
and class_exists($FacteurClass = "SPIP\\Facteur\\{$FacteurClass}")){
return new $FacteurClass($options);
}
else {
spip_log("Impossible de trouver la medthode $config_mailer ou sa classe " . (empty($methodes[$config_mailer]) ? '' : $methodes[$config_mailer]), 'facteur' . _LOG_ERREUR);
// fallback fonction mail()
include_spip('inc/Facteur/FacteurMail');
return new SPIP\Facteur\FacteurMail($options);
}
}
Loading…
Cancel
Save