array( 'class' => 'FacteurMail', 'password' => array(), ), 'smtp' => array( 'class' => 'FacteurSMTP', 'password' => array('smtp_password'), ), ); // permettre l'extension via un pipeline $methodes = pipeline( 'facteur_lister_methodes_mailer', array( 'args' => array(), 'data' => $methodes ) ); return $methodes; } /** * Recuperer la config de Facteur, avec eventuelle surcharge * en s'assurant que les meta ont bien ete migrees * * @param array $options * @return array */ function facteur_config($options = array()) { if (!function_exists('lire_config')) { include_spip('inc/config'); } // si jamais les meta sont pas migrees... le faire a l'arrache ! if (empty($GLOBALS['meta']['facteur']) or !@unserialize($GLOBALS['meta']['facteur'])) { include_spip('facteur_administrations'); facteur_migre_metas_to_config(); } $config = lire_config('facteur'); if (!empty($options) and is_array($options)) { $config = array_merge($config, $options); } if ($config['adresse_envoi'] !== 'oui' or !$config['adresse_envoi_email']) { $config = array_merge($config, facteur_config_envoyeur_par_defaut()); } $config['adresses_site'] = array( $GLOBALS['meta']['adresse_site'] . '/', url_de_base(), ); // et on emule la globale facteur_smtp pour les plugins qui s'appuient dessus comme mailshot // @deprecated : ne devrait plus servir $GLOBALS['meta']['facteur_smtp'] = ($config['mailer'] === 'smtp' ? 'oui' : 'non'); return $config; } /** * Generer la config par defaut de l'envoyeur, hors reglage specifique ou surcharge * @return array */ function facteur_config_envoyeur_par_defaut() { $config = array( 'adresse_envoi_email' => '', 'adresse_envoi_nom' => '', ); $config['adresse_envoi_email'] = (isset($GLOBALS['meta']["email_envoi"]) AND $GLOBALS['meta']["email_envoi"]) ? $GLOBALS['meta']["email_envoi"] : $GLOBALS['meta']['email_webmaster']; if (!function_exists('extraire_multi')) { include_spip('inc/filtres'); } $config['adresse_envoi_nom'] = strip_tags(extraire_multi($GLOBALS['meta']['nom_site'])); return $config; } /** * Generer le FacteurXXX selon la config par defaut/passee en options * @param array $options * @return \SPIP\Facteur\FacteurMail * @throws \PHPMailer\PHPMailer\Exception */ function facteur_factory($options = array()) { if (!is_array($options)) { $options = array(); } $options = facteur_config($options); $config_mailer = $options['mailer']; $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); } }