diff --git a/phpBB/includes/acp/acp_email.php b/phpBB/includes/acp/acp_email.php index 677cea26b5..9d8657a294 100644 --- a/phpBB/includes/acp/acp_email.php +++ b/phpBB/includes/acp/acp_email.php @@ -227,25 +227,34 @@ class acp_email foreach ($messenger_collection_iterator as $messenger_method) { - if ($messenger_method->get_id() == $used_method || $used_method == NOTIFY_BOTH) + $notify_method = $messenger_method->get_id(); + if ($notify_method == $used_method || $used_method == NOTIFY_BOTH) { $messenger_method->set_use_queue($use_queue); $messenger_method->template($email_template, $used_lang); $messenger_method->subject(html_entity_decode($subject, ENT_COMPAT)); $messenger_method->assign_vars($template_data); - if ($messenger_method->get_id() == NOTIFY_EMAIL) + if ($notify_method == NOTIFY_EMAIL) { for ($j = 0, $list_size = count($email_list[$i]); $j < $list_size; $j++) { $email_row = $email_list[$i][$j]; - $messenger_method->{((count($email_list[$i]) == 1) ? 'to' : 'bcc')}($email_row['email'], $email_row['name']); + if (count($email_list[$i]) == 1) + { + $messenger_method->to($email_row['email'], $email_row['name']); + + } + else + { + $messenger_method->bcc($email_row['email'], $email_row['name']); + } } $messenger_method->anti_abuse_headers($config, $user); $messenger_method->set_mail_priority($priority); } - else if ($messenger_method->get_id() == NOTIFY_JABBER) + else if ($notify_method == NOTIFY_IM) { for ($j = 0, $list_size = count($email_list[$i]); $j < $list_size; $j++) { @@ -254,7 +263,7 @@ class acp_email } } - $errored = !$messenger_method->send(); + $errored = !$messenger_method->send() || $errored; if ($use_queue) { $messenger_method->save_queue(); diff --git a/phpBB/includes/ucp/ucp_resend.php b/phpBB/includes/ucp/ucp_resend.php index ab108bc15d..278c086a8b 100644 --- a/phpBB/includes/ucp/ucp_resend.php +++ b/phpBB/includes/ucp/ucp_resend.php @@ -92,6 +92,7 @@ class ucp_resend trigger_error('NO_GROUP'); } + $board_url = generate_board_url(); $coppa = ($row['group_name'] == 'REGISTERED_COPPA' && $row['group_type'] == GROUP_SPECIAL) ? true : false; $email_method = $phpbb_container->get('messenger.method.email'); @@ -107,7 +108,7 @@ class ucp_resend $email_method->assign_vars([ 'WELCOME_MSG' => html_entity_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename']), ENT_COMPAT), 'USERNAME' => html_entity_decode($user_row['username'], ENT_COMPAT), - 'U_ACTIVATE' => generate_board_url() . "/ucp.$phpEx?mode=activate&u={$user_row['user_id']}&k={$user_row['user_actkey']}", + 'U_ACTIVATE' => $board_url . "/ucp.$phpEx?mode=activate&u={$user_row['user_id']}&k={$user_row['user_actkey']}", ]); if ($coppa) @@ -145,8 +146,8 @@ class ucp_resend $messenger_method->anti_abuse_headers($config, $user); $messenger_method->assign_vars([ 'USERNAME' => html_entity_decode($user_row['username'], ENT_COMPAT), - 'U_USER_DETAILS' => generate_board_url() . "/memberlist.$phpEx?mode=viewprofile&u={$user_row['user_id']}", - 'U_ACTIVATE' => generate_board_url() . "/ucp.$phpEx?mode=activate&u={$user_row['user_id']}&k={$user_row['user_actkey']}", + 'U_USER_DETAILS' => $board_url . "/memberlist.$phpEx?mode=viewprofile&u={$user_row['user_id']}", + 'U_ACTIVATE' => $board_url . "/ucp.$phpEx?mode=activate&u={$user_row['user_id']}&k={$user_row['user_actkey']}", ]); $messenger_method->send(); diff --git a/phpBB/phpbb/messenger/method/base.php b/phpBB/phpbb/messenger/method/base.php index 15fa782d18..46d676013c 100644 --- a/phpBB/phpbb/messenger/method/base.php +++ b/phpBB/phpbb/messenger/method/base.php @@ -117,8 +117,8 @@ abstract class base implements messenger_interface service_collection $twig_extensions_collection, lexer $twig_lexer, user $user, - $phpbb_root_path, - $template_cache_path, + string $phpbb_root_path, + string $template_cache_path, ?manager $ext_manager = null, ?log_interface $log = null ) @@ -154,6 +154,8 @@ abstract class base implements messenger_interface /** * Sets the use of messenger queue flag * + * @param bool $use_queue Flag indicating if cached queue to be used + * * @return void */ public function set_use_queue(bool $use_queue = true): void @@ -426,7 +428,6 @@ abstract class base implements messenger_interface if ($this->use_queue && !empty($this->queue)) { $this->queue->save(); - return; } } diff --git a/phpBB/phpbb/messenger/method/email.php b/phpBB/phpbb/messenger/method/email.php index c33f048fcc..a8927c23e3 100644 --- a/phpBB/phpbb/messenger/method/email.php +++ b/phpBB/phpbb/messenger/method/email.php @@ -110,9 +110,7 @@ class email extends base } /** - * Sets the use of messenger queue flag - * - * @return void + * {@inheritdoc} */ public function set_use_queue(bool $use_queue = true): void { @@ -124,7 +122,7 @@ class email extends base */ public function set_addresses(array $user_row): void { - if (isset($user_row['user_email']) && $user_row['user_email']) + if (!empty($user_row['user_email'])) { $this->to($user_row['user_email'], $user_row['username'] ?: ''); } @@ -295,8 +293,8 @@ class email extends base 'Return-Path' => new Address($this->config['board_email']), 'Sender' => new Address($this->config['board_email']), 'X-MSMail-Priority' => self::PRIORITY_MAP[$this->mail_priority], - 'X-Mailer' => 'phpBB3', - 'X-MimeOLE' => 'phpBB3', + 'X-Mailer' => 'phpBB', + 'X-MimeOLE' => 'phpBB', 'X-phpBB-Origin' => 'phpbb://' . str_replace(['http://', 'https://'], ['', ''], generate_board_url()), ]; @@ -472,6 +470,7 @@ class email extends base $this->email->subject($this->subject); $this->email->text($this->msg); + $break = false; $subject = $this->subject; $msg = $this->msg; $email = $this->email; @@ -479,13 +478,15 @@ class email extends base * Event to send message via external transport * * @event core.notification_message_email + * @var bool break Flag indicating if the function return after hook * @var string subject The message subject * @var string msg The message text * @var string email The Symfony Email object * @since 3.2.4-RC1 - * @changed 4.0.0-a1 Added vars: email. Removed vars: addresses, break + * @changed 4.0.0-a1 Added vars: email. Removed vars: addresses */ $vars = [ + 'break', 'subject', 'msg', 'email', @@ -495,6 +496,11 @@ class email extends base $this->build_headers(); + if ($break) + { + return true; + } + // Send message ... if (!$this->use_queue) { diff --git a/phpBB/phpbb/messenger/method/jabber.php b/phpBB/phpbb/messenger/method/jabber.php index 199adcd65a..b4fab79574 100644 --- a/phpBB/phpbb/messenger/method/jabber.php +++ b/phpBB/phpbb/messenger/method/jabber.php @@ -191,7 +191,7 @@ class jabber extends base */ public function port(int $port = 5222): self { - $this->port = ($port) ? $port : 5222; + $this->port = ($port > 0) ? $port : 5222; // Change port if we use SSL if ($this->port == 5222 && $this->use_ssl) @@ -210,15 +210,15 @@ class jabber extends base */ public function username(string $username = ''): self { - if (strpos($username, '@') === false) - { - $this->username = $username; - } - else + if (str_contains($username, '@')) { $this->jid = explode('@', $username, 2); $this->username = $this->jid[0]; } + else + { + $this->username = $username; + } return $this; } @@ -232,7 +232,7 @@ class jabber extends base */ public function server(string $server = ''): self { - $this->connect_server = ($server) ? $server : 'localhost'; + $this->connect_server = $server ?: 'localhost'; $this->server = $this->jid[1] ?? $this->connect_server; return $this; @@ -407,7 +407,7 @@ class jabber extends base } /** - * {@inheritDoc} + * Resets all the data (address, template file, etc) to default */ public function reset(): void { @@ -663,7 +663,7 @@ class jabber extends base } /** - * Initiates account registration (based on data used for contructor) + * Initiates account registration (based on data used for constructor) * * @return bool|null */ @@ -714,7 +714,7 @@ class jabber extends base */ function response(array $xml): bool { - if (!is_array($xml) || !count($xml)) + if (!count($xml)) { return false; } diff --git a/phpBB/phpbb/notification/method/messenger_base.php b/phpBB/phpbb/notification/method/messenger_base.php index 97994f84af..4aaf01c133 100644 --- a/phpBB/phpbb/notification/method/messenger_base.php +++ b/phpBB/phpbb/notification/method/messenger_base.php @@ -112,7 +112,6 @@ abstract class messenger_base extends \phpbb\notification\method\base continue; } - /** @psalm-suppress InvalidTemplateParam */ $messenger_collection_iterator = $this->messenger->getIterator(); foreach ($messenger_collection_iterator as $messenger_method) { diff --git a/phpBB/phpbb/template/twig/extension.php b/phpBB/phpbb/template/twig/extension.php index fa9fca0705..96a1aa91f1 100644 --- a/phpBB/phpbb/template/twig/extension.php +++ b/phpBB/phpbb/template/twig/extension.php @@ -14,6 +14,9 @@ namespace phpbb\template\twig; use Twig\Error\RuntimeError; +use Twig\Extension\CoreExtension; +use Twig\Extension\EscaperExtension; +use Twig\Runtime\EscaperRuntime; class extension extends \Twig\Extension\AbstractExtension { @@ -164,8 +167,7 @@ class extension extends \Twig\Extension\AbstractExtension // We always include the last element (this was the past design) $end = ($end == -1 || $end === null) ? null : $end + 1; - /** @psalm-suppress UndefinedFunction */ - return twig_slice($env, $item, $start, $end, $preserveKeys); + return CoreExtension::slice($env->getCharset(), $item, $start, $end, $preserveKeys); } /** @@ -214,8 +216,7 @@ class extension extends \Twig\Extension\AbstractExtension { $args = func_get_args(); - /** @psalm-suppress UndefinedFunction */ - return twig_escape_filter($this->environment, call_user_func_array([$this, 'lang'], $args), 'js'); + return $this->environment->getRuntime(EscaperRuntime::class)->escape(call_user_func_array([$this, 'lang'], $args), 'js'); } /**