diff --git a/phpBB/config/default/container/services_messenger.yml b/phpBB/config/default/container/services_messenger.yml index ff7df470c4..c28789f6c5 100644 --- a/phpBB/config/default/container/services_messenger.yml +++ b/phpBB/config/default/container/services_messenger.yml @@ -25,6 +25,7 @@ services: - '@template.twig.extensions.collection' - '@template.twig.lexer' - '%core.template.cache_path%' + - '%core.php_ext%' messenger.method.email: class: phpbb\messenger\method\phpbb_email diff --git a/phpBB/phpbb/message/message.php b/phpBB/phpbb/message/message.php index 2a750c1f21..0fed6fb7a5 100644 --- a/phpBB/phpbb/message/message.php +++ b/phpBB/phpbb/message/message.php @@ -245,6 +245,7 @@ class message foreach ($this->recipients as $recipient) { + /** @psalm-suppress InvalidTemplateParam */ $messenger_collection_iterator = $messenger->getIterator(); while ($messenger_collection_iterator->valid()) { diff --git a/phpBB/phpbb/messenger/method/base.php b/phpBB/phpbb/messenger/method/base.php index 4dfbff4559..8bf7b0cee3 100644 --- a/phpBB/phpbb/messenger/method/base.php +++ b/phpBB/phpbb/messenger/method/base.php @@ -22,7 +22,6 @@ use phpbb\log\log_interface; use phpbb\path_helper; use phpbb\request\request; use phpbb\messenger\queue; -use phpbb\template\template; use phpbb\template\twig\lexer; use phpbb\user; @@ -58,13 +57,16 @@ abstract class base /** @var path_helper */ protected $path_helper; + /** @var string */ + protected $root_path; + /** @var request */ protected $request; /** @var string */ protected $subject = ''; - /** @var template */ + /** @var \phpbb\template\template */ protected $template; /** @var string */ @@ -97,6 +99,7 @@ abstract class base * @param service_collection $twig_extensions_collection * @param lexer $twig_lexer * @param string $template_cache_path + * @param string $phpbb_root_path */ function __construct( config $config, @@ -110,7 +113,8 @@ abstract class base manager $ext_manager, service_collection $twig_extensions_collection, lexer $twig_lexer, - $template_cache_path + $template_cache_path, + $phpbb_root_path ) { $this->config = $config; @@ -125,6 +129,7 @@ abstract class base $this->twig_extensions_collection = $twig_extensions_collection; $this->twig_lexer = $twig_lexer; $this->template_cache_path = $template_cache_path; + $this->root_path = $phpbb_root_path; $this->set_use_queue(); } @@ -135,6 +140,12 @@ abstract class base */ abstract public function get_id(); + /** + * Check if the messenger method is enabled + * @return bool + */ + abstract public function is_enabled(); + /** * Sets the use of messenger queue flag * @@ -360,8 +371,8 @@ abstract class base * Event to modify the template before parsing * * @event core.modify_notification_template - * @var string subject The message subject - * @var template template The (readonly) template object + * @var string subject The message subject + * @var string template The (readonly) template object * @since 3.2.4-RC1 * @changed 4.0.0-a1 Removed vars: method, break. */ @@ -375,8 +386,8 @@ abstract class base * Event to modify notification message text after parsing * * @event core.modify_notification_message - * @var string message The message text - * @var string subject The message subject + * @var string message The message text + * @var string subject The message subject * @since 3.1.11-RC1 * @changed 4.0.0-a1 Removed vars: method, break. */ @@ -455,7 +466,7 @@ abstract class base */ protected function setup_template() { - if (isset($this->template) && $this->template instanceof template) + if (isset($this->template) && $this->template instanceof \phpbb\template\template) { return; } @@ -487,8 +498,8 @@ abstract class base /** * Set template paths to load * - * @param string $path_name Email template path name - * @param string $paths Email template paths + * @param string|array $path_name Email template path name + * @param string|array $paths Email template paths * @return void */ protected function set_template_paths($path_name, $paths) diff --git a/phpBB/phpbb/messenger/method/phpbb_email.php b/phpBB/phpbb/messenger/method/phpbb_email.php index 768ba27b45..98d7497e70 100644 --- a/phpBB/phpbb/messenger/method/phpbb_email.php +++ b/phpBB/phpbb/messenger/method/phpbb_email.php @@ -17,7 +17,13 @@ use Symfony\Component\Mailer\Transport; use Symfony\Component\Mailer\Mailer; use Symfony\Component\Mime\Address; use Symfony\Component\Mime\Email; +use Symfony\Component\Mime\Header\DateHeader; use Symfony\Component\Mime\Header\Headers; +use Symfony\Component\Mime\Header\IdentificationHeader; +use Symfony\Component\Mime\Header\MailboxHeader; +use Symfony\Component\Mime\Header\MailboxListHeader; +use Symfony\Component\Mime\Header\PathHeader; +use Symfony\Component\Mime\Header\UnstructuredHeader; /** * Messenger class @@ -55,7 +61,10 @@ class phpbb_email extends base */ protected $dsn = ''; - /** @var string */ + /** @var Email */ + protected $email; + + /** @var Address */ protected $from; /** @var Headers */ @@ -73,13 +82,13 @@ class phpbb_email extends base */ protected $mail_priority = Email::PRIORITY_NORMAL; - /** @var queue */ + /** @var \phpbb\messenger\queue */ protected $queue; - /** @var string */ - protected $replyto = ''; + /** @var Address */ + protected $replyto; - /** @var Transport */ + /** @var \Symfony\Component\Mailer\Transport\AbstractTransport */ protected $transport; /** @@ -99,8 +108,7 @@ class phpbb_email extends base } /** - * Check if the messenger method is enabled - * @return void + * {@inheritDoc} */ public function is_enabled() { @@ -114,13 +122,12 @@ class phpbb_email extends base { $this->email = new Email(); $this->headers = $this->email->getHeaders(); - $this->msg = $this->replyto = $this->from = ''; + $this->subject = $this->msg = ''; $this->mail_priority = Email::PRIORITY_NORMAL; - $this->subject = $this->additional_headers = []; - $this->msg = ''; + $this->additional_headers = []; $this->use_queue = true; - unset($this->template); + unset($this->template, $this->replyto, $this->from); } /** @@ -180,7 +187,7 @@ class phpbb_email extends base } $cc = new Address($address, trim($realname)); - $this->email->getCc() ? $this->email->addCc($to) : $this->email->cc($to); + $this->email->getCc() ? $this->email->addCc($cc) : $this->email->cc($cc); } /** @@ -198,7 +205,7 @@ class phpbb_email extends base } $bcc = new Address($address, trim($realname)); - $this->email->getBcc() ? $this->email->addBcc($to) : $this->email->bcc($to); + $this->email->getBcc() ? $this->email->addBcc($bcc) : $this->email->bcc($bcc); } /** @@ -397,7 +404,7 @@ class phpbb_email extends base /** * Get Symfony Mailer transport DSN * - * @return void + * @return string */ public function get_dsn() { @@ -418,7 +425,7 @@ class phpbb_email extends base $this->transport = Transport::fromDsn($this->dsn); - if ($this->config['smtp_delivery'] && !in_array($this->dsn, ['null://null', 'sendmail://default'])) + if ($this->config['smtp_delivery'] && method_exists($this->transport, 'getStream')) { // Set ssl context options, see http://php.net/manual/en/context.ssl.php $options['ssl'] = [ @@ -460,8 +467,8 @@ class phpbb_email extends base * Event to send message via external transport * * @event core.notification_message_process - * @var bool break Flag indicating if the function return after hook - * @var Email email The Symfony Email object + * @var string break Flag indicating if the function return after hook + * @var string email The Symfony Email object * @since 3.2.4-RC1 * @changed 4.0.0-a1 Added vars: email. Removed vars: addresses, subject, msg. */ @@ -477,25 +484,25 @@ class phpbb_email extends base { $mailer->send($email); } - catch (TransportExceptionInterface $e) + catch (\Symfony\Component\Mailer\Exception\TransportExceptionInterface $e) { - $this->error('EMAIL', $e->getDebug()); + $this->error($e->getDebug()); continue; } } } // No more data for this object? Unset it - if (!count($this->queue_data[$queue_object_name]['data'])) + if (!count($queue_data[$queue_object_name]['data'])) { - unset($this->queue_data[$queue_object_name]); + unset($queue_data[$queue_object_name]); } } /** * Get mailer transport object * - * @return Transport Symfony Mailer transport object + * @return \Symfony\Component\Mailer\Transport\TransportInterface Symfony Mailer transport object */ public function get_transport() { @@ -526,7 +533,7 @@ class phpbb_email extends base * @event core.notification_message_email * @var string subject The message subject * @var string msg The message text - * @var Email email The Symfony Email object + * @var string email The Symfony Email object * @since 3.2.4-RC1 * @changed 4.0.0-a1 Added vars: email. Removed vars: addresses, break */ @@ -567,7 +574,7 @@ class phpbb_email extends base * Modify data before sending out emails with PHP's mail function * * @event core.phpbb_mail_before - * @var Email email The Symfony Email object + * @var string email The Symfony Email object * @var string subject The message subject * @var string msg The message text * @var string headers The email headers @@ -591,7 +598,7 @@ class phpbb_email extends base { $mailer->send($this->email); } - catch (TransportExceptionInterface $e) + catch (\Symfony\Component\Mailer\Exception\TransportExceptionInterface $e) { $this->error($e->getDebug()); return false; @@ -601,7 +608,7 @@ class phpbb_email extends base * Execute code after sending out emails with PHP's mail function * * @event core.phpbb_mail_after - * @var Email email The Symfony Email object + * @var string email The Symfony Email object * @var string subject The message subject * @var string msg The message text * @var string headers The email headers diff --git a/phpBB/phpbb/messenger/method/phpbb_jabber.php b/phpBB/phpbb/messenger/method/phpbb_jabber.php index 874f28d06a..1bf212a25f 100644 --- a/phpBB/phpbb/messenger/method/phpbb_jabber.php +++ b/phpBB/phpbb/messenger/method/phpbb_jabber.php @@ -29,7 +29,7 @@ class phpbb_jabber extends base /** @var string */ protected $connect_server; - /** @var resource */ + /** @var resource|null */ protected $connection = null; /** @var bool */ @@ -47,7 +47,7 @@ class phpbb_jabber extends base /** @var string */ protected $password; - /** @var string */ + /** @var int */ protected $port; /** @var string */ @@ -127,8 +127,7 @@ class phpbb_jabber extends base } /** - * Check if the messenger method is enabled - * @return void + * {@inheritDoc} */ public function is_enabled() { @@ -187,10 +186,10 @@ class phpbb_jabber extends base * Set port to connect to server * use_ssl flag should be set first * - * @param string $port Port to connect to server + * @param int $port Port to connect to server * @return $this */ - public function port($port = '') + public function port($port = 5222) { $this->port = ($port) ? $port : 5222; @@ -334,6 +333,7 @@ class phpbb_jabber extends base } $this->session = []; + /** @psalm-suppress InvalidPropertyAssignmentValue */ return fclose($this->connection); } @@ -352,7 +352,7 @@ class phpbb_jabber extends base /** * Initiates login (using data from contructor, after calling connect()) * - * @return bool + * @return bool|void */ public function login() { @@ -401,11 +401,8 @@ class phpbb_jabber extends base */ public function reset() { - $this->msg = ''; - $this->to = []; - - $this->subject = $this->additional_headers = []; - $this->msg = ''; + $this->subject = $this->msg = ''; + $this->additional_headers = $this->to = []; $this->use_queue = true; unset($this->template); } @@ -438,7 +435,6 @@ class phpbb_jabber extends base $package_size = $queue_data[$queue_object_name]['package_size'] ?? 0; $num_items = (!$package_size || $messages_count < $package_size) ? $messages_count : $package_size; - $mailer = new Mailer($this->transport); for ($i = 0; $i < $num_items; $i++) { @@ -447,30 +443,30 @@ class phpbb_jabber extends base if (!$this->connect()) { - $this->error('JABBER', $this->user->lang['ERR_JAB_CONNECT'] . '
' . $this->get_log()); - return false; + $this->error($this->user->lang['ERR_JAB_CONNECT'] . '
' . $this->get_log()); + return; } if (!$this->login()) { - $this->error('JABBER', $this->user->lang['ERR_JAB_AUTH'] . '
' . $this->get_log()); - return false; + $this->error($this->user->lang['ERR_JAB_AUTH'] . '
' . $this->get_log()); + return; } foreach ($addresses as $address) { if ($this->send_message($address, $msg, $subject) === false) { - $this->error('JABBER', $this->get_log()); + $this->error($this->get_log()); continue; } } } // No more data for this object? Unset it - if (!count($this->queue_data[$queue_object_name]['data'])) + if (!count($queue_data[$queue_object_name]['data'])) { - unset($this->queue_data[$queue_object_name]); + unset($queue_data[$queue_object_name]); } $this->disconnect(); @@ -500,13 +496,13 @@ class phpbb_jabber extends base { if (!$this->connect()) { - $this->error('JABBER', $this->user->lang['ERR_JAB_CONNECT'] . '
' . $this->get_log()); + $this->error($this->user->lang['ERR_JAB_CONNECT'] . '
' . $this->get_log()); return false; } if (!$this->login()) { - $this->error('JABBER', $this->user->lang['ERR_JAB_AUTH'] . '
' . $this->get_log()); + $this->error($this->user->lang['ERR_JAB_AUTH'] . '
' . $this->get_log()); return false; } @@ -514,7 +510,7 @@ class phpbb_jabber extends base { if ($this->send_message($address, $this->msg, $this->subject) === false) { - $this->error('JABBER', $this->get_log()); + $this->error($this->get_log()); continue; } } @@ -542,7 +538,7 @@ class phpbb_jabber extends base * * @param string $xml * - * @return bool + * @return int|bool */ public function send_xml($xml) { @@ -655,7 +651,7 @@ class phpbb_jabber extends base /** * Initiates account registration (based on data used for contructor) * - * @return bool + * @return bool|void */ public function register() { @@ -676,7 +672,7 @@ class phpbb_jabber extends base * @param string $type dnd, away, chat, xa or nothing * @param bool $unavailable set this to true if you want to become unavailable * - * @return bool + * @return int|bool */ function send_presence($message = '', $type = '', $unavailable = false) { @@ -702,7 +698,7 @@ class phpbb_jabber extends base * * @param array $xml * - * @return bool + * @return bool|void */ function response($xml) { @@ -1021,7 +1017,7 @@ class phpbb_jabber extends base * @param string $subject Message subject * @param string $type Message type * - * @return string + * @return int|bool */ public function send_message($to, $text, $subject = '', $type = 'normal') { diff --git a/phpBB/phpbb/messenger/queue.php b/phpBB/phpbb/messenger/queue.php index 6245642dd7..2206834269 100644 --- a/phpBB/phpbb/messenger/queue.php +++ b/phpBB/phpbb/messenger/queue.php @@ -35,7 +35,7 @@ class queue /** @var dispatcher */ protected $dispatcher; - /** @var phpbb\filesystem\filesystem_interface */ + /** @var \phpbb\filesystem\filesystem_interface */ protected $filesystem; /** @var service_collection */ @@ -117,6 +117,7 @@ class queue include($this->cache_file); + /** @psalm-suppress InvalidTemplateParam */ $messenger_collection_iterator = $this->messenger_method_collection->getIterator(); while ($messenger_collection_iterator->valid()) { diff --git a/phpBB/phpbb/notification/method/messenger_base.php b/phpBB/phpbb/notification/method/messenger_base.php index 0d9b3c163b..38e48944f0 100644 --- a/phpBB/phpbb/notification/method/messenger_base.php +++ b/phpBB/phpbb/notification/method/messenger_base.php @@ -112,6 +112,7 @@ abstract class messenger_base extends \phpbb\notification\method\base continue; } + /** @psalm-suppress InvalidTemplateParam */ $messenger_collection_iterator = $this->messenger->getIterator(); while ($messenger_collection_iterator->valid()) { diff --git a/tests/email/email_parsing_test.php b/tests/email/email_parsing_test.php index 8e536fcd7a..76770c789a 100644 --- a/tests/email/email_parsing_test.php +++ b/tests/email/email_parsing_test.php @@ -126,7 +126,7 @@ class phpbb_email_parsing_test extends phpbb_test_case $this->email = new \phpbb\messenger\method\phpbb_email( $config, $dispatcher, $lang, $log, $request, $user, $messenger_queue, $phpbb_path_helper, $extension_manager, $twig_extensions_collection, $twig_lexer, - $cache_path + $cache_path, $phpbb_root_path ); $phpbb_container->set('messenger.method.email', $this->email);