From 49254a8307f80cfe3ebd165ca556c3acb893b7c6 Mon Sep 17 00:00:00 2001 From: nupplaPhil Date: Sun, 26 Jan 2020 20:23:58 +0100 Subject: [PATCH] Introduce interface for emailing and create email classes --- notifyall/NotifyAllEMail.php | 40 ++++++++++++++++++++++++++++++++++ notifyall/notifyall.php | 37 ++++++++----------------------- securemail/SecureTestEMail.php | 40 ++++++++++++++++++++++++++++++++++ securemail/securemail.php | 23 ++----------------- 4 files changed, 91 insertions(+), 49 deletions(-) create mode 100644 notifyall/NotifyAllEMail.php create mode 100644 securemail/SecureTestEMail.php diff --git a/notifyall/NotifyAllEMail.php b/notifyall/NotifyAllEMail.php new file mode 100644 index 00000000..eeca4faf --- /dev/null +++ b/notifyall/NotifyAllEMail.php @@ -0,0 +1,40 @@ +get('config', 'sitename'); + + if (empty($config->get('config', 'admin_name'))) { + $sender_name = '"' . $l10n->t('%s Administrator', $sitename) . '"'; + } else { + $sender_name = '"' . $l10n->t('%1$s, %2$s Administrator', $config->get('config', 'admin_name'), $sitename) . '"'; + } + + if (!$config->get('config', 'sender_email')) { + $sender_email = 'noreply@' . $baseUrl->getHostname(); + } else { + $sender_email = $config->get('config', 'sender_email'); + } + + $subject = $_REQUEST['subject']; + + $textversion = strip_tags(html_entity_decode(BBCode::convert(stripslashes(str_replace(["\\r", "\\n"], ["", "\n"], $text))), ENT_QUOTES, 'UTF-8')); + + $htmlversion = BBCode::convert(stripslashes(str_replace(["\\r", "\\n"], ["", "
\n"], $text))); + + parent::__construct($sender_name, $sender_email, $sender_email, '', $subject, $htmlversion, $textversion); + } +} diff --git a/notifyall/notifyall.php b/notifyall/notifyall.php index 2190a9d1..c2391fcc 100644 --- a/notifyall/notifyall.php +++ b/notifyall/notifyall.php @@ -8,12 +8,12 @@ * Author: Rabuzarus (Port to Friendica) */ +use Friendica\Addon\notifyall\NotifyAllEMail; use Friendica\App; -use Friendica\Content\Text\BBCode; +use Friendica\Database\DBA; use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; -use Friendica\Util\Emailer; function notifyall_install() { @@ -45,27 +45,6 @@ function notifyall_post(App $a) return; } - $sitename = DI::config()->get('config', 'sitename'); - - if (empty(DI::config()->get('config', 'admin_name'))) { - $sender_name = '"' . DI::l10n()->t('%s Administrator', $sitename) . '"'; - } else { - $sender_name = '"' . DI::l10n()->t('%1$s, %2$s Administrator', DI::config()->get('config', 'admin_name'), $sitename) . '"'; - } - - if (!DI::config()->get('config', 'sender_email')) { - $sender_email = 'noreply@' . DI::baseUrl()->getHostname(); - } else { - $sender_email = DI::config()->get('config', 'sender_email'); - } - - $subject = $_REQUEST['subject']; - - - $textversion = strip_tags(html_entity_decode(BBCode::convert(stripslashes(str_replace(["\\r", "\\n"], ["", "\n"], $text))), ENT_QUOTES, 'UTF-8')); - - $htmlversion = BBCode::convert(stripslashes(str_replace(["\\r", "\\n"], ["", "
\n"], $text))); - // if this is a test, send it only to the admin(s) // admin_email might be a comma separated list, but we need "a@b','c@d','e@f if (intval($_REQUEST['test'])) { @@ -74,15 +53,17 @@ function notifyall_post(App $a) } $sql_extra = ((intval($_REQUEST['test'])) ? sprintf(" AND `email` in ( %s )", $email) : ''); - $recips = q("SELECT DISTINCT `email` FROM `user` WHERE `verified` AND NOT `account_removed` AND NOT `account_expired` $sql_extra"); + $recipients = DBA::p("SELECT DISTINCT `email` FROM `user` WHERE `verified` AND NOT `account_removed` AND NOT `account_expired` $sql_extra"); - if (! $recips) { + if (! $recipients) { notice(DI::l10n()->t('No recipients found.') . EOL); return; } - foreach ($recips as $recip) { - DI::emailer()->send($sender_name, $sender_email, $sender_email, $recip['email'], $subject, $htmlversion, $textversion); + $notifyEmail = new NotifyAllEMail(DI::l10n(), DI::config(), DI::baseUrl(), $text); + + foreach ($recipients as $recipient) { + DI::emailer()->send($notifyEmail->withRecipient($recipient['email'])); } notice(DI::l10n()->t('Emails sent')); @@ -92,7 +73,7 @@ function notifyall_post(App $a) function notifyall_content(&$a) { if (! is_site_admin()) { - return; + return ''; } $title = DI::l10n()->t('Send email to all members of this Friendica instance.'); diff --git a/securemail/SecureTestEMail.php b/securemail/SecureTestEMail.php new file mode 100644 index 00000000..d7f9a296 --- /dev/null +++ b/securemail/SecureTestEMail.php @@ -0,0 +1,40 @@ +get('config', 'sitename'); + + $hostname = $baseUrl->getHostname(); + if (strpos($hostname, ':')) { + $hostname = substr($hostname, 0, strpos($hostname, ':')); + } + + $sender_email = $config->get('config', 'sender_email'); + if (empty($sender_email)) { + $sender_email = 'noreply@' . $hostname; + } + + $subject = 'Friendica - Secure Mail - Test'; + $message = 'This is a test message from your Friendica Secure Mail addon.'; + + // enable addon for test + $pConfig->set(local_user(), 'securemail', 'enable', 1); + + parent::__construct($sitename, $sender_email, $sender_email, $a->user['email'], + $subject, "

{$message}

", $message, + '', local_user()); + } +} diff --git a/securemail/securemail.php b/securemail/securemail.php index 1f7cd768..e25e9669 100644 --- a/securemail/securemail.php +++ b/securemail/securemail.php @@ -6,12 +6,12 @@ * Author: Fabio Comuni */ +use Friendica\Addon\securemail\SecureTestEMail; use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; -use Friendica\Util\Emailer; require_once __DIR__ . '/vendor/autoload.php'; @@ -88,27 +88,8 @@ function securemail_settings_post(App &$a, array &$b) info(DI::l10n()->t('Secure Mail Settings saved.') . EOL); if ($_POST['securemail-submit'] == DI::l10n()->t('Save and send test')) { - $sitename = DI::config()->get('config', 'sitename'); - $hostname = DI::baseUrl()->getHostname(); - if (strpos($hostname, ':')) { - $hostname = substr($hostname, 0, strpos($hostname, ':')); - } - - $sender_email = DI::config()->get('config', 'sender_email'); - if (empty($sender_email)) { - $sender_email = 'noreply@' . $hostname; - } - - $subject = 'Friendica - Secure Mail - Test'; - $message = 'This is a test message from your Friendica Secure Mail addon.'; - - // enable addon for test - DI::pConfig()->set(local_user(), 'securemail', 'enable', 1); - - $res = DI::emailer()->send($sitename, $sender_email, $sender_email, - $a->user['email'], $subject, "

{$message}

", $message, - '', local_user()); + $res = DI::emailer()->send(new SecureTestEMail(DI::app(), DI::config(), DI::pConfig(), DI::baseUrl())); // revert to saved value DI::pConfig()->set(local_user(), 'securemail', 'enable', $enable);